]> Dogcows Code - chaz/tar/commitdiff
(_GNU_SOURCE): Define.
authorPaul Eggert <eggert@cs.ucla.edu>
Wed, 11 Aug 1999 12:47:01 +0000 (12:47 +0000)
committerPaul Eggert <eggert@cs.ucla.edu>
Wed, 11 Aug 1999 12:47:01 +0000 (12:47 +0000)
(<fnmatch.h>): Include unconditionally.
(child_open_for_compress): Dup after closing, to avoid possible file
descriptor exhaustion.
(flush_write): Use FILESYSTEM_PREFIX_LEN instead of MSDOS ifdef.
(flush_read): Likewise.

src/buffer.c

index 1a0d6c743fcde3629b0afd7b8617f4cc7826dca4..49ea37f615134c74fff6c37712f98d60551c5972 100644 (file)
    with this program; if not, write to the Free Software Foundation, Inc.,
    59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
+/* Enable GNU extensions in fnmatch.h.  */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE 1
+#endif
+
 #include "system.h"
 
 #include <signal.h>
@@ -30,9 +35,7 @@ time_t time ();
 # include <sys/inode.h>
 #endif
 
-#ifndef FNM_LEADING_DIR
-# include <fnmatch.h>
-#endif
+#include <fnmatch.h>
 
 #include "common.h"
 #include "rmt.h"
@@ -355,8 +358,8 @@ child_open_for_compress (void)
 
   program_name = _("tar (child)");
 
-  xdup2 (parent_pipe[PREAD], STDIN_FILENO, _("(child) Pipe to stdin"));
   xclose (parent_pipe[PWRITE]);
+  xdup2 (parent_pipe[PREAD], STDIN_FILENO, _("(child) Pipe to stdin"));
 
   /* Check if we need a grandchild tar.  This happens only if either:
      a) we are writing stdout: to force reblocking;
@@ -864,7 +867,7 @@ open_archive (enum access_mode access)
          assign_string (&current_file_name, record_start->header.name);
 
          record_start->header.typeflag = GNUTYPE_VOLHDR;
-         TIME_TO_OCT (time (0), record_start->header.mtime);
+         TIME_TO_CHARS (time (0), record_start->header.mtime);
          finish_header (record_start);
 #if 0
          current_block++;
@@ -916,11 +919,7 @@ flush_write (void)
              return;
            }
 
-         cursor = save_name;
-#if MSDOS
-         if (cursor[1] == ':')
-           cursor += 2;
-#endif
+         cursor = save_name + FILESYSTEM_PREFIX_LEN (save_name);
          while (*cursor == '/')
            cursor++;
 
@@ -963,7 +962,7 @@ flush_write (void)
     {
       memset ((void *) record_start, 0, BLOCKSIZE);
       sprintf (record_start->header.name, "%s Volume %d", volume_label_option, volno);
-      TIME_TO_OCT (time (0), record_start->header.mtime);
+      TIME_TO_CHARS (time (0), record_start->header.mtime);
       record_start->header.typeflag = GNUTYPE_VOLHDR;
       finish_header (record_start);
     }
@@ -983,9 +982,9 @@ flush_write (void)
 
       strcpy (record_start->header.name, real_s_name);
       record_start->header.typeflag = GNUTYPE_MULTIVOL;
-      OFF_TO_OCT (real_s_sizeleft, record_start->header.size);
-      OFF_TO_OCT (real_s_totsize - real_s_sizeleft, 
-                 record_start->oldgnu_header.offset);
+      OFF_TO_CHARS (real_s_sizeleft, record_start->header.size);
+      OFF_TO_CHARS (real_s_totsize - real_s_sizeleft, 
+                   record_start->oldgnu_header.offset);
       tmp = verbose_option;
       verbose_option = 0;
       finish_header (record_start);
@@ -1015,12 +1014,8 @@ flush_write (void)
        real_s_name[0] = '\0';
       else
        {
-         char *cursor = save_name;
+         char *cursor = save_name + FILESYSTEM_PREFIX_LEN (save_name);
 
-#if MSDOS
-         if (cursor[1] == ':')
-           cursor += 2;
-#endif
          while (*cursor == '/')
            cursor++;
 
@@ -1107,12 +1102,8 @@ flush_read (void)
     {
       if (save_name)
        {
-         char *cursor = save_name;
+         char *cursor = save_name + FILESYSTEM_PREFIX_LEN (save_name);
 
-#if MSDOS
-         if (cursor[1] == ':')
-           cursor += 2;
-#endif
          while (*cursor == '/')
            cursor++;
 
@@ -1200,8 +1191,8 @@ error_loop:
              global_volno--;
              goto try_volume;
            }
-         s1 = UINTMAX_FROM_OCT (cursor->header.size);
-         s2 = UINTMAX_FROM_OCT (cursor->oldgnu_header.offset);
+         s1 = UINTMAX_FROM_CHARS (cursor->header.size);
+         s2 = UINTMAX_FROM_CHARS (cursor->oldgnu_header.offset);
          if (real_s_totsize != s1 + s2 || s1 + s2 < s2)
            {
              char totsizebuf[UINTMAX_STRSIZE_BOUND];
@@ -1218,7 +1209,7 @@ error_loop:
              goto try_volume;
            }
          if (real_s_totsize - real_s_sizeleft
-             != OFF_FROM_OCT (cursor->oldgnu_header.offset))
+             != OFF_FROM_CHARS (cursor->oldgnu_header.offset))
            {
              WARN ((0, 0, _("This volume is out of sequence")));
              volno--;
This page took 0.026802 seconds and 4 git commands to generate.