]> arthur.barton.de Git - netatalk.git/blobdiff - bin/ad/ad_util.c
Typos
[netatalk.git] / bin / ad / ad_util.c
index d7e9fee50dffbbb9fc31548e751268d19e036665..897bdf3b1415c609efdae24f2104d019ef3464fc 100644 (file)
 #include <atalk/logger.h>
 #include <atalk/errchk.h>
 #include <atalk/unicode.h>
+#include <atalk/globals.h>
 #include <atalk/netatalk_conf.h>
 
+
 #include "ad.h"
 
 int log_verbose;             /* Logging flag */
@@ -96,21 +98,21 @@ void _log(enum logtype lt, char *fmt, ...)
  *
  * @returns 0 on success, exits on error
  */
-int openvol(const char *path, afpvol_t *vol)
+int openvol(AFPObj *obj, const char *path, afpvol_t *vol)
 {
     int flags = 0;
 
     memset(vol, 0, sizeof(afpvol_t));
 
-    /* try to find a .AppleDesktop/.volinfo */
-    if ((vol->vol = getvolbypath(path)) == NULL)
+    if ((vol->vol = getvolbypath(obj, path)) == NULL)
         return -1;
 
     if (STRCMP(vol->vol->v_cnidscheme, != , "dbd"))
         ERROR("\"%s\" isn't a \"dbd\" CNID volume!", vol->vol->v_path);
 
     /* Sanity checks to ensure we can touch this volume */
-    if (vol->vol->v_adouble != AD_VERSION2)
+    if (vol->vol->v_adouble != AD_VERSION2
+        && vol->vol->v_adouble != AD_VERSION_EA)
         ERROR("Unsupported adouble versions: %u", vol->vol->v_adouble);
 
     if (vol->vol->v_vfs_ea != AFPVOL_EA_SYS)
@@ -136,9 +138,10 @@ int openvol(const char *path, afpvol_t *vol)
 
 void closevol(afpvol_t *vol)
 {
-    if (vol->vol->v_cdb)
+    if (vol->vol->v_cdb) {
         cnid_close(vol->vol->v_cdb);
-
+        vol->vol->v_cdb = NULL;
+    }
     memset(vol, 0, sizeof(afpvol_t));
 }
 
@@ -208,20 +211,12 @@ int convert_dots_encoding(const afpvol_t *svol, const afpvol_t *dvol, char *path
     if ( ! svol->vol->v_path) {
         /* no source volume: escape special chars (eg ':') */
         from = dvol->vol->v_volcharset; /* src = dst charset */
-        flags |= CONV_ESCAPEHEX;
+        if (dvol->vol->v_adouble == AD_VERSION2)
+            flags |= CONV_ESCAPEHEX;
     } else {
         from = svol->vol->v_volcharset;
     }
 
-    if ( (svol->vol->v_path)
-         && ! (svol->vol->v_flags & AFPVOL_USEDOTS)
-         && (dvol->vol->v_flags & AFPVOL_USEDOTS)) {
-        /* source is without dots, destination is with */
-        flags |= CONV_UNESCAPEHEX;
-    } else if (! (dvol->vol->v_flags & AFPVOL_USEDOTS)) {
-        flags |= CONV_ESCAPEDOTS;
-    }
-
     int len = convert_charset(from,
                               dvol->vol->v_volcharset,
                               dvol->vol->v_maccharset,