/*
- * $Id: mangle.c,v 1.1 2002-05-29 18:02:59 jmarcus Exp $
+ * $Id: mangle.c,v 1.2 2002-05-30 06:41:16 jmarcus Exp $
*
* Copyright (c) 2002. Joe Marcus Clarke (marcus@marcuscom.com)
* All Rights Reserved. See COPYRIGHT.
return filename;
}
+
char *
mangle(const struct vol *vol, char *filename) {
char *ext = NULL;
- char mfilename[MAX_LENGTH+1];
+ char *mfilename = NULL;
+ char *tf = NULL;
char mangle_suffix[MANGLE_LENGTH+1];
char dir[MAXPATHLEN+1];
char tmp[MAXPATHLEN+1];
return filename;
}
+ if ((mfilename = malloc(MAX_LENGTH + 1)) == NULL) {
+ LOG(log_error, logtype_default, "mangle: Failed to allocate memory to hold the mangled filename");
+ return filename;
+ }
+
/* Check to see if we already have a mangled filename by this name. */
while (1) {
strcpy(tmp, dir);
+
strncpy(mfilename, filename, MAX_LENGTH - strlen(MANGLE_CHAR) - MANGLE_LENGTH - ((ext != NULL)?strlen(ext):0));
+ mfilename[MAX_LENGTH - strlen(MANGLE_CHAR) - MANGLE_LENGTH - ((ext != NULL)?strlen(ext):0)] = '\0';
+
strcat(mfilename, MANGLE_CHAR);
(void)sprintf(mangle_suffix, "%03d", mangle_suffix_int);
strcat(mfilename, mangle_suffix);
if (ext) {
strcat(mfilename, ext);
}
-
+
strcat(tmp, "/");
strcat(tmp, mfilename);
- if (!cnid_mangle_get(vol->v_db, tmp)) {
+ tf = cnid_mangle_get(vol->v_db, tmp);
+ if (tf == NULL || (strcmp(tf, filename)) == 0) {
break;
}
else {
}
}
- if (cnid_mangle_add(vol->v_db, mfilename, tmp) < 0) {
+ strcat(dir, "/");
+ strcat(dir, filename);
+
+ if (cnid_mangle_add(vol->v_db, tmp, dir) < 0) {
return filename;
}
- filename = mfilename;
-
- return filename;
+ return mfilename;
}
#endif /* FILE_MANGLING */
/*
- * $Id: cnid_mangle_add.c,v 1.1 2002-05-29 18:02:59 jmarcus Exp $
+ * $Id: cnid_mangle_add.c,v 1.2 2002-05-30 06:41:19 jmarcus Exp $
*/
#ifdef HAVE_CONFIG_H
DBT key, data;
DB_TXN *tid;
cnid_t id;
- struct stat st;
int rc, ret;
if (!(db = CNID)) {
memset(&data, 0, sizeof(data));
key.data = mfilename;
- key.size = strlen(mfilename) + 1;
+ key.size = strlen(mfilename);
data.data = filename;
- data.size = strlen(filename) + 1;
+ data.size = strlen(filename);
retry:
if ((rc = txn_begin(db->dbenv, NULL, &tid, 0)) != 0) {
}
}
+ if ((rc = txn_commit(tid, 0)) != 0) {
+ LOG(log_error, logtype_default, "cnid_mangle_add: Unable to commit transaction: %s", db_strerror(rc));
+ return -1;
+ }
+
return 0;
}
#endif /* FILE_MANGLING */
/*
- * $Id: cnid_mangle_get.c,v 1.1 2002-05-29 18:02:59 jmarcus Exp $
+ * $Id: cnid_mangle_get.c,v 1.2 2002-05-30 06:41:19 jmarcus Exp $
*/
#ifdef HAVE_CONFIG_H
memset(&data, 0, sizeof(data));
key.data = mfilename;
- key.size = strlen(mfilename) + 1;
+ key.size = strlen(mfilename);
- while ((rc = db->db_didname->get(db->db_mangle, NULL, &key, &data, 0))) {
+ while ((rc = db->db_mangle->get(db->db_mangle, NULL, &key, &data, 0))) {
if (rc == DB_LOCK_DEADLOCK) {
continue;
}
if (rc == DB_NOTFOUND) {
+ LOG(log_error, logtype_default, "cnid_mangle_get: Failed to find mangled entry for %s", mfilename);
return NULL;
}
return NULL;
}
- filename = strrchr(data.data, '/');
+ filename = strrchr((char *)data.data, '/');
filename++; /* Skip the leading '/' */
- if (stat(data.data, &st) < 0) {
+ if (stat((char *)data.data, &st) < 0) {
if (errno == ENOENT) {
/* The file no longer exists. Purge it from the database. */
/*retry:
/*
- * $Id: cnid_private.h,v 1.10 2002-05-29 18:02:59 jmarcus Exp $
+ * $Id: cnid_private.h,v 1.11 2002-05-30 06:41:19 jmarcus Exp $
*/
#ifndef LIBATALK_CNID_PRIVATE_H
DB *db_cnid;
DB *db_didname;
DB *db_devino;
+#ifdef FILE_MANGLING
DB *db_mangle;
+#endif /* FILE_MANGLING */
#ifdef EXTENDED_DB
DB *db_shortname;
DB *db_macname;
DB *db_longname;
#endif /* EXTENDED_DB */
- DB_ENV* dbenv;
+ DB_ENV *dbenv;
int lockfd, flags;
- char lock_file[MAXPATHLEN + 1];
+ char lock_file[MAXPATHLEN + 1];
} CNID_private;
/* on-disk data format (in network byte order where appropriate) --