[BACK]Return to misc.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / ssh

Diff for /src/usr.bin/ssh/misc.c between version 1.5.2.2 and 1.6

version 1.5.2.2, 2002/03/09 00:20:44 version 1.6, 2001/05/03 23:09:52
Line 1 
Line 1 
   /*      $OpenBSD$       */
   
 /*  /*
  * Copyright (c) 2000 Markus Friedl.  All rights reserved.   * Copyright (c) 2000 Markus Friedl.  All rights reserved.
  *   *
Line 29 
Line 31 
 #include "log.h"  #include "log.h"
 #include "xmalloc.h"  #include "xmalloc.h"
   
 /* remove newline at end of string */  
 char *  char *
 chop(char *s)  chop(char *s)
 {  {
         char *t = s;          char *t = s;
         while (*t) {          while (*t) {
                 if (*t == '\n' || *t == '\r') {                  if(*t == '\n' || *t == '\r') {
                         *t = '\0';                          *t = '\0';
                         return s;                          return s;
                 }                  }
Line 45 
Line 46 
   
 }  }
   
 /* set/unset filedescriptor to non-blocking */  
 void  void
 set_nonblock(int fd)  set_nonblock(int fd)
 {  {
         int val;          int val;
   
         val = fcntl(fd, F_GETFL, 0);          val = fcntl(fd, F_GETFL, 0);
         if (val < 0) {          if (val < 0) {
                 error("fcntl(%d, F_GETFL, 0): %s", fd, strerror(errno));                  error("fcntl(%d, F_GETFL, 0): %s", fd, strerror(errno));
                 return;                  return;
         }          }
         if (val & O_NONBLOCK) {          if (val & O_NONBLOCK) {
                 debug2("fd %d is O_NONBLOCK", fd);                  debug("fd %d IS O_NONBLOCK", fd);
                 return;                  return;
         }          }
         debug("fd %d setting O_NONBLOCK", fd);          debug("fd %d setting O_NONBLOCK", fd);
         val |= O_NONBLOCK;          val |= O_NONBLOCK;
         if (fcntl(fd, F_SETFL, val) == -1)          if (fcntl(fd, F_SETFL, val) == -1)
                 debug("fcntl(%d, F_SETFL, O_NONBLOCK): %s",                  if (errno != ENODEV)
                     fd, strerror(errno));                          error("fcntl(%d, F_SETFL, O_NONBLOCK): %s",
                               fd, strerror(errno));
 }  }
   
 void  
 unset_nonblock(int fd)  
 {  
         int val;  
   
         val = fcntl(fd, F_GETFL, 0);  
         if (val < 0) {  
                 error("fcntl(%d, F_GETFL, 0): %s", fd, strerror(errno));  
                 return;  
         }  
         if (!(val & O_NONBLOCK)) {  
                 debug2("fd %d is not O_NONBLOCK", fd);  
                 return;  
         }  
         debug("fd %d clearing O_NONBLOCK", fd);  
         val &= ~O_NONBLOCK;  
         if (fcntl(fd, F_SETFL, val) == -1)  
                 debug("fcntl(%d, F_SETFL, O_NONBLOCK): %s",  
                     fd, strerror(errno));  
 }  
   
 /* disable nagle on socket */  
 void  
 set_nodelay(int fd)  
 {  
         int opt;  
         socklen_t optlen;  
   
         optlen = sizeof opt;  
         if (getsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &opt, &optlen) == -1) {  
                 error("getsockopt TCP_NODELAY: %.100s", strerror(errno));  
                 return;  
         }  
         if (opt == 1) {  
                 debug2("fd %d is TCP_NODELAY", fd);  
                 return;  
         }  
         opt = 1;  
         debug("fd %d setting TCP_NODELAY", fd);  
         if (setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &opt, sizeof opt) == -1)  
                 error("setsockopt TCP_NODELAY: %.100s", strerror(errno));  
 }  
   
 /* Characters considered whitespace in strsep calls. */  /* Characters considered whitespace in strsep calls. */
 #define WHITESPACE " \t\r\n"  #define WHITESPACE " \t\r\n"
   
 /* return next token in configuration line */  
 char *  char *
 strdelim(char **s)  strdelim(char **s)
 {  {
Line 152 
Line 108 
         copy->pw_gecos = xstrdup(pw->pw_gecos);          copy->pw_gecos = xstrdup(pw->pw_gecos);
         copy->pw_uid = pw->pw_uid;          copy->pw_uid = pw->pw_uid;
         copy->pw_gid = pw->pw_gid;          copy->pw_gid = pw->pw_gid;
         copy->pw_expire = pw->pw_expire;  
         copy->pw_change = pw->pw_change;  
         copy->pw_class = xstrdup(pw->pw_class);          copy->pw_class = xstrdup(pw->pw_class);
         copy->pw_dir = xstrdup(pw->pw_dir);          copy->pw_dir = xstrdup(pw->pw_dir);
         copy->pw_shell = xstrdup(pw->pw_shell);          copy->pw_shell = xstrdup(pw->pw_shell);
         return copy;          return copy;
 }  }
   
 /*  int a2port(const char *s)
  * Convert ASCII string to TCP/IP port number.  
  * Port must be >0 and <=65535.  
  * Return 0 if invalid.  
  */  
 int  
 a2port(const char *s)  
 {  {
         long port;          long port;
         char *endp;          char *endp;
Line 181 
Line 129 
         return port;          return port;
 }  }
   
 #define SECONDS         1  
 #define MINUTES         (SECONDS * 60)  
 #define HOURS           (MINUTES * 60)  
 #define DAYS            (HOURS * 24)  
 #define WEEKS           (DAYS * 7)  
   
 /*  
  * Convert a time string into seconds; format is  
  * a sequence of:  
  *      time[qualifier]  
  *  
  * Valid time qualifiers are:  
  *      <none>  seconds  
  *      s|S     seconds  
  *      m|M     minutes  
  *      h|H     hours  
  *      d|D     days  
  *      w|W     weeks  
  *  
  * Examples:  
  *      90m     90 minutes  
  *      1h30m   90 minutes  
  *      2d      2 days  
  *      1w      1 week  
  *  
  * Return -1 if time string is invalid.  
  */  
 long  
 convtime(const char *s)  
 {  
         long total, secs;  
         const char *p;  
         char *endp;  
   
         errno = 0;  
         total = 0;  
         p = s;  
   
         if (p == NULL || *p == '\0')  
                 return -1;  
   
         while (*p) {  
                 secs = strtol(p, &endp, 10);  
                 if (p == endp ||  
                     (errno == ERANGE && (secs == LONG_MIN || secs == LONG_MAX)) ||  
                     secs < 0)  
                         return -1;  
   
                 switch (*endp++) {  
                 case '\0':  
                         endp--;  
                 case 's':  
                 case 'S':  
                         break;  
                 case 'm':  
                 case 'M':  
                         secs *= MINUTES;  
                         break;  
                 case 'h':  
                 case 'H':  
                         secs *= HOURS;  
                         break;  
                 case 'd':  
                 case 'D':  
                         secs *= DAYS;  
                         break;  
                 case 'w':  
                 case 'W':  
                         secs *= WEEKS;  
                         break;  
                 default:  
                         return -1;  
                 }  
                 total += secs;  
                 if (total < 0)  
                         return -1;  
                 p = endp;  
         }  
   
         return total;  
 }  
   
 char *  char *
 cleanhostname(char *host)  cleanhostname(char *host)
 {  {
Line 294 
Line 160 
                         return (0);                          return (0);
         }          }
         return (0);          return (0);
 }  
   
 /* function to assist building execv() arguments */  
 void  
 addargs(arglist *args, char *fmt, ...)  
 {  
         va_list ap;  
         char buf[1024];  
   
         va_start(ap, fmt);  
         vsnprintf(buf, sizeof(buf), fmt, ap);  
         va_end(ap);  
   
         if (args->list == NULL) {  
                 args->nalloc = 32;  
                 args->num = 0;  
         } else if (args->num+2 >= args->nalloc)  
                 args->nalloc *= 2;  
   
         args->list = xrealloc(args->list, args->nalloc * sizeof(char *));  
         args->list[args->num++] = xstrdup(buf);  
         args->list[args->num] = NULL;  
 }  }

Legend:
Removed from v.1.5.2.2  
changed lines
  Added in v.1.6