From 5620c5ab5d8bb6b6460c2fa6ed33e7596d84e996 Mon Sep 17 00:00:00 2001 From: "Eric W. Biederman" Date: Tue, 22 Jan 2013 01:13:26 -0800 Subject: [PATCH] Implement commonio_append. To support files that do not have a simple unique key implement commonio_append to allow new entries to be added. Signed-off-by: "Eric W. Biederman" --- lib/commonio.c | 30 ++++++++++++++++++++++++++++++ lib/commonio.h | 1 + 2 files changed, 31 insertions(+) diff --git a/lib/commonio.c b/lib/commonio.c index 1c0555c3..c7a9fca8 100644 --- a/lib/commonio.c +++ b/lib/commonio.c @@ -1113,6 +1113,36 @@ int commonio_update (struct commonio_db *db, const void *eptr) return 1; } +int commonio_append (struct commonio_db *db, const void *eptr) +{ + struct commonio_entry *p; + void *nentry; + + if (!db->isopen || db->readonly) { + errno = EINVAL; + return 0; + } + nentry = db->ops->dup (eptr); + if (NULL == nentry) { + errno = ENOMEM; + return 0; + } + /* new entry */ + p = (struct commonio_entry *) malloc (sizeof *p); + if (NULL == p) { + db->ops->free (nentry); + errno = ENOMEM; + return 0; + } + + p->eptr = nentry; + p->line = NULL; + p->changed = true; + add_one_entry (db, p); + + db->changed = true; + return 1; +} void commonio_del_entry (struct commonio_db *db, const struct commonio_entry *p) { diff --git a/lib/commonio.h b/lib/commonio.h index 902cc6fd..5b49f25e 100644 --- a/lib/commonio.h +++ b/lib/commonio.h @@ -146,6 +146,7 @@ extern int commonio_lock_nowait (struct commonio_db *, bool log); extern int commonio_open (struct commonio_db *, int); extern /*@observer@*/ /*@null@*/const void *commonio_locate (struct commonio_db *, const char *); extern int commonio_update (struct commonio_db *, const void *); +extern int commonio_append (struct commonio_db *, const void *); extern int commonio_remove (struct commonio_db *, const char *); extern int commonio_rewind (struct commonio_db *); extern /*@observer@*/ /*@null@*/const void *commonio_next (struct commonio_db *);