Adjust for changed macro names in libgpg-error master.
[gnupg.git] / tools / gpgtar-extract.c
index cee609c..8613d19 100644 (file)
@@ -14,7 +14,7 @@
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * along with this program; if not, see <https://www.gnu.org/licenses/>.
  */
 
 #include <config.h>
@@ -27,7 +27,7 @@
 #include <unistd.h>
 #include <assert.h>
 
-#include "i18n.h"
+#include "../common/i18n.h"
 #include "../common/exectool.h"
 #include "../common/sysutils.h"
 #include "../common/ccparray.h"
@@ -122,11 +122,15 @@ extract_directory (const char *dirname, tar_header_t hdr)
   if (fname[strlen (fname)-1] == '/')
     fname[strlen (fname)-1] = 0;
 
- /* Note that we don't need to care about EEXIST because we always
-     extract into a new hierarchy.  */
   if (! opt.dry_run && gnupg_mkdir (fname, "-rwx------"))
     {
       err = gpg_error_from_syserror ();
+      if (gpg_err_code (err) == GPG_ERR_EEXIST)
+        {
+          /* Ignore existing directories while extracting.  */
+          err = 0;
+        }
+
       if (gpg_err_code (err) == GPG_ERR_ENOENT)
         {
           /* Try to create the directory with parents but keep the
@@ -341,21 +345,21 @@ gpgtar_extract (const char *filename, int decrypt)
     dirname = xtrystrdup (opt.directory);
   else
     {
-      if (filename)
+      if (opt.filename)
         {
-          dirprefix = strrchr (filename, '/');
+          dirprefix = strrchr (opt.filename, '/');
           if (dirprefix)
             dirprefix++;
           else
-            dirprefix = filename;
+            dirprefix = opt.filename;
         }
-      else if (opt.filename)
+      else if (filename)
         {
-          dirprefix = strrchr (opt.filename, '/');
+          dirprefix = strrchr (filename, '/');
           if (dirprefix)
             dirprefix++;
           else
-            dirprefix = opt.filename;
+            dirprefix = filename;
         }
 
       if (!dirprefix || !*dirprefix)