X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=bin%2Fad%2Fad_rm.c;h=b32e659fad5ff73a833a0c6de20575adcde66fb5;hb=3a84db87064922ad10ac10cc1d6833380e575995;hp=b9ef2c3c2d941d11b8a0c7eba4227e0e4011a047;hpb=ffd50caa895e01aed02dcf0543700488463c3a2b;p=netatalk.git diff --git a/bin/ad/ad_rm.c b/bin/ad/ad_rm.c index b9ef2c3c..b32e659f 100644 --- a/bin/ad/ad_rm.c +++ b/bin/ad/ad_rm.c @@ -32,7 +32,6 @@ #include #include #include -#include #include #include #include @@ -133,7 +132,7 @@ static void usage_rm(void) exit(EXIT_FAILURE); } -int ad_rm(int argc, char *argv[]) +int ad_rm(int argc, char *argv[], AFPObj *obj) { int ch; @@ -166,7 +165,7 @@ int ad_rm(int argc, char *argv[]) for (int i = 0; argv[i] != NULL; i++) { /* Load .volinfo file for source */ - openvol(argv[i], &volume); + openvol(obj, argv[i], &volume); if (nftw(argv[i], rm, upfunc, 20, FTW_DEPTH | FTW_PHYS) == -1) { if (alarmed) { @@ -201,8 +200,8 @@ static int rm(const char *path, switch (statp->st_mode & S_IFMT) { case S_IFLNK: - if (volume.volinfo.v_path) { - if ((volume.volinfo.v_adouble == AD_VERSION2) + if (volume.vol->v_path) { + if ((volume.vol->v_adouble == AD_VERSION2) && (strstr(path, ".AppleDouble") != NULL)) { /* symlink inside adouble dir */ if (unlink(path) != 0) @@ -212,11 +211,11 @@ static int rm(const char *path, /* Get CNID of Parent and add new childir to CNID database */ pdid = did; - if ((cnid = cnid_for_path(&volume, path, &did)) == CNID_INVALID) { + if ((cnid = cnid_for_path(volume.vol->v_cdb, volume.vol->v_path, path, &did)) == CNID_INVALID) { SLOG("Error resolving CNID for %s", path); return -1; } - if (cnid_delete(volume.volume.v_cdb, cnid) != 0) { + if (cnid_delete(volume.vol->v_cdb, cnid) != 0) { SLOG("Error removing CNID %u for %s", ntohl(cnid), path); return -1; } @@ -235,8 +234,8 @@ static int rm(const char *path, return FTW_SKIP_SUBTREE; } - if (volume.volinfo.v_path) { - if ((volume.volinfo.v_adouble == AD_VERSION2) + if (volume.vol->v_path) { + if ((volume.vol->v_adouble == AD_VERSION2) && (strstr(path, ".AppleDouble") != NULL)) { /* should be adouble dir itself */ if (rmdir(path) != 0) { @@ -248,11 +247,11 @@ static int rm(const char *path, } /* Get CNID of Parent and add new childir to CNID database */ - if ((did = cnid_for_path(&volume, path, &pdid)) == CNID_INVALID) { + if ((did = cnid_for_path(volume.vol->v_cdb, volume.vol->v_path, path, &pdid)) == CNID_INVALID) { SLOG("Error resolving CNID for %s", path); return -1; } - if (cnid_delete(volume.volume.v_cdb, did) != 0) { + if (cnid_delete(volume.vol->v_cdb, did) != 0) { SLOG("Error removing CNID %u for %s", ntohl(did), path); return -1; } @@ -283,8 +282,8 @@ static int rm(const char *path, break; default: - if (volume.volinfo.v_path) { - if ((volume.volinfo.v_adouble == AD_VERSION2) + if (volume.vol->v_path) { + if ((volume.vol->v_adouble == AD_VERSION2) && (strstr(path, ".AppleDouble") != NULL)) { /* file in adouble dir */ if (unlink(path) != 0) @@ -294,17 +293,17 @@ static int rm(const char *path, /* Get CNID of Parent and add new childir to CNID database */ pdid = did; - if ((cnid = cnid_for_path(&volume, path, &did)) == CNID_INVALID) { + if ((cnid = cnid_for_path(volume.vol->v_cdb, volume.vol->v_path, path, &did)) == CNID_INVALID) { SLOG("Error resolving CNID for %s", path); return -1; } - if (cnid_delete(volume.volume.v_cdb, cnid) != 0) { + if (cnid_delete(volume.vol->v_cdb, cnid) != 0) { SLOG("Error removing CNID %u for %s", ntohl(cnid), path); return -1; } /* Ignore errors, because with -R adouble stuff is always alread gone */ - volume.volume.vfs->vfs_deletefile(&volume.volume, -1, path); + volume.vol->vfs->vfs_deletefile(volume.vol, -1, path); } if (unlink(path) != 0) {