#include <sys/types.h>
#include <pwd.h>
+extern void escape_display_name (char *, size_t);
+
int
main(int argc, char *argv[])
{
struct passwd *pwd;
- char name[BUFSIZ], *p;
-
- if (argc > 1) {
- fprintf (stderr, "usage: %s\n", argv[0]);
- }
-
- pwd = getpwuid(getuid());
-
- if (! pwd) {
- fprintf(stderr, "Unable to retrieve user info for "
- "userid %ld\n", (long) getuid());
- exit(1);
+ char buf[BUFSIZ], *p;
+
+ if (argc < 2) {
+ pwd = getpwuid(getuid());
+
+ if (! pwd) {
+ fprintf(stderr, "Unable to retrieve user info for "
+ "userid %ld\n", (long) getuid());
+ exit(1);
+ }
+
+ strncpy(buf, pwd->pw_gecos, sizeof(buf));
+ buf[sizeof(buf) - 1] = '\0';
+ } else if (argc == 2) {
+ strncpy(buf, argv[1], sizeof(buf));
+ } else if (argc > 2) {
+ fprintf (stderr, "usage: %s [name]\n", argv[0]);
+ return 1;
}
/*
* Perform the same processing that getuserinfo() does.
*/
- strncpy(name, pwd->pw_gecos, sizeof(name));
-
- name[sizeof(name) - 1] = '\0';
-
/*
- * Stop at the first comma
+ * Stop at the first comma.
*/
-
- if ((p = strchr(name, ',')))
+ if ((p = strchr(buf, ',')))
*p = '\0';
/*
- * Quote the entire string if it has a "." in it
+ * Quote the entire string if it has a special character in it.
*/
+ escape_display_name (buf, sizeof(buf));
- 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);
+ printf("%s\n", buf);
exit(0);
}