/*
- $Id: cmd_dbd_scanvol.c,v 1.17 2009-12-21 14:41:00 franklahm Exp $
+ $Id: cmd_dbd_scanvol.c,v 1.21 2010-04-11 07:01:23 franklahm Exp $
Copyright (c) 2009 Frank Lahm <franklahm@gmail.com>
return( upath );
}
-
+#if 0
/*
Check if "name" is pointing to
a) an object inside the current volume (return 0)
Then stats the pointed to object and if it is a dir ors ADFLAGS_DIR to *adflags
Return -1 on any serious error.
*/
-
static int check_symlink(const char *name, int *adflags)
{
int cwd;
dbd_log( LOGDEBUG, "intra-share symlink '%s/%s', not following", cwdbuf, name);
return 0;
}
-
+#endif
/*
Check for wrong encoding e.g. "." at the beginning is not CAP encoded (:2e) although volume is default !AFPVOL_USEDOTS.
struct adouble ad;
char *adname;
+ if (dbd_flags & DBD_FLAGS_CLEANUP)
+ return 0;
+
if (S_ISREG(st->st_mode))
adflags = 0;
else
if ((ret = ea_open(&volume, fname, EA_RDWR, &ea)) != 0) {
if (errno == ENOENT)
return 0;
- dbd_log(LOGSTD, "Error calling ea_open for file: %s/%s, removing EA files",
- cwdbuf, fname);
+ dbd_log(LOGSTD, "Error calling ea_open for file: %s/%s, removing EA files", cwdbuf, fname);
if ( ! (dbd_flags & DBD_FLAGS_SCAN))
remove_eafiles(fname, &ea);
return -1;
struct adouble ad;
char *mname = NULL;
+ if (dbd_flags & DBD_FLAGS_CLEANUP)
+ return 0;
+
/* Check for ad-dir */
if ( (addir_ok = access(ADv2_DIRNAME, F_OK)) != 0) {
if (errno != ENOENT) {
if ( (volinfo->v_flags & AFPVOL_CACHE) && ADFILE_OK) {
ad_init(&ad, volinfo->v_adouble, volinfo->v_ad_options);
if (ad_open_metadata( name, adflags, O_RDWR, &ad) != 0) {
+
+ if (dbd_flags & DBD_FLAGS_CLEANUP)
+ return 0;
+
dbd_log( LOGSTD, "Error opening AppleDouble file for '%s/%s': %s", cwdbuf, name, strerror(errno));
return 0;
}
if (ad_cnid == 0)
dbd_log( LOGSTD, "Incorrect CNID data in .AppleDouble data for '%s/%s' (bad stamp?)", cwdbuf, name);
+ else
+ dbd_log( LOGDEBUG, "CNID from .AppleDouble file for '%s/%s': %u", cwdbuf, name, ntohl(ad_cnid));
ad_close_metadata(&ad);
}
static int dbd_readdir(int volroot, cnid_t did)
{
int cwd, ret = 0, adflags, adfile_ok, addir_ok, encoding_ok;
- cnid_t cnid;
+ cnid_t cnid = 0;
const char *name;
DIR *dp;
struct dirent *ep;
adflags = ADFLAGS_DIR;
break;
case S_IFLNK:
- dbd_log(LOGDEBUG, "Checking symlink %s/%s", cwdbuf, ep->d_name);
+ dbd_log(LOGDEBUG, "Ignoring symlink %s/%s", cwdbuf, ep->d_name);
+#if 0
ret = check_symlink(ep->d_name, &adflags);
if (ret == 1)
break;
if (ret == -1)
dbd_log(LOGSTD, "Error checking symlink %s/%s", cwdbuf, ep->d_name);
+#endif
continue;
default:
dbd_log(LOGSTD, "Bad filetype: %s/%s", cwdbuf, ep->d_name);