X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=bin%2Fad%2Fad_find.c;h=093414a1d5e104f5e224c3697dac1e7ef01a9ce8;hb=f254fd618b53e97cc5382b23709d4f3de1e70b41;hp=a233b9adf51385a05ed532f60c7780bffb30cb70;hpb=f8e0c01319d2f9324b5cf4e1ce90f37090573041;p=netatalk.git diff --git a/bin/ad/ad_find.c b/bin/ad/ad_find.c index a233b9ad..093414a1 100644 --- a/bin/ad/ad_find.c +++ b/bin/ad/ad_find.c @@ -27,12 +27,12 @@ #include #include -#include -#include +#include #include #include #include #include +#include #include "ad.h" static volatile sig_atomic_t alarmed; @@ -82,7 +82,7 @@ static void usage_find(void) ); } -int ad_find(int argc, char **argv) +int ad_find(int argc, char **argv, AFPObj *obj) { int c, ret; afpvol_t vol; @@ -111,12 +111,29 @@ int ad_find(int argc, char **argv) set_signal(); cnid_init(); - if (openvol(srchvol, &vol) != 0) + if (openvol(obj, srchvol, &vol) != 0) ERROR("Cant open volume \"%s\"", srchvol); + uint16_t flags = CONV_TOLOWER; + char namebuf[MAXPATHLEN + 1]; + if (convert_charset(vol.vol->v_volcharset, + vol.vol->v_volcharset, + vol.vol->v_maccharset, + argv[optind], + strlen(argv[optind]), + namebuf, + MAXPATHLEN, + &flags) == (size_t)-1) { + ERROR("conversion error"); + } + int count; char resbuf[DBD_MAX_SRCH_RSLTS * sizeof(cnid_t)]; - if ((count = cnid_find(vol.volume.v_cdb, argv[optind], strlen(argv[optind]), resbuf, sizeof(resbuf))) < 1) { + if ((count = cnid_find(vol.vol->v_cdb, + namebuf, + strlen(namebuf), + resbuf, + sizeof(resbuf))) < 1) { ret = 1; } else { ret = 0; @@ -128,7 +145,7 @@ int ad_find(int argc, char **argv) bufp += sizeof(cnid_t); bstring path = NULL; - bstring volpath = bfromcstr(vol.volinfo.v_path); + bstring volpath = bfromcstr(vol.vol->v_path); BSTRING_STRIP_SLASH(volpath); char buffer[12 + MAXPATHLEN + 1]; int buflen = 12 + MAXPATHLEN + 1; @@ -137,15 +154,17 @@ int ad_find(int argc, char **argv) struct bstrList *pathlist = bstrListCreateMin(32); while (did != DIRDID_ROOT) { - if ((name = cnid_resolve(vol.volume.v_cdb, &did, buffer, buflen)) == NULL) - ERROR("Can't resolve CNID: %u", ntohl(did)); + if ((name = cnid_resolve(vol.vol->v_cdb, &did, buffer, buflen)) == NULL) + goto next; bstrListPush(pathlist, bfromcstr(name)); } bstrListPush(pathlist, volpath); path = bjoinInv(pathlist, sep); - bstrListDestroy(pathlist); printf("%s\n", cfrombstr(path)); + + next: + bstrListDestroy(pathlist); bdestroy(path); } bdestroy(sep);