X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fcore%2Fobject.c;h=7fbd5f025228831503fdc626516f3c9733eeff81;hb=1fee763a36a0c9af761244bbce8cd6c233ddbe2a;hp=e9825b1d84cc122499600521a432e4bb162f24c8;hpb=231b242faad442e8e7eb7dada96260edf85053c1;p=sysdb.git diff --git a/src/core/object.c b/src/core/object.c index e9825b1..7fbd5f0 100644 --- a/src/core/object.c +++ b/src/core/object.c @@ -75,17 +75,26 @@ static sdb_type_t sdb_object_wrapper_type = { */ sdb_object_t * -sdb_object_create(sdb_type_t type, ...) +sdb_object_create(const char *name, sdb_type_t type, ...) { sdb_object_t *obj; - if (type.size <= 0) + if (type.size <= sizeof(sdb_object_t)) return NULL; obj = malloc(type.size); if (! obj) return NULL; - memset(obj, 0, sizeof(*obj)); + memset(obj, 0, type.size); + + if (name) { + obj->name = strdup(name); + if (! obj->name) { + obj->ref_cnt = 1; + sdb_object_deref(obj); + return NULL; + } + } if (type.init) { va_list ap; @@ -107,9 +116,10 @@ sdb_object_create(sdb_type_t type, ...) } /* sdb_object_create */ sdb_object_t * -sdb_object_create_wrapper(void *data, void (*destructor)(void *)) +sdb_object_create_wrapper(const char *name, + void *data, void (*destructor)(void *)) { - return sdb_object_create(sdb_object_wrapper_type, data, destructor); + return sdb_object_create(name, sdb_object_wrapper_type, data, destructor); } /* sdb_object_create_wrapper */ void @@ -125,6 +135,8 @@ sdb_object_deref(sdb_object_t *obj) if (obj->type.destroy) obj->type.destroy(obj); + if (obj->name) + free(obj->name); free(obj); } /* sdb_object_deref */ @@ -137,5 +149,26 @@ sdb_object_ref(sdb_object_t *obj) ++obj->ref_cnt; } /* sdb_object_ref */ +sdb_object_t * +sdb_object_clone(const sdb_object_t *obj) +{ + if ((! obj) || (! obj->type.clone)) + return NULL; + return obj->type.clone(obj); +} /* sdb_object_clone */ + +int +sdb_object_cmp_by_name(const sdb_object_t *o1, const sdb_object_t *o2) +{ + if ((! o1) && (! o2)) + return 0; + else if (! o1) + return -1; + else if (! o2) + return 1; + + return strcasecmp(o1->name, o2->name); +} /* sdb_object_cmp_by_name */ + /* vim: set tw=78 sw=4 ts=4 noexpandtab : */