rem: const int result_len = strlen (gecos_name) + count_ampersands (gecos_name) * (strlen (user_name) - 1) + 1; char *const result = xmalloc (result_len); char *r = result;
add: size_t rsize = strlen (gecos_name) + 1; char *result; char *r; size_t ampersands = count_ampersands (gecos_name);  if (ampersands != 0) { size_t ulen = strlen (user_name); size_t product = ampersands * ulen; rsize += product - ampersands; if (xalloc_oversized (ulen, ampersands) || rsize < product) xalloc_die (); }  r = result = xmalloc (rsize);
context: create_fullname (const char *gecos_name, const char *user_name){  const int result_len = strlen (gecos_name)    + count_ampersands (gecos_name) * (strlen (user_name) - 1) + 1;  char *const result = xmalloc (result_len);  char *r = result;  while (*gecos_name)    {      if (*gecos_name == '&')	{	  const char *uname = user_name;	  if (ISLOWER (*uname))	    *r++ = TOUPPER (*uname++);	  while (*uname)	    *r++ = *uname++;	}      else	{	  *r++ = *gecos_name;	}      gecos_name++;    }  *r = 0;  return result;}