/* 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);
case TDB_ERR_EINVAL:
saved_errno = EINVAL;
break;
- case TDB_ERR_NESTING:
- saved_errno = EBUSY;
- break;
default:
saved_errno = EINVAL;
break;
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";
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;
tdb->ecode = ecode;
if (!tdb->logfn)
- return;
+ return ecode;
/* FIXME: Doesn't assume asprintf. */
va_start(ap, fmt);
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);
tdb->logfn(tdb, level, tdb->log_private, message);
free(message);
errno = saved_errno;
+ return ecode;
}