X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=etc%2Fafpd%2Ffiledir.c;h=5f6e0f643e5987f101a2068123772eb8a50a21f8;hb=4054f4b3c85ecab060dafd46c0d3632cadbb5803;hp=8eb8bb4d8d12ede44f8550bf43207d4656b3416c;hpb=e9db4d5f7bdd8f1972ec4dd83e1c5fd9c912f911;p=netatalk.git diff --git a/etc/afpd/filedir.c b/etc/afpd/filedir.c index 8eb8bb4d..5f6e0f64 100644 --- a/etc/afpd/filedir.c +++ b/etc/afpd/filedir.c @@ -40,6 +40,7 @@ char *strchr (), *strrchr (); #include #include #include +#include #include "directory.h" #include "dircache.h" @@ -601,10 +602,18 @@ int afp_delete(AFPObj *obj, char *ibuf, size_t ibuflen _U_, char *rbuf _U_, size upath = s_path->u_name; if ( path_isadir( s_path) ) { - if (*s_path->m_name != '\0' || curdir->d_did == DIRDID_ROOT) + if (*s_path->m_name != '\0' || curdir->d_did == DIRDID_ROOT) { rc = AFPERR_ACCESS; - else - rc = deletecurdir( vol); + } else { + /* we have to cache this, the structs are lost in deletcurdir*/ + /* but we need the positive returncode to send our event */ + bstring dname; + if ((dname = bstrcpy(curdir->d_u_name)) == NULL) + return AFPERR_MISC; + if ((rc = deletecurdir(vol)) == AFP_OK) + fce_register_delete_dir(cfrombstr(dname)); + bdestroy(dname); + } } else if (of_findname(s_path)) { rc = AFPERR_BUSY; } else { @@ -614,9 +623,9 @@ int afp_delete(AFPObj *obj, char *ibuf, size_t ibuflen _U_, char *rbuf _U_, size */ if (s_path->st_valid && s_path->st_errno == ENOENT) { rc = AFPERR_NOOBJ; - } - else { - rc = deletefile(vol, -1, upath, 1); + } else { + if ((rc = deletefile(vol, -1, upath, 1)) == AFP_OK) + fce_register_delete_file( s_path ); struct dir *cachedfile; if ((cachedfile = dircache_search_by_name(vol, dir, upath, strlen(upath), s_path->st.st_ctime))) {