summaryrefslogtreecommitdiff
path: root/source4/lib/ldb/common/ldb_ldif.c
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2005-01-02 07:49:29 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:07:55 -0500
commit1a988ec9af7960616fb4661b20d86ff05146d836 (patch)
tree725eb92b6b97133b23972215f5c69117e29c339c /source4/lib/ldb/common/ldb_ldif.c
parent65f96eba32b93ced0717c2639007bba59da55fa4 (diff)
downloadsamba-1a988ec9af7960616fb4661b20d86ff05146d836.tar.gz
samba-1a988ec9af7960616fb4661b20d86ff05146d836.tar.bz2
samba-1a988ec9af7960616fb4661b20d86ff05146d836.zip
r4474: - converted ldb to use talloc internally
- added gcov flags to Makefile.ldb - expanded ldb test suite to get more coverage (This used to be commit 0ab98f50a7e0fe15347a99e5c29a6590a87729a0)
Diffstat (limited to 'source4/lib/ldb/common/ldb_ldif.c')
-rw-r--r--source4/lib/ldb/common/ldb_ldif.c52
1 files changed, 25 insertions, 27 deletions
diff --git a/source4/lib/ldb/common/ldb_ldif.c b/source4/lib/ldb/common/ldb_ldif.c
index 94e15805a6..d20a2a3553 100644
--- a/source4/lib/ldb/common/ldb_ldif.c
+++ b/source4/lib/ldb/common/ldb_ldif.c
@@ -97,7 +97,7 @@ char *ldb_base64_encode(struct ldb_context *ldb, const char *buf, int len)
int bytes = (len*8 + 5)/6;
char *out;
- out = ldb_malloc(ldb, bytes+2);
+ out = talloc_array_p(ldb, char, bytes+2);
if (!out) return NULL;
for (i=0;i<bytes;i++) {
@@ -185,7 +185,7 @@ static int base64_encode_f(struct ldb_context *ldb,
ret = fold_string(fprintf_fn, private_data, b, strlen(b), start_pos);
- ldb_free(ldb, b);
+ talloc_free(b);
return ret;
}
@@ -212,7 +212,7 @@ int ldb_ldif_write(struct ldb_context *ldb,
int total=0, ret;
const struct ldb_message *msg;
- msg = &ldif->msg;
+ msg = ldif->msg;
ret = fprintf_fn(private_data, "dn: %s\n", msg->dn);
CHECK_RET;
@@ -305,9 +305,9 @@ static char *next_chunk(struct ldb_context *ldb,
if (chunk_size+1 >= alloc_size) {
char *c2;
alloc_size += 1024;
- c2 = ldb_realloc_p(ldb, chunk, char, alloc_size);
+ c2 = talloc_realloc_p(ldb, chunk, char, alloc_size);
if (!c2) {
- ldb_free(ldb, chunk);
+ talloc_free(chunk);
errno = ENOMEM;
return NULL;
}
@@ -416,15 +416,7 @@ static int next_attr(char **s, const char **attr, struct ldb_val *value)
*/
void ldb_ldif_read_free(struct ldb_context *ldb, struct ldb_ldif *ldif)
{
- struct ldb_message *msg = &ldif->msg;
- unsigned int i;
- for (i=0;i<msg->num_elements;i++) {
- if (msg->elements[i].name) ldb_free(ldb, msg->elements[i].name);
- if (msg->elements[i].values) ldb_free(ldb, msg->elements[i].values);
- }
- if (msg->elements) ldb_free(ldb, msg->elements);
- if (msg->private_data) ldb_free(ldb, msg->private_data);
- ldb_free(ldb, ldif);
+ talloc_free(ldif);
}
/*
@@ -435,8 +427,8 @@ static int msg_add_empty(struct ldb_context *ldb,
{
struct ldb_message_element *el2, *el;
- el2 = ldb_realloc_p(ldb, msg->elements,
- struct ldb_message_element, msg->num_elements+1);
+ el2 = talloc_realloc_p(msg, msg->elements,
+ struct ldb_message_element, msg->num_elements+1);
if (!el2) {
errno = ENOMEM;
return -1;
@@ -446,7 +438,7 @@ static int msg_add_empty(struct ldb_context *ldb,
el = &msg->elements[msg->num_elements];
- el->name = ldb_strdup(ldb, name);
+ el->name = talloc_strdup(msg->elements, name);
el->num_values = 0;
el->values = NULL;
el->flags = flags;
@@ -476,11 +468,17 @@ struct ldb_ldif *ldb_ldif_read(struct ldb_context *ldb,
value.data = NULL;
- ldif = ldb_malloc_p(ldb, struct ldb_ldif);
+ ldif = talloc_p(ldb, struct ldb_ldif);
if (!ldif) return NULL;
+ ldif->msg = talloc_p(ldif, struct ldb_message);
+ if (ldif->msg == NULL) {
+ talloc_free(ldif);
+ return NULL;
+ }
+
ldif->changetype = LDB_CHANGETYPE_NONE;
- msg = &ldif->msg;
+ msg = ldif->msg;
msg->dn = NULL;
msg->elements = NULL;
@@ -558,8 +556,8 @@ struct ldb_ldif *ldb_ldif_read(struct ldb_context *ldb,
flags == el->flags) {
/* its a continuation */
el->values =
- ldb_realloc_p(ldb, el->values,
- struct ldb_val, el->num_values+1);
+ talloc_realloc_p(msg->elements, el->values,
+ struct ldb_val, el->num_values+1);
if (!el->values) {
goto failed;
}
@@ -567,16 +565,16 @@ struct ldb_ldif *ldb_ldif_read(struct ldb_context *ldb,
el->num_values++;
} else {
/* its a new attribute */
- msg->elements = ldb_realloc_p(ldb, msg->elements,
- struct ldb_message_element,
- msg->num_elements+1);
+ msg->elements = talloc_realloc_p(ldif, msg->elements,
+ struct ldb_message_element,
+ msg->num_elements+1);
if (!msg->elements) {
goto failed;
}
el = &msg->elements[msg->num_elements];
el->flags = flags;
- el->name = ldb_strdup(ldb, attr);
- el->values = ldb_malloc_p(ldb, struct ldb_val);
+ el->name = talloc_strdup(msg->elements, attr);
+ el->values = talloc_p(msg->elements, struct ldb_val);
if (!el->values || !el->name) {
goto failed;
}
@@ -589,7 +587,7 @@ struct ldb_ldif *ldb_ldif_read(struct ldb_context *ldb,
return ldif;
failed:
- if (ldif) ldb_ldif_read_free(ldb, ldif);
+ talloc_free(ldif);
return NULL;
}