Modify getfullname so it performs the same processing that
authorKen Hornstein <kenh@pobox.com>
Tue, 13 Mar 2012 19:25:41 +0000 (15:25 -0400)
committerKen Hornstein <kenh@pobox.com>
Tue, 13 Mar 2012 19:25:41 +0000 (15:25 -0400)
mts.c:getuserinfo() does.

test/getfullname.c

index f0c8a2d..3dc221e 100644 (file)
@@ -9,6 +9,7 @@
 
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <unistd.h>
 #include <sys/types.h>
 #include <pwd.h>
 int
 main(int argc, char *argv[])
 {
+       struct passwd *pwd;
+       char name[BUFSIZ], *p;
+
        if (argc > 1) {
                fprintf (stderr, "usage: %s\n", argv[0]);
        }
 
-       struct passwd *pwd;
-
        pwd = getpwuid(getuid());
 
        if (! pwd) {
@@ -30,7 +32,36 @@ main(int argc, char *argv[])
                exit(1);
        }
 
-       printf("%s\n", pwd->pw_gecos);
+       /*
+        * Perform the same processing that getuserinfo() does.
+        */
+
+       strncpy(name, pwd->pw_gecos, sizeof(name));
+
+       name[sizeof(name) - 1] = '\0';
+
+       /*
+        * Stop at the first comma
+        */
+
+       if ((p = strchr(name, ',')))
+               *p = '\0';
+
+       /*
+        * Quote the entire string if it has a "." in it
+        */
+
+       if (strchr(name, '.')) {
+               char tmp[BUFSIZ];
+
+               snprintf(tmp, sizeof(tmp), "\"%s\"", name);
+               strncpy(name, tmp, sizeof(name));
+
+               name[sizeof(name) - 2] = '"';
+               name[sizeof(name) - 1] = '\0';
+       }
+
+       printf("%s\n", name);
 
        exit(0);
 }