X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=etc%2Fcnid_dbd%2Fdbif.c;h=217fdd6d73d7255e6e1a16acc8c9acc3f7ada82b;hb=056d3ef4c88ba09eabb1fcbf06bdd9fe6e7af4cf;hp=2fde17bc86f5327c599e7c051fd8c54e00671ec7;hpb=2fdd522410f80afcd055d7333f491ee6c0b4b9fa;p=netatalk.git diff --git a/etc/cnid_dbd/dbif.c b/etc/cnid_dbd/dbif.c index 2fde17bc..217fdd6d 100644 --- a/etc/cnid_dbd/dbif.c +++ b/etc/cnid_dbd/dbif.c @@ -21,6 +21,7 @@ #include #include +#include #include "db_param.h" #include "dbif.h" @@ -33,27 +34,28 @@ */ 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))); @@ -61,12 +63,15 @@ static int dbif_stamp(DBD *dbd, void *buffer, int size) 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; } /*!