]> git.ozlabs.org Git - ccan/blobdiff - ccan/tdb2/tdb.c
tdb2: Internal error helpers.
[ccan] / ccan / tdb2 / tdb.c
index 58a62cb400da905dba1fbae3845ed4a0d1f47dbe..fa8e88769bc5505a6836e546b0143aa1292b4f82 100644 (file)
@@ -324,7 +324,7 @@ struct tdb_context *tdb_open(const char *name, int tdb_flags,
        /* Is it already in the open list?  If so, fail. */
        if (tdb_already_open(st.st_dev, st.st_ino)) {
                /* FIXME */
-               tdb_logerr(tdb, TDB_ERR_NESTING, TDB_LOG_USE_ERROR,
+               tdb_logerr(tdb, TDB_ERR_IO, TDB_LOG_USE_ERROR,
                           "tdb_open: %s (%d,%d) is already open in this"
                           " process",
                           name, (int)st.st_dev, (int)st.st_ino);
@@ -374,9 +374,6 @@ struct tdb_context *tdb_open(const char *name, int tdb_flags,
                case TDB_ERR_EINVAL:
                        saved_errno = EINVAL;
                        break;
-               case TDB_ERR_NESTING:
-                       saved_errno = EBUSY;
-                       break;
                default:
                        saved_errno = EINVAL;
                        break;
@@ -702,7 +699,6 @@ const char *tdb_errorstr(const struct tdb_context *tdb)
        case TDB_ERR_LOCK: return "Locking error";
        case TDB_ERR_OOM: return "Out of memory";
        case TDB_ERR_EXISTS: return "Record exists";
-       case TDB_ERR_NESTING: return "Transaction already started";
        case TDB_ERR_EINVAL: return "Invalid parameter";
        case TDB_ERR_NOEXIST: return "Record does not exist";
        case TDB_ERR_RDONLY: return "write not permitted";
@@ -710,10 +706,10 @@ const char *tdb_errorstr(const struct tdb_context *tdb)
        return "Invalid error code";
 }
 
-void COLD tdb_logerr(struct tdb_context *tdb,
-                    enum TDB_ERROR ecode,
-                    enum tdb_log_level level,
-                    const char *fmt, ...)
+enum TDB_ERROR COLD tdb_logerr(struct tdb_context *tdb,
+                              enum TDB_ERROR ecode,
+                              enum tdb_log_level level,
+                              const char *fmt, ...)
 {
        char *message;
        va_list ap;
@@ -724,7 +720,7 @@ void COLD tdb_logerr(struct tdb_context *tdb,
        tdb->ecode = ecode;
 
        if (!tdb->logfn)
-               return;
+               return ecode;
 
        /* FIXME: Doesn't assume asprintf. */
        va_start(ap, fmt);
@@ -736,7 +732,7 @@ void COLD tdb_logerr(struct tdb_context *tdb,
                tdb->logfn(tdb, TDB_LOG_ERROR, tdb->log_private,
                           "out of memory formatting message:");
                tdb->logfn(tdb, level, tdb->log_private, fmt);
-               return;
+               return ecode;
        }
        va_start(ap, fmt);
        len = vsprintf(message, fmt, ap);
@@ -744,4 +740,5 @@ void COLD tdb_logerr(struct tdb_context *tdb,
        tdb->logfn(tdb, level, tdb->log_private, message);
        free(message);
        errno = saved_errno;
+       return ecode;
 }