=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/sendbug/sendbug.c,v retrieving revision 1.12 retrieving revision 1.13 diff -c -r1.12 -r1.13 *** src/usr.bin/sendbug/sendbug.c 2007/03/23 05:08:03 1.12 --- src/usr.bin/sendbug/sendbug.c 2007/03/23 06:16:24 1.13 *************** *** 1,4 **** ! /* $OpenBSD: sendbug.c,v 1.12 2007/03/23 05:08:03 tedu Exp $ */ /* * Written by Ray Lai . --- 1,4 ---- ! /* $OpenBSD: sendbug.c,v 1.13 2007/03/23 06:16:24 ray Exp $ */ /* * Written by Ray Lai . *************** *** 12,17 **** --- 12,18 ---- #include #include + #include #include #include #include *************** *** 242,261 **** void init(void) { ! size_t len; int sysname[2]; if ((pw = getpwuid(getuid())) == NULL) { err(1, "getpwuid"); } ! /* Get full name. */ ! len = strcspn(pw->pw_gecos, ","); if ((fullname = malloc(len + 1)) == NULL) { err(1, "malloc"); } ! memcpy(fullname, pw->pw_gecos, len); ! fullname[len] = '\0'; sysname[0] = CTL_KERN; sysname[1] = KERN_OSTYPE; --- 243,288 ---- void init(void) { ! size_t len = 0, namelen; int sysname[2]; + const char *src; + char *dst; if ((pw = getpwuid(getuid())) == NULL) { err(1, "getpwuid"); } + namelen = strlen(pw->pw_name); ! /* Add length of expanded '&', minus existing '&'. */ ! src = pw->pw_gecos; ! src += strcspn(src, ",&"); ! while (*src == '&') { ! len += namelen - 1; ! /* Look for next '&', skipping the one we just found. */ ! src += 1 + strcspn(src, ",&"); ! } ! /* Add full name length, including all those '&' we skipped. */ ! len += src - pw->pw_gecos; if ((fullname = malloc(len + 1)) == NULL) { err(1, "malloc"); } ! dst = fullname; ! src = pw->pw_gecos; ! while (*src != ',' && *src != '\0') { ! /* Copy text up to ',' or '&' and skip. */ ! len = strcspn(src, ",&"); ! memcpy(dst, src, len); ! dst += len; ! src += len; ! /* Replace '&' with login. */ ! if (*src == '&') { ! memcpy(dst, pw->pw_name, namelen); ! *dst = toupper((unsigned char)*dst); ! dst += namelen; ! ++src; ! } ! } ! *dst = '\0'; sysname[0] = CTL_KERN; sysname[1] = KERN_OSTYPE;