]> pd.if.org Git - zpackage/blobdiff - zpm-syncfs.c
ignore non-empty directories at unlink
[zpackage] / zpm-syncfs.c
index 51b010ef3f96daa8b32f8321f538851b20ecdff3..66e5aaa4b3eb685aa60d6744239efe940f03b879 100644 (file)
@@ -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;