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

Diff for /src/usr.bin/finger/util.c between version 1.3 and 1.4

version 1.3, 1996/08/07 17:49:49 version 1.4, 1996/08/30 11:39:36
Line 81 
Line 81 
         register char *p, *t;          register char *p, *t;
         struct stat sb;          struct stat sb;
         extern int errno;          extern int errno;
         char *bp, name[1024];          char *mbp, *bp, *name;
           int len;
   
         pn->realname = pn->office = pn->officephone = pn->homephone = NULL;          pn->realname = pn->office = pn->officephone = pn->homephone = NULL;
   
Line 91 
Line 92 
         pn->shell = strdup(pw->pw_shell);          pn->shell = strdup(pw->pw_shell);
   
         /* why do we skip asterisks!?!? */          /* why do we skip asterisks!?!? */
         (void)strcpy(bp = tbuf, pw->pw_gecos);          mbp = bp = (char *)malloc(strlen(pw->pw_gecos)+1);
           strcpy(bp, pw->pw_gecos);
         if (*bp == '*')          if (*bp == '*')
                 ++bp;                  ++bp;
   
         /* ampersands get replaced by the login name */          /* ampersands get replaced by the login name */
         if (!(p = strsep(&bp, ",")))          if (!(p = strsep(&bp, ","))) {
                   free(mbp);
                 return;                  return;
         for (t = name; *t = *p; ++p)          }
           for (len = 0, t = p; *p; ++p) {
                   len++;
                   if (*p == '&')
                           len += strlen(pw->pw_name);
           }
           name = (char *)malloc(len + 1);
           for (p = t, t = name; *t = *p; ++p)
                 if (*t == '&') {                  if (*t == '&') {
                         (void)strcpy(t, pw->pw_name);                          (void)strcpy(t, pw->pw_name);
                         if (islower(*t))                          if (islower(*t))
                                 *t = toupper(*t);                                  *t = toupper(*t);
                         while (*++t);                          while (*++t);
                 }                  } else
                 else  
                         ++t;                          ++t;
           *t = '\0';
         pn->realname = strdup(name);          pn->realname = strdup(name);
         pn->office = ((p = strsep(&bp, ",")) && *p) ?          pn->office = ((p = strsep(&bp, ",")) && *p) ?
             strdup(p) : NULL;              strdup(p) : NULL;
Line 120 
Line 130 
                 if (errno != ENOENT) {                  if (errno != ENOENT) {
                         (void)fprintf(stderr,                          (void)fprintf(stderr,
                             "finger: %s: %s\n", tbuf, strerror(errno));                              "finger: %s: %s\n", tbuf, strerror(errno));
                           free(name);
                           free(mbp);
                         return;                          return;
                 }                  }
         } else if (sb.st_size != 0) {          } else if (sb.st_size != 0) {
                 pn->mailrecv = sb.st_mtime;                  pn->mailrecv = sb.st_mtime;
                 pn->mailread = sb.st_atime;                  pn->mailread = sb.st_atime;
         }          }
           free(name);
           free(mbp);
 }  }
   
 match(pw, user)  match(pw, user)

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.4