From: Sergey Poznyakoff Date: Mon, 17 Nov 2003 07:38:03 +0000 (+0000) Subject: (diff_sparse_files): Temporary placeholder. X-Git-Url: https://git.dogcows.com/gitweb?a=commitdiff_plain;h=3999bf6360930179f08a1265ce8713705aafd405;p=chaz%2Ftar (diff_sparse_files): Temporary placeholder. --- diff --git a/src/compare.c b/src/compare.c index 9191364..a502544 100644 --- a/src/compare.c +++ b/src/compare.c @@ -171,150 +171,10 @@ read_and_process (off_t size, int (*processor) (size_t, char *)) } } -/* JK Diff'ing a sparse file with its counterpart on the tar file is a - bit of a different story than a normal file. First, we must know what - areas of the file to skip through, i.e., we need to construct a - sparsearray, which will hold all the information we need. We must - compare small amounts of data at a time as we find it. */ - -/* FIXME: This does not look very solid to me, at first glance. Zero areas - are not checked, spurious sparse entries seemingly goes undetected, and - I'm not sure overall identical sparsity is verified. */ - static void diff_sparse_files (void) { - off_t remaining_size = current_stat_info.stat.st_size; - char *buffer = xmalloc (BLOCKSIZE * sizeof (char)); - size_t buffer_size = BLOCKSIZE; - union block *data_block = 0; - int counter = 0; - int different = 0; - - if (! fill_in_sparse_array ()) - fatal_exit (); - - while (remaining_size > 0) - { - ssize_t status; - size_t chunk_size; - off_t offset; - -#if 0 - off_t amount_read = 0; -#endif - - data_block = find_next_block (); - if (!data_block) - FATAL_ERROR ((0, 0, _("Unexpected EOF in archive"))); - chunk_size = sparsearray[counter].numbytes; - if (!chunk_size) - break; - - offset = sparsearray[counter].offset; - if (lseek (diff_handle, offset, SEEK_SET) < 0) - { - seek_error_details (current_stat_info.file_name, offset); - report_difference (NULL); - } - - /* Take care to not run out of room in our buffer. */ - - while (buffer_size < chunk_size) - { - if (buffer_size * 2 < buffer_size) - xalloc_die (); - buffer_size *= 2; - buffer = xrealloc (buffer, buffer_size * sizeof (char)); - } - - while (chunk_size > BLOCKSIZE) - { - if (status = safe_read (diff_handle, buffer, BLOCKSIZE), - status != BLOCKSIZE) - { - if (status < 0) - { - read_error (current_stat_info.file_name); - report_difference (NULL); - } - else - { - report_difference (ngettext ("Could only read %lu of %lu byte", - "Could only read %lu of %lu bytes", - chunk_size), - (unsigned long) status, - (unsigned long) chunk_size); - } - break; - } - - if (memcmp (buffer, data_block->buffer, BLOCKSIZE)) - { - different = 1; - break; - } - - chunk_size -= status; - remaining_size -= status; - set_next_block_after (data_block); - data_block = find_next_block (); - if (!data_block) - FATAL_ERROR ((0, 0, _("Unexpected EOF in archive"))); - } - if (status = safe_read (diff_handle, buffer, chunk_size), - status != chunk_size) - { - if (status < 0) - { - read_error (current_stat_info.file_name); - report_difference (NULL); - } - else - { - report_difference (ngettext ("Could only read %lu of %lu byte", - "Could only read %lu of %lu bytes", - chunk_size), - (unsigned long) status, - (unsigned long) chunk_size); - } - break; - } - - if (memcmp (buffer, data_block->buffer, chunk_size)) - { - different = 1; - break; - } -#if 0 - amount_read += chunk_size; - if (amount_read >= BLOCKSIZE) - { - amount_read = 0; - set_next_block_after (data_block); - data_block = find_next_block (); - if (!data_block) - FATAL_ERROR ((0, 0, _("Unexpected EOF in archive"))); - } -#endif - set_next_block_after (data_block); - counter++; - remaining_size -= chunk_size; - } - -#if 0 - /* If the number of bytes read isn't the number of bytes supposedly in - the file, they're different. */ - - if (amount_read != current_stat_info.stat.st_size) - different = 1; -#endif - - set_next_block_after (data_block); - free (sparsearray); - - if (different) - report_difference (_("Contents differ")); + /*FIXME!!*/abort(); } /* Call either stat or lstat over STAT_DATA, depending on @@ -355,7 +215,7 @@ diff_archive (void) { if (now_verifying) fprintf (stdlis, _("Verify ")); - print_header (-1); + print_header (¤t_stat_info, -1); } switch (current_header->header.typeflag)