]> diplodocus.org Git - nmh/blob - test/getfullname.c
new.c: Order two return statements to match comment.
[nmh] / test / getfullname.c
1 /*
2 * getfullname.c - Extract a user's name out of the GECOS field in
3 * the password file.
4 *
5 * This code is Copyright (c) 2012, by the authors of nmh. See the
6 * COPYRIGHT file in the root directory of the nmh distribution for
7 * complete copyright information.
8 */
9
10 #include <stdio.h>
11 #include <stdlib.h>
12 #include <string.h>
13 #include <unistd.h>
14 #include <sys/types.h>
15 #include <pwd.h>
16
17 extern void escape_display_name (char *, size_t);
18
19 int
20 main(int argc, char *argv[])
21 {
22 struct passwd *pwd;
23 char buf[BUFSIZ], *p;
24
25 if (argc > 2) {
26 fprintf (stderr, "usage: %s [name]\n", argv[0]);
27 return 1;
28 }
29 if (argc < 2) {
30 pwd = getpwuid(getuid());
31 if (! pwd) {
32 fprintf(stderr, "Unable to retrieve user info for "
33 "userid %ld\n", (long) getuid());
34 exit(1);
35 }
36
37 strncpy(buf, pwd->pw_gecos, sizeof(buf));
38 buf[sizeof(buf) - 1] = '\0';
39 } else
40 strncpy(buf, argv[1], sizeof(buf));
41
42 /*
43 * Perform the same processing that getuserinfo() does.
44 */
45
46 /*
47 * Stop at the first comma.
48 */
49 if ((p = strchr(buf, ',')))
50 *p = '\0';
51
52 /*
53 * Quote the entire string if it has a special character in it.
54 */
55 escape_display_name (buf, sizeof(buf));
56 puts(buf);
57
58 exit(0);
59 }