]> arthur.barton.de Git - netatalk.git/blobdiff - etc/afpd/filedir.c
Merge product-2-2
[netatalk.git] / etc / afpd / filedir.c
index e4b88d95afb01334c29d5bbcbf7f3240d2df8d31..56cbaccffff2d32d59697fb6acad396589284bca 100644 (file)
@@ -113,7 +113,7 @@ int afp_getfildirparams(AFPObj *obj _U_, char *ibuf, size_t ibuflen _U_, char *r
         *(rbuf + 2 * sizeof( uint16_t )) = (char) FILDIRBIT_ISDIR;
     } else {
         if (fbitmap && AFP_OK != (ret = getfilparams(obj, vol, fbitmap, s_path, curdir,
-                                                     rbuf + 3 * sizeof( uint16_t ), &buflen )) ) {
+                                                     rbuf + 3 * sizeof( uint16_t ), &buflen, 0)) ) {
             return( ret );
         }
         /* this is a file */
@@ -203,9 +203,6 @@ int afp_setfildirparams(AFPObj *obj, char *ibuf, size_t ibuflen _U_, char *rbuf
 */
 int check_name(const struct vol *vol, char *name)
 {
-    if ((vol->v_flags & AFPVOL_NOHEX) && strchr(name, '/'))
-        return AFPERR_PARAM;
-
     if (!vol->vfs->vfs_validupath(vol, name)) {
         LOG(log_error, logtype_afpd, "check_name: illegal name: '%s'", name);
         return AFPERR_EXIST;
@@ -249,7 +246,7 @@ static int moveandrename(const struct vol *vol,
     adflags = 0;
 
     if (!isdir) {
-        if ((oldunixname = strdup(mtoupath(vol, oldname, sdir->d_did, utf8_encoding()))) == NULL)
+        if ((oldunixname = strdup(mtoupath(vol, oldname, sdir->d_did, utf8_encoding(vol->v_obj)))) == NULL)
             return AFPERR_PARAM; /* can't convert */
         id = cnid_get(vol->v_cdb, sdir->d_did, oldunixname, strlen(oldunixname));
 
@@ -316,7 +313,7 @@ static int moveandrename(const struct vol *vol,
         }
     }
 
-    if (NULL == (upath = mtoupath(vol, newname, curdir->d_did, utf8_encoding()))){ 
+    if (NULL == (upath = mtoupath(vol, newname, curdir->d_did, utf8_encoding(vol->v_obj)))){ 
         rc = AFPERR_PARAM;
         goto exit;
     }
@@ -333,7 +330,7 @@ static int moveandrename(const struct vol *vol,
             goto exit;
         }
 
-        if (stat(upath, st) == 0 || caseenumerate(vol, &path, curdir) == 0) {
+        if (stat(upath, st) == 0) {
             if (!stat(oldunixname, &nst) && !(nst.st_dev == st->st_dev && nst.st_ino == st->st_ino) ) {
                 /* not the same file */
                 rc = AFPERR_EXIST;
@@ -341,7 +338,7 @@ static int moveandrename(const struct vol *vol,
             }
             errno = 0;
         }
-    } else if (stat(upath, st ) == 0 || caseenumerate(vol, &path, curdir) == 0) {
+    } else if (stat(upath, st ) == 0) {
         rc = AFPERR_EXIST;
         goto exit;
     }
@@ -600,7 +597,7 @@ char *ctoupath(const struct vol *vol, struct dir *dir, char *name)
 {
     if (vol == NULL || dir == NULL || name == NULL)
         return NULL;
-    return absupath(vol, dir, mtoupath(vol, name, dir->d_did, utf8_encoding()));
+    return absupath(vol, dir, mtoupath(vol, name, dir->d_did, utf8_encoding(vol->v_obj)));
 }
 
 /* ------------------------- */
@@ -696,7 +693,7 @@ int afp_moveandrename(AFPObj *obj, char *ibuf, size_t ibuflen _U_, char *rbuf _U
     rc = moveandrename(vol, sdir, sdir_fd, oldname, newname, isdir);
 
     if ( rc == AFP_OK ) {
-        char *upath = mtoupath(vol, newname, pdid, utf8_encoding());
+        char *upath = mtoupath(vol, newname, pdid, utf8_encoding(obj));
 
         if (NULL == upath) {
             rc = AFPERR_PARAM;