[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.165 and 1.166

version 1.165, 2021/06/04 05:02:40 version 1.166, 2021/06/08 06:54:40
Line 71 
Line 71 
   
 }  }
   
   /* remove whitespace from end of string */
   void
   rtrim(char *s)
   {
           size_t i;
   
           if ((i = strlen(s)) == 0)
                   return;
           for (i--; i > 0; i--) {
                   if (isspace((int)s[i]))
                           s[i] = '\0';
           }
   }
   
 /* set/unset filedescriptor to non-blocking */  /* set/unset filedescriptor to non-blocking */
 int  int
 set_nonblock(int fd)  set_nonblock(int fd)
Line 1823 
Line 1837 
         return 1;          return 1;
 }  }
   
   
 /*  /*
  * Splits 's' into an argument vector. Handles quoted string and basic   * Splits 's' into an argument vector. Handles quoted string and basic
  * escape characters (\\, \", \'). Caller must free the argument vector   * escape characters (\\, \", \'). Caller must free the argument vector
  * and its members.   * and its members.
  */   */
 int  int
 argv_split(const char *s, int *argcp, char ***argvp)  argv_split(const char *s, int *argcp, char ***argvp, int terminate_on_comment)
 {  {
         int r = SSH_ERR_INTERNAL_ERROR;          int r = SSH_ERR_INTERNAL_ERROR;
         int argc = 0, quote, i, j;          int argc = 0, quote, i, j;
Line 1843 
Line 1856 
                 /* Skip leading whitespace */                  /* Skip leading whitespace */
                 if (s[i] == ' ' || s[i] == '\t')                  if (s[i] == ' ' || s[i] == '\t')
                         continue;                          continue;
                   if (terminate_on_comment && s[i] == '#')
                           break;
                 /* Start of a token */                  /* Start of a token */
                 quote = 0;                  quote = 0;
   
Line 1856 
Line 1870 
                         if (s[i] == '\\') {                          if (s[i] == '\\') {
                                 if (s[i + 1] == '\'' ||                                  if (s[i + 1] == '\'' ||
                                     s[i + 1] == '\"' ||                                      s[i + 1] == '\"' ||
                                     s[i + 1] == '\\') {                                      s[i + 1] == '\\' ||
                                       (quote == 0 && s[i + 1] == ' ')) {
                                         i++; /* Skip '\' */                                          i++; /* Skip '\' */
                                         arg[j++] = s[i];                                          arg[j++] = s[i];
                                 } else {                                  } else {
Line 1948 
Line 1963 
         sshbuf_free(buf);          sshbuf_free(buf);
         sshbuf_free(arg);          sshbuf_free(arg);
         return ret;          return ret;
   }
   
   char *
   argv_next(int *argcp, char ***argvp)
   {
           char *ret = (*argvp)[0];
   
           if (*argcp > 0 && ret != NULL) {
                   (*argcp)--;
                   (*argvp)++;
           }
           return ret;
   }
   
   void
   argv_consume(int *argcp)
   {
           *argcp = 0;
   }
   
   void
   argv_free(char **av, int ac)
   {
           int i;
   
           if (av == NULL)
                   return;
           for (i = 0; i < ac; i++)
                   free(av[i]);
           free(av);
 }  }
   
 /* Returns 0 if pid exited cleanly, non-zero otherwise */  /* Returns 0 if pid exited cleanly, non-zero otherwise */

Legend:
Removed from v.1.165  
changed lines
  Added in v.1.166