--- patch.py.orig	2018-11-09 11:48:08.507323235 -0800
+++ patch.py	2018-11-09 11:48:26.759761184 -0800
@@ -263,6 +263,7 @@
 
     self.errors = 0    # fatal parsing errors
     self.warnings = 0  # non-critical warnings
+    self.already_patched = False
     # --- /API ---
 
     if stream:
@@ -803,10 +804,10 @@
 
   def findfile(self, old, new):
     """ return name of file to be patched or None """
-    if exists(old):
-      return old
-    elif exists(new):
+    if exists(new):
       return new
+    elif exists(old):
+      return old
     else:
       # [w] Google Code generates broken patches with its online editor
       debug("broken patch from Google Code, stripping prefixes..")
@@ -826,10 +827,6 @@
         from file paths. `root` parameter specifies working dir.
         return True on success
     """
-    if root:
-      prevdir = os.getcwd()
-      os.chdir(root)
-
     total = len(self.items)
     errors = 0
     if strip:
@@ -853,6 +850,8 @@
         new = pathstrip(p.target, strip)
       else:
         old, new = p.source, p.target
+      old = os.path.join(root, old)
+      new = os.path.join(root, new)
 
       filename = self.findfile(old, new)
 
@@ -954,9 +953,6 @@
             # todo: proper rejects
             shutil.move(backupname, filename)
 
-    if root:
-      os.chdir(prevdir)
-
     # todo: check for premature eof
     return (errors == 0)