Patch to fix bug 868, and some related cleanup while I was in the area.
authorBernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Fri, 19 May 2006 10:49:38 +0000 (10:49 -0000)
committerBernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Fri, 19 May 2006 10:49:38 +0000 (10:49 -0000)
A tab is now taken as the end of filename if it's there, but if it isn't
(because the timestamp isn't there) we continue with the existing untruncated
line as the filename.
(r15025 from trunk plus coding-style fixes for the patch)

editors/patch.c

index 9a3740882410474165bf4ea765366dc83b798b97..666aa73a602982b8c2aa66ab5ded9820870dda54 100644 (file)
@@ -54,29 +54,19 @@ static unsigned int copy_lines(FILE *src_stream, FILE *dest_stream, const unsign
 
 static char *extract_filename(char *line, int patch_level)
 {
-       char *filename_start_ptr = line + 4;
+       char *temp, *filename_start_ptr = line + 4;
        int i;
 
        /* Terminate string at end of source filename */
-       {
-               char *line_ptr;
-               line_ptr = strchr(filename_start_ptr, '\t');
-               if (!line_ptr) {
-                       bb_perror_msg("Malformed line %s", line);
-                       return(NULL);
-               }
-               *line_ptr = '\0';
-       }
+       temp = strchr(filename_start_ptr, '\t');
+       if (temp)
+               *temp = 0;
 
        /* Skip over (patch_level) number of leading directories */
        for (i = 0; i < patch_level; i++) {
-               char *dirname_ptr;
-
-               dirname_ptr = strchr(filename_start_ptr, '/');
-               if (!dirname_ptr) {
+               if (!(temp = strchr(filename_start_ptr, '/')))
                        break;
-               }
-               filename_start_ptr = dirname_ptr + 1;
+               filename_start_ptr = temp + 1;
        }
 
        return(bb_xstrdup(filename_start_ptr));