#include <atalk/logger.h>
#include <atalk/util.h>
+#include <atalk/errchk.h>
#include "db_param.h"
#include "dbif.h"
*/
static int dbif_stamp(DBD *dbd, void *buffer, int size)
{
+ EC_INIT;
struct stat st;
- int rc,cwd;
+ int cwd = -1;
if (size < 8)
- return -1;
+ EC_FAIL;
/* Remember cwd */
if ((cwd = open(".", O_RDONLY)) < 0) {
LOG(log_error, logtype_cnid, "error opening cwd: %s", strerror(errno));
- return -1;
+ EC_FAIL;
}
/* chdir to db_envhome */
if ((chdir(dbd->db_envhome)) != 0) {
LOG(log_error, logtype_cnid, "error chdiring to db_env '%s': %s", dbd->db_envhome, strerror(errno));
- return -1;
+ EC_FAIL;
}
- if ((rc = stat(dbd->db_table[DBIF_CNID].name, &st)) < 0) {
+ if (stat(dbd->db_table[DBIF_CNID].name, &st) < 0) {
LOG(log_error, logtype_cnid, "error stating database %s: %s", dbd->db_table[DBIF_CNID].name, db_strerror(errno));
- return -1;
+ EC_FAIL;
}
LOG(log_maxdebug, logtype_cnid,"stamp: %s", asctime(localtime(&st.st_ctime)));
memset(buffer, 0, size);
memcpy(buffer, &st.st_ctime, sizeof(st.st_ctime));
- if ((fchdir(cwd)) != 0) {
- LOG(log_error, logtype_cnid, "error chdiring back: %s", strerror(errno));
- return -1;
+EC_CLEANUP:
+ if (cwd != -1) {
+ if (fchdir(cwd) != 0) {
+ LOG(log_error, logtype_cnid, "error chdiring back: %s", strerror(errno));
+ EC_STATUS(-1);
+ }
+ close(cwd);
}
-
- return 0;
+ EC_EXIT;
}
/*!
flags);
if (ret == DB_NOTFOUND) {
- LOG(log_info, logtype_cnid, "key not found");
+ LOG(log_debug, logtype_cnid, "key not found");
return 0;
}
if (ret) {