rem: int escaped_filename = 0;  #define ISWHITE(c) ((c) == ' ' || (c) == '\t')
add: bool escaped_filename = false; size_t algo_name_len;
context: split_3 (char *s, size_t s_len,	 unsigned char **hex_digest, int *binary, char **file_name){  size_t i;  int escaped_filename = 0;#define ISWHITE(c) ((c) == ' ' || (c) == '\t')  i = 0;  while (ISWHITE (s[i]))    ++i;  /* Ignore this line if it is too short.     Each line must have at least `min_digest_line_length - 1' (or one more, if     the first is a backslash) more characters to contain correct message digest     information.  */  if (s_len - i < min_digest_line_length + (s[i] == '\\'))    return 1;  if (s[i] == '\\')    {      ++i;      escaped_filename = 1;    }  *hex_digest = (unsigned char *) &s[i];  /* The first field has to be the n-character hexadecimal     representation of the message digest.  If it is not followed     immediately by a white space it's an error.  */  i += digest_hex_bytes;  if (!ISWHITE (s[i]))    return 1;  s[i++] = '\0';  if (s[i] != ' ' && s[i] != '*')    return 1;  *binary = (s[i++] == '*');  /* All characters between the type indicator and end of line are     significant -- that includes leading and trailing white space.  */  *file_name = &s[i];  if (escaped_filename)    {      /* Translate each `\n' string in the file name to a NEWLINE,	 and each `\\' string to a backslash.  */      char *dst = &s[i];      while (i < s_len)	{	  switch (s[i])	    {	    case '\\':	      if (i == s_len - 1)		{		  /* A valid line does not end with a backslash.  */		  return 1;		}	      ++i;	      switch (s[i++])		{		case 'n':		  *dst++ = '\n';		  break;		case '\\':		  *dst++ = '\\';		  break;		default:		  /* Only `\' or `n' may follow a backslash.  */		  return 1;		}	      break;	    case '\0':	      /* The file name may not contain a NUL.  */	      return 1;	      break;	    default:	      *dst++ = s[i++];	      break;	    }	}      *dst = '\0';    }  return 0;}