X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=bin%2Fad%2Fad_mv.c;h=7f592dd27e1aaf0623bb2a2e34038e13a6468b33;hb=7d6b6d1233e9bf0d93afb3270362ce4d904a6b65;hp=342f22211d04e662ef9022601ef6df101a3bf764;hpb=72e2623a266b53689f667f6b5af5d1a0eb241be3;p=netatalk.git diff --git a/bin/ad/ad_mv.c b/bin/ad/ad_mv.c index 342f2221..7f592dd2 100644 --- a/bin/ad/ad_mv.c +++ b/bin/ad/ad_mv.c @@ -34,7 +34,6 @@ #include #include #include -#include #include #include #include @@ -140,7 +139,7 @@ static void usage_mv(void) exit(EXIT_FAILURE); } -int ad_mv(int argc, char *argv[]) +int ad_mv(int argc, char *argv[], AFPObj *obj) { size_t baselen, len; int rval; @@ -185,8 +184,8 @@ int ad_mv(int argc, char *argv[]) set_signal(); cnid_init(); - if (openvol(argv[argc - 1], &dvolume) != 0) { - SLOG("Error opening CNID database for %s: ", argv[argc - 1]); + if (openvol(obj, argv[argc - 1], &dvolume) != 0) { + SLOG("Error opening CNID database for source \"%s\": ", argv[argc - 1]); return 1; } @@ -197,8 +196,8 @@ int ad_mv(int argc, char *argv[]) if (stat(argv[argc - 1], &sb) || !S_ISDIR(sb.st_mode)) { if (argc > 2) usage_mv(); - if (openvol(argv[0], &svolume) != 0) { - SLOG("Error opening CNID database for %s: ", argv[0]); + if (openvol(obj, argv[0], &svolume) != 0) { + SLOG("Error opening CNID database for destination \"%s\": ", argv[0]); return 1; } rval = do_move(argv[0], argv[1]); @@ -235,11 +234,8 @@ int ad_mv(int argc, char *argv[]) rval = 1; } else { memmove(endp, p, (size_t)len + 1); - if (openvol(*argv, &svolume) != 0) { - SLOG("Error opening CNID database for %s: ", argv[0]); - rval = 1; - goto exit; - } + openvol(obj, *argv, &svolume); + if (do_move(*argv, path)) rval = 1; closevol(&svolume); @@ -298,9 +294,9 @@ static int do_move(const char *from, const char *to) * 1) source AFP volume != dest AFP volume * 2) either source or dest isn't even an AFP volume */ - if (!svolume.volinfo.v_path - || !dvolume.volinfo.v_path - || strcmp(svolume.volinfo.v_path, dvolume.volinfo.v_path) != 0) + if (!svolume.vol->v_path + || !dvolume.vol->v_path + || strcmp(svolume.vol->v_path, dvolume.vol->v_path) != 0) mustcopy = 1; cnid_t cnid = 0; @@ -343,7 +339,7 @@ static int do_move(const char *from, const char *to) switch (sb.st_mode & S_IFMT) { case S_IFREG: - if (dvolume.volume.vfs->vfs_renamefile(&dvolume.volume, -1, from, to) != 0) { + if (dvolume.vol->vfs->vfs_renamefile(dvolume.vol, -1, from, to) != 0) { SLOG("Error moving adouble file for %s", from); return -1; } @@ -369,21 +365,21 @@ static int do_move(const char *from, const char *to) char *p = strdup(to); char *name = basename(p); - if (cnid_update(dvolume.volume.v_cdb, cnid, &sb, newdid, name, strlen(name)) != 0) { + if (cnid_update(dvolume.vol->v_cdb, cnid, &sb, newdid, name, strlen(name)) != 0) { SLOG("Cant update CNID for: %s", to); return 1; } free(p); struct adouble ad; - ad_init(&ad, dvolume.volinfo.v_adouble, dvolume.volinfo.v_ad_options); - if (ad_open_metadata(to, S_ISDIR(sb.st_mode) ? ADFLAGS_DIR : 0, O_RDWR, &ad) != 0) { + ad_init(&ad, dvolume.vol); + if (ad_open(&ad, to, S_ISDIR(sb.st_mode) ? (ADFLAGS_DIR | ADFLAGS_HF | ADFLAGS_RDWR) : ADFLAGS_HF | ADFLAGS_RDWR) != 0) { SLOG("Error opening adouble for: %s", to); return 1; } ad_setid(&ad, sb.st_dev, sb.st_ino, cnid, newdid, dvolume.db_stamp); ad_flush(&ad); - ad_close_metadata(&ad); + ad_close(&ad, ADFLAGS_HF); if (vflg) printf("%s -> %s\n", from, to);