]> Dogcows Code - chaz/tar/commitdiff
Implement new keywords: GNU.sparse.name, GNU.sparse.major, GNU.sparse.minor, GNU...
authorSergey Poznyakoff <gray@gnu.org.ua>
Fri, 23 Jun 2006 15:22:50 +0000 (15:22 +0000)
committerSergey Poznyakoff <gray@gnu.org.ua>
Fri, 23 Jun 2006 15:22:50 +0000 (15:22 +0000)
src/xheader.c

index 3eb1505890f68b207c5c1a66d2f3b306521239af..089604347ceab7c916b588a8e46172ceb760a7e9 100644 (file)
@@ -1363,8 +1363,39 @@ volume_filename_decoder (struct tar_stat_info *st, char const *arg,
 {
   decode_string (&continued_file_name, arg);
 }
+
+static void
+sparse_major_coder (struct tar_stat_info const *st, char const *keyword,
+                   struct xheader *xhdr, void const *data)
+{
+  code_num (st->sparse_major, keyword, xhdr);
+}
+
+static void
+sparse_major_decoder (struct tar_stat_info *st, char const *arg,
+                     size_t size)
+{
+  uintmax_t u;
+  if (decode_num (&u, arg, TYPE_MAXIMUM (unsigned), "GNU.sparse.major"))
+    st->sparse_major = u;
+}
   
+static void
+sparse_minor_coder (struct tar_stat_info const *st, char const *keyword,
+                     struct xheader *xhdr, void const *data)
+{
+  code_num (st->sparse_minor, keyword, xhdr); 
+}
 
+static void
+sparse_minor_decoder (struct tar_stat_info *st, char const *arg,
+                     size_t size)
+{
+  uintmax_t u;
+  if (decode_num (&u, arg, TYPE_MAXIMUM (unsigned), "GNU.sparse.minor"))
+    st->sparse_minor = u;
+}
+  
 struct xhdr_tab const xhdr_tab[] = {
   { "atime",   atime_coder,    atime_decoder,    false },
   { "comment", dummy_coder,    dummy_decoder,    false },
@@ -1380,11 +1411,17 @@ struct xhdr_tab const xhdr_tab[] = {
   { "uname",   uname_coder,    uname_decoder,    false },
 
   /* Sparse file handling */
+  { "GNU.sparse.name",       path_coder, path_decoder,
+    true },
+  { "GNU.sparse.major",      sparse_major_coder, sparse_major_decoder,
+    true },
+  { "GNU.sparse.minor",      sparse_minor_coder, sparse_minor_decoder,
+    true },
+  { "GNU.sparse.realsize",  sparse_size_coder, sparse_size_decoder, true },
+  
   { "GNU.sparse.size",       sparse_size_coder, sparse_size_decoder, true },
   { "GNU.sparse.numblocks",  sparse_numblocks_coder, sparse_numblocks_decoder,
     true },
-  { "GNU.sparse.name",       path_coder, path_decoder,
-    true },
   /* tar 1.14 - 1.15.1 keywords. Multiple instances of these appeared in 'x'
      headers, and each of them was meaningful. It confilcted with POSIX specs,
      which requires that "when extended header records conflict, the last one
@@ -1393,7 +1430,7 @@ struct xhdr_tab const xhdr_tab[] = {
     true },
   { "GNU.sparse.numbytes",   sparse_numbytes_coder, sparse_numbytes_decoder,
     true },
-  /* tar >=1.16 keyword, introduced to remove the above-mentioned conflict. */
+  /* tar 1.15.90 keyword, introduced to remove the above-mentioned conflict. */
   { "GNU.sparse.map",        NULL /* Unused, see pax_dump_header() */,
     sparse_map_decoder, false },
 
This page took 0.024578 seconds and 4 git commands to generate.