#include <closeout.h>
#include <fnmatch.h>
-#include <getline.h>
#include <human.h>
#include <quotearg.h>
ct_none,
ct_compress,
ct_gzip,
- ct_bzip2
+ ct_bzip2,
+ ct_lzma
};
struct zip_magic
{ ct_compress, 2, "\037\235", "compress", "-Z" },
{ ct_gzip, 2, "\037\213", "gzip", "-z" },
{ ct_bzip2, 3, "BZh", "bzip2", "-j" },
+ { ct_lzma, 6, "\xFFLZMA", "lzma", "-a" }, /* FIXME: ???? */
};
#define NMAGIC (sizeof(magic)/sizeof(magic[0]))
{
struct zip_magic const *p;
bool sfr;
-
+ bool short_file = false;
+
/* Prepare global data needed for find_next_block: */
record_end = record_start; /* set up for 1st record = # 0 */
sfr = read_full_records;
read_full_records = true; /* Suppress fatal error on reading a partial
record */
- find_next_block ();
-
+ if (find_next_block () == 0)
+ short_file = true;
+
/* Restore global values */
read_full_records = sfr;
if (memcmp (record_start->buffer, p->magic, p->length) == 0)
return p->type;
+ if (short_file)
+ ERROR ((0, 0, _("This does not look like a tar archive")));
+
return ct_none;
}
}
static void
-do_checkpoint (bool write)
+do_checkpoint (bool do_write)
{
if (checkpoint_option && !(++checkpoint % checkpoint_option))
{
break;
case checkpoint_text:
- if (write)
+ if (do_write)
/* TRANSLATORS: This is a ``checkpoint of write operation'',
*not* ``Writing a checkpoint''.
E.g. in Spanish ``Punto de comprobaci@'on de escritura'',
{
size_t status;
union block *header;
- int access;
+ enum access_mode acc;
switch (subcommand_option)
{
case APPEND_SUBCOMMAND:
case CAT_SUBCOMMAND:
case UPDATE_SUBCOMMAND:
- access = ACCESS_UPDATE;
+ acc = ACCESS_UPDATE;
break;
default:
- access = ACCESS_READ;
+ acc = ACCESS_READ;
break;
}
- if (!new_volume (access))
+ if (!new_volume (acc))
return true;
while ((status = rmtread (archive, record_start->buffer, record_size))