]> arthur.barton.de Git - netatalk.git/blob - libatalk/cnid/cnid_mangle_get.c
Warning fixes.
[netatalk.git] / libatalk / cnid / cnid_mangle_get.c
1 /*
2  * $Id: cnid_mangle_get.c,v 1.8 2003-06-06 21:22:45 srittau Exp $
3  */
4
5 #ifdef HAVE_CONFIG_H
6 #include "config.h"
7 #endif /* HAVE_CONFIG_H */
8
9 #ifdef FILE_MANGLING
10 #include <stdio.h>
11 #include <string.h>
12 #include <sys/param.h>
13 #include <sys/stat.h>
14 #include <string.h>
15 #include <atalk/logger.h>
16 #include <errno.h>
17
18 #include <db.h>
19 #include <netatalk/endian.h>
20 #include <atalk/adouble.h>
21 #include <atalk/cnid.h>
22
23 #include "cnid_private.h"
24
25 /* Find a mangled filename entry. */
26 char *
27 cnid_mangle_get(void *CNID, char *mfilename)
28 {
29     CNID_private *db;
30     DBT key, data;
31     char *filename;
32     int rc;
33
34     if (!(db = CNID)) {
35         return NULL;
36     }
37
38     memset(&key, 0, sizeof(key));
39     memset(&data, 0, sizeof(data));
40
41     key.data = mfilename;
42     key.size = strlen(mfilename);
43
44     while ((rc = db->db_mangle->get(db->db_mangle, NULL, &key, &data, 0))) {
45         if (rc == DB_LOCK_DEADLOCK) {
46             continue;
47         }
48
49         if (rc == DB_NOTFOUND) {
50             LOG(log_debug, logtype_default, "cnid_mangle_get: Failed to find mangled entry for %s", mfilename);
51             return NULL;
52
53         }
54
55         LOG(log_error, logtype_default, "cnid_mangle_get: Failed to get mangle entry from the database: %s", db_strerror(rc));
56         return NULL;
57     }
58
59     filename = (char *)data.data;
60
61     return filename;
62 }
63 #endif /* FILE_MANGLING */