|
@@ -546,9 +546,12 @@ tarobject_matches(struct tarcontext *tc,
|
|
|
linksize = readlink(fn_old, linkname, stab->st_size + 1);
|
|
|
if (linksize < 0)
|
|
|
ohshite(_("unable to read link '%.255s'"), fn_old);
|
|
|
- else if (linksize != stab->st_size)
|
|
|
+ else if (linksize > stab->st_size)
|
|
|
ohshit(_("symbolic link '%.250s' size has changed from %jd to %zd"),
|
|
|
fn_old, (intmax_t)stab->st_size, linksize);
|
|
|
+ else if (linksize < stab->st_size)
|
|
|
+ warning(_("symbolic link '%.250s' size has changed from %jd to %zd"),
|
|
|
+ fn_old, (intmax_t)stab->st_size, linksize);
|
|
|
linkname[linksize] = '\0';
|
|
|
if (strcmp(linkname, te->linkname) == 0) {
|
|
|
free(linkname);
|
|
@@ -1033,9 +1036,12 @@ tarobject(void *ctx, struct tar_entry *ti)
|
|
|
r = readlink(fnamevb.buf, symlinkfn.buf, symlinkfn.size);
|
|
|
if (r < 0)
|
|
|
ohshite(_("unable to read link '%.255s'"), ti->name);
|
|
|
- else if (r != stab.st_size)
|
|
|
+ else if (r > stab.st_size)
|
|
|
ohshit(_("symbolic link '%.250s' size has changed from %jd to %zd"),
|
|
|
fnamevb.buf, (intmax_t)stab.st_size, r);
|
|
|
+ else if (r < stab.st_size)
|
|
|
+ warning(_("symbolic link '%.250s' size has changed from %jd to %zd"),
|
|
|
+ fnamevb.buf, (intmax_t)stab.st_size, r);
|
|
|
varbuf_trunc(&symlinkfn, r);
|
|
|
varbuf_end_str(&symlinkfn);
|
|
|
if (symlink(symlinkfn.buf,fnametmpvb.buf))
|