d1ec77b
diff -up patch-2.6/src/inp.c.sigsegv patch-2.6/src/inp.c
d1ec77b
--- patch-2.6/src/inp.c.sigsegv	2009-11-02 19:09:57.000000000 +0000
d1ec77b
+++ patch-2.6/src/inp.c	2009-11-16 09:31:52.305022200 +0000
d1ec77b
@@ -77,6 +77,14 @@ re_input (void)
cvsdist 191b24e
     }
cvsdist 191b24e
 }
cvsdist 191b24e
 
cvsdist 191b24e
+void
cvsdist 191b24e
+reset_scan_input_vars()
cvsdist 191b24e
+{
cvsdist 191b24e
+ using_plan_a = 1;
cvsdist 191b24e
+ i_buffer = NULL;
cvsdist 191b24e
+ i_ptr = NULL;
cvsdist 191b24e
+}
cvsdist 191b24e
+
cvsdist 191b24e
 /* Construct the line index, somehow or other. */
cvsdist 191b24e
 
cvsdist 191b24e
 void
d1ec77b
diff -up patch-2.6/src/inp.h.sigsegv patch-2.6/src/inp.h
d1ec77b
--- patch-2.6/src/inp.h.sigsegv	2009-11-02 19:09:57.000000000 +0000
d1ec77b
+++ patch-2.6/src/inp.h	2009-11-16 09:32:24.440021838 +0000
d1ec77b
@@ -24,4 +24,5 @@ XTERN LINENUM input_lines;		/* how long 
d1ec77b
 char const *ifetch (LINENUM, bool, size_t *);
d1ec77b
 void get_input_file (char const *, char const *);
d1ec77b
 void re_input (void);
d1ec77b
+void reset_scan_input_vars (void);
d1ec77b
 void scan_input (char *);
d1ec77b
diff -up patch-2.6/src/patch.c.sigsegv patch-2.6/src/patch.c
d1ec77b
--- patch-2.6/src/patch.c.sigsegv	2009-11-02 19:09:57.000000000 +0000
d1ec77b
+++ patch-2.6/src/patch.c	2009-11-16 09:31:52.306021801 +0000
d1ec77b
@@ -210,7 +210,10 @@ main (int argc, char **argv)
cvsdist 191b24e
 
cvsdist 191b24e
 	/* find out where all the lines are */
cvsdist 191b24e
 	if (!skip_rest_of_patch)
cvsdist 191b24e
-	    scan_input (inname);
cvsdist 191b24e
+          scan_input (inname);
cvsdist 191b24e
+        else
cvsdist 191b24e
+          reset_scan_input_vars ();
cvsdist 191b24e
+        
cvsdist 191b24e
 
cvsdist 191b24e
 	/* from here on, open no standard i/o files, because malloc */
cvsdist 191b24e
 	/* might misfire and we can't catch it easily */