- return tdb->methods->write(tdb, off, tdb_convert(tdb, rec, len), len);
+ int ret;
+ if (unlikely((tdb->flags & TDB_CONVERT))) {
+ void *conv = malloc(len);
+ if (!conv) {
+ tdb->ecode = TDB_ERR_OOM;
+ tdb->log(tdb, TDB_DEBUG_FATAL, tdb->log_priv,
+ "tdb_write: no memory converting %zu bytes\n",
+ len);
+ return -1;
+ }
+ memcpy(conv, rec, len);
+ ret = tdb->methods->write(tdb, off,
+ tdb_convert(tdb, conv, len), len);
+ free(conv);
+ } else
+ ret = tdb->methods->write(tdb, off, rec, len);
+
+ return ret;