need longlink patch in checked out tree debian/1.26-2
authorBdale Garbee <bdale@gag.com>
Fri, 19 Aug 2011 16:13:35 +0000 (10:13 -0600)
committerBdale Garbee <bdale@gag.com>
Fri, 19 Aug 2011 16:13:35 +0000 (10:13 -0600)
src/common.h
src/create.c
src/tar.c

index 0b9bd7a1273b5c76218863ffabbfa52097a42d12..a7a73e97ee1801b23eb5a7596353bc80abcaf88d 100644 (file)
@@ -832,3 +832,5 @@ void finish_deferred_unlinks (void);
 
 /* Module exit.c */
 extern void (*fatal_exit_hook) (void);
+
+GLOBAL int debian_longlink_hack;
index 43b5a4c23ab1140f38180d02e2b140c9886bd031..b36cf1372fe6b3bf40ef48e8f6e1ff4f87e0858b 100644 (file)
@@ -26,6 +26,8 @@
 #include "common.h"
 #include <hash.h>
 
+extern int debian_longlink_hack;
+
 /* Error number to use when an impostor is discovered.
    Pretend the impostor isn't there.  */
 enum { IMPOSTOR_ERRNO = ENOENT };
@@ -735,7 +737,7 @@ write_header_name (struct tar_stat_info *st)
       return write_short_name (st);
     }
   else if (NAME_FIELD_SIZE - (archive_format == OLDGNU_FORMAT)
-          < strlen (st->file_name))
+          < strlen (st->file_name) + debian_longlink_hack)
     return write_long_name (st);
   else
     return write_short_name (st);
@@ -1456,7 +1458,7 @@ dump_hard_link (struct tar_stat_info *st)
          block_ordinal = current_block_ordinal ();
          assign_string (&st->link_name, link_name);
          if (NAME_FIELD_SIZE - (archive_format == OLDGNU_FORMAT)
-             < strlen (link_name))
+             < strlen (link_name) + debian_longlink_hack)
            write_long_link (st);
 
          st->stat.st_size = 0;
index 928cfddd44a86220ab444844cac61c10da6495aa..ac44de865039eaebaa5d26d955204abff14c90f2 100644 (file)
--- a/src/tar.c
+++ b/src/tar.c
@@ -2566,6 +2566,16 @@ decode_options (int argc, char **argv)
   report_textual_dates (&args);
 }
 
+/* Debian specific environment variable used by pristine-tar to enable use of
+ * longlinks for filenames exactly 100 bytes long. */
+void debian_longlink_hack_init () {
+ char *s=getenv ("TAR_LONGLINK_100");
+ if (s && strcmp(s, "1") == 0)
+        debian_longlink_hack=1;
+ else
+        debian_longlink_hack=0;
+}
+
 \f
 /* Tar proper.  */
 
@@ -2585,6 +2595,8 @@ main (int argc, char **argv)
   filename_terminator = '\n';
   set_quoting_style (0, DEFAULT_QUOTING_STYLE);
 
+  debian_longlink_hack_init ();
+
   /* Make sure we have first three descriptors available */
   stdopen ();