X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;ds=sidebyside;f=zpm-syncfs.c;h=66e5aaa4b3eb685aa60d6744239efe940f03b879;hb=4b46503646910df3617d4f2d44112eddf75d902b;hp=51b010ef3f96daa8b32f8321f538851b20ecdff3;hpb=24b5f57f47823105a26f391c52131ec4c6374dce;p=zpackage diff --git a/zpm-syncfs.c b/zpm-syncfs.c index 51b010e..66e5aaa 100644 --- a/zpm-syncfs.c +++ b/zpm-syncfs.c @@ -628,8 +628,21 @@ static int remove_files(void *f, int ncols, char **vals, char **cols) { return 0; } + errno = 0; + if (lstat(dest, &st) == -1) { - return seterror(conf,"can't stat"); + switch (errno) { + case ENOENT: + /* TODO chatter if verbose */ + break; + case ENOTEMPTY: /* fall through */ + case EEXIST: + /* TODO chatter, or possibly require */ + break; + default: + return seterror(conf, "can't stat %s: %s", dest, strerror(errno)); + } + return 0; } if (S_ISDIR(st.st_mode)) { @@ -658,7 +671,7 @@ static int remove_files(void *f, int ncols, char **vals, char **cols) { case ENOENT: break; default: - return seterror(conf, "can't unlink"); + return seterror(conf, "can't unlink %s: %s", dest, strerror(errno)); } } @@ -1475,7 +1488,7 @@ int main(int ac, char **av) { fprintf(stderr, "file ops: %d\n", conf.ops_total); if (conf.ops_remove > 0) { if (conf.verbose) { - fprintf(stderr, "removing %d files\n", conf.ops_remove); + fprintf(stderr, "removing %d file%s\n", conf.ops_remove, conf.ops_remove > 0 ? "s" : ""); } conf.reverse = 1; conf.ops_completed = 0; @@ -1489,7 +1502,7 @@ int main(int ac, char **av) { if (conf.ops_update > 0) { if (conf.verbose) { - fprintf(stderr, "updating %d files\n", conf.ops_update); + fprintf(stderr, "updating %d file%s\n", conf.ops_update, conf.ops_update > 0 ? "s" : ""); } conf.reverse = 0; conf.ops_completed = 0; @@ -1503,7 +1516,7 @@ int main(int ac, char **av) { if (conf.ops_install > 0) { if (conf.verbose) { - fprintf(stderr, "installing %d files\n", conf.ops_install); + fprintf(stderr, "installing %d file%s\n", conf.ops_install, conf.ops_install > 0 ? "s" : ""); } conf.reverse = 0; conf.ops_completed = 0;