X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fcreate.c;h=62b9c51178f485075fc6e2df2797b2c7c25d4d81;hb=5aac7fa0e7b3ff355d23f8f27f6eee25452fd56a;hp=1bc82beb02be3e0412e9e6b2d9a711707cc91bcd;hpb=02a3a65bdd04b3ddf4fa5a84efdd1f0db4acdb5b;p=chaz%2Ftar diff --git a/src/create.c b/src/create.c index 1bc82be..62b9c51 100644 --- a/src/create.c +++ b/src/create.c @@ -253,7 +253,7 @@ dump_file (p, curdev, toplevel) && !S_ISDIR (hstat.st_mode) && (f_new_files > 1 || new_time > hstat.st_ctime)) { - if (curdev < 0) + if (curdev == -1) { msg ("%s: is unchanged; not dumped", p); } @@ -534,7 +534,7 @@ dump_file (p, curdev, toplevel) /* sum += i; if (sum < upperbound) goto extend;*/ - if (index_offset + i < upperbound) + if (index_offset + i <= upperbound) { index_offset += i; exhdr->ext_hdr.isextended++; @@ -1055,7 +1055,7 @@ deal_with_sparse (name, header, nulls_at_end) * realloc the scratch area, since we've run out of room -- */ sparsearray = (struct sp_array *) - realloc (sparsearray, + ck_realloc (sparsearray, 2 * sp_array_size * (sizeof (struct sp_array))); sp_array_size *= 2; } @@ -1105,6 +1105,11 @@ deal_with_sparse (name, header, nulls_at_end) } if (amidst_data) sparsearray[sparse_ind++].numbytes = numbytes; + else + { + sparsearray[sparse_ind].offset = offset-1; + sparsearray[sparse_ind++].numbytes = 1; + } close (fd); return sparse_ind - 1; @@ -1271,7 +1276,7 @@ start_header (name, st) strncpy (header->header.arch_name, name, NAMSIZ); header->header.arch_name[NAMSIZ - 1] = '\0'; - to_oct ((long) (st->st_mode & 07777), + to_oct ((long) (f_oldarch ? (st->st_mode & 07777) : st->st_mode), 8, header->header.mode); to_oct ((long) st->st_uid, 8, header->header.uid); to_oct ((long) st->st_gid, 8, header->header.gid);