]> arthur.barton.de Git - netatalk.git/blob - etc/cnid_dbd/dbd_getstamp.c
Merge 2-1
[netatalk.git] / etc / cnid_dbd / dbd_getstamp.c
1
2 /*
3  * $Id: dbd_getstamp.c,v 1.4 2009-05-06 11:54:24 franklahm Exp $
4  *
5  * Copyright (C) Joerg Lenneis 2003
6  * All Rights Reserved.  See COPYING.
7  */
8
9 #ifdef HAVE_CONFIG_H
10 #include "config.h"
11 #endif /* HAVE_CONFIG_H */
12
13 #include <string.h>
14 #include <atalk/logger.h>
15 #include <errno.h>
16 #include <netatalk/endian.h>
17 #include <atalk/cnid_dbd_private.h>
18
19 #include "dbif.h"
20 #include "dbd.h"
21 #include "pack.h"
22
23 /* Return the unique stamp associated with this database */
24
25 int dbd_getstamp(DBD *dbd, struct cnid_dbd_rqst *rqst _U_, struct cnid_dbd_rply *rply)
26 {
27     DBT key, data;
28     int rc;
29
30
31     memset(&key, 0, sizeof(key));
32     memset(&data, 0, sizeof(data));
33
34     rply->namelen = 0;
35
36     key.data = ROOTINFO_KEY;
37     key.size = ROOTINFO_KEYLEN;
38
39     if ((rc = dbif_get(dbd, DBIF_CNID, &key, &data, 0)) < 0) {
40         LOG(log_error, logtype_cnid, "dbd_getstamp: Error getting rootinfo record");
41         rply->result = CNID_DBD_RES_ERR_DB;
42         return -1;
43     }
44      
45     if (rc == 0) {
46         LOG(log_error, logtype_cnid, "dbd_getstamp: No rootinfo record found");
47         rply->result = CNID_DBD_RES_NOTFOUND;
48         return 1;
49     }
50     
51     rply->namelen = CNID_DEV_LEN;
52     rply->name = (char *)data.data + CNID_DEV_OFS;
53     
54
55     LOG(log_debug, logtype_cnid, "cnid_getstamp: Returning stamp '%08x'", *(uint32_t *)rply->name);
56
57     rply->result = CNID_DBD_RES_OK;
58     return 1;
59 }