#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 */
*
* @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)
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));
}
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,