]> Dogcows Code - chaz/tar/blobdiff - src/buffer.c
(struct zip_magic): Use char arrays, not pointers.
[chaz/tar] / src / buffer.c
index b41169a7a932ee1954977dfffabe94cadc91fb56..e4225fe1e72e0a2739c93a3af6016c8f1953cd85 100644 (file)
@@ -1,7 +1,7 @@
 /* Buffer management for tar.
 
    Copyright (C) 1988, 1992, 1993, 1994, 1996, 1997, 1999, 2000, 2001,
-   2003, 2004 Free Software Foundation, Inc.
+   2003, 2004, 2005 Free Software Foundation, Inc.
 
    Written by John Gilmore, on 1985-08-25.
 
@@ -159,17 +159,17 @@ enum compress_type {
 struct zip_magic
 {
   enum compress_type type;
-  unsigned char *magic;
   size_t length;
-  char *program;
-  char *option;
+  char magic[sizeof "BZh" - 1];
+  char program[sizeof "compress"];
+  char option[sizeof "-Z"];
 };
 
-static struct zip_magic magic[] = {
+static struct zip_magic const magic[] = {
   { ct_none, },
-  { ct_compress, "\037\235", 2, "compress", "-Z" },
-  { ct_gzip,     "\037\213", 2, "gzip", "-z"  },
-  { ct_bzip2,    "BZh",      3, "bzip2", "-j" },
+  { ct_compress, 2, "\037\235", "compress", "-Z" },
+  { ct_gzip,     2, "\037\213", "gzip", "-z"  },
+  { ct_bzip2,    3, "BZh",      "bzip2", "-j" },
 };
 
 #define NMAGIC (sizeof(magic)/sizeof(magic[0]))
@@ -178,10 +178,10 @@ static struct zip_magic magic[] = {
 #define compress_program(t) magic[t].program
 
 /* Check if the file ARCHIVE is a compressed archive. */
-enum compress_type 
+enum compress_type
 check_compressed_archive ()
 {
-  struct zip_magic *p;
+  struct zip_magic const *p;
   bool sfr, srp;
 
   /* Prepare global data needed for find_next_block: */
@@ -205,7 +205,7 @@ check_compressed_archive ()
   for (p = magic + 1; p < magic + NMAGIC; p++)
     if (memcmp (record_start->buffer, p->magic, p->length) == 0)
       return p->type;
-  
+
   return ct_none;
 }
 
@@ -220,10 +220,10 @@ open_compressed_archive ()
   if (archive == -1)
     return archive;
 
-  if (!multi_volume_option) 
+  if (!multi_volume_option)
     {
       enum compress_type type = check_compressed_archive ();
-  
+
       if (type == ct_none)
        return archive;
 
@@ -238,10 +238,10 @@ open_compressed_archive ()
       child_pid = sys_child_open_for_uncompress ();
       read_full_records = reading_from_pipe = true;
     }
-  
+
   records_read = 0;
   record_end = record_start; /* set up for 1st record = # 0 */
-  
+
   return archive;
 }
 \f
@@ -253,7 +253,7 @@ print_total_written (void)
   char bytes[sizeof (tarlong) * CHAR_BIT];
   char abbr[LONGEST_HUMAN_READABLE + 1];
   char rate[LONGEST_HUMAN_READABLE + 1];
-  
+
   int human_opts = human_autoscale | human_base_1024 | human_SI | human_B;
 
   sprintf (bytes, TARLONG_FORMAT, written);
@@ -407,9 +407,9 @@ open_archive (enum access_mode wanted_access)
 
   read_full_records = read_full_records_option;
   reading_from_pipe = false;
-  
+
   records_read = 0;
-  
+
   if (use_compress_program_option)
     {
       switch (wanted_access)
@@ -444,7 +444,7 @@ open_archive (enum access_mode wanted_access)
        case ACCESS_READ:
          {
            enum compress_type type;
-           
+
            archive = STDIN_FILENO;
 
            type = check_compressed_archive (archive);
@@ -564,7 +564,7 @@ flush_write (void)
 
   if (checkpoint_option && !(++checkpoint % 10))
     /* TRANSLATORS: This is a ``checkpoint of write operation'',
-       *not* ``Writing a checkpoint''. 
+       *not* ``Writing a checkpoint''.
        E.g. in Spanish ``Punto de comprobaci@'on de escritura'',
        *not* ``Escribiendo un punto de comprobaci@'on'' */
     WARN ((0, 0, _("Write checkpoint %d"), checkpoint));
@@ -656,7 +656,7 @@ flush_write (void)
        FATAL_ERROR ((0, 0,
                      _("%s: file name too long to be stored in a GNU multivolume header"),
                      quotearg_colon (real_s_name)));
-      
+
       memset (record_start, 0, BLOCKSIZE);
 
       /* FIXME: Michael P Urban writes: [a long name file] is being written
@@ -669,7 +669,7 @@ flush_write (void)
       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 (&current_stat_info, record_start, -1);
@@ -1050,13 +1050,13 @@ seek_archive (off_t size)
   off_t offset;
   off_t nrec, nblk;
   off_t skipped = (blocking_factor - (current_block - record_start));
-  
+
   size -= skipped * BLOCKSIZE;
-  
+
   if (size < record_size)
     return 0;
   /* FIXME: flush? */
-  
+
   /* Compute number of records to skip */
   nrec = size / record_size;
   offset = rmtlseek (archive, nrec * record_size, SEEK_CUR);
@@ -1075,7 +1075,7 @@ seek_archive (off_t size)
   records_read += nblk / blocking_factor;
   record_start_block = offset - blocking_factor;
   current_block = record_end;
+
   return nblk;
 }
 
@@ -1089,7 +1089,7 @@ close_archive (void)
   sys_drain_input_pipe ();
 
   compute_duration ();
-  if (verify_option) 
+  if (verify_option)
     verify_volume ();
 
   if (rmtclose (archive) != 0)
@@ -1310,4 +1310,3 @@ new_volume (enum access_mode mode)
 
   return true;
 }
-
This page took 0.026814 seconds and 4 git commands to generate.