- return seterror(conf, "%s (hashdiff): %s", accept ? "existing file not acceptable" : "file exists", nitem.dest);
+ if (nitem.ftype == 'l') {
+ char link[1024];
+ ssize_t lsize;
+ lsize = readlink(nitem.dest, link, sizeof link);
+ if (lsize == -1 || (size_t)lsize >= sizeof link) {
+ return seterror(conf, "%s (linkdiff): expecting %s -> %s, unable to read link", accept ? "existing file not acceptable" : "file exists", nitem.dest, nitem.target, link);
+ } else {
+ link[lsize] = 0;
+ /* links must be different */
+ return seterror(conf, "%s (linkdiff): expecting %s -> %s, have -> %s", accept ? "existing file not acceptable" : "file exists", nitem.dest, nitem.target, link);
+ }
+ } else {
+ return seterror(conf, "%s (hashdiff): %s", accept ? "existing file not acceptable" : "file exists", nitem.dest);
+ }