]> arthur.barton.de Git - netatalk.git/blobdiff - libatalk/talloc/dalloc.c
Merge remote-tracking branch 'origin/branch-netatalk-3-0' into develop
[netatalk.git] / libatalk / talloc / dalloc.c
index 37af665c1b8556a09f608ea6578b8a4d9287decf..4c06f0656e501275e40d241a976580436f2d9139 100644 (file)
@@ -121,8 +121,12 @@ void *dalloc_value_for_key(const DALLOC_CTX *d, ...)
     }
 
     for (elem = 0; elem + 1 < talloc_array_length(d->dd_talloc_array); elem += 2) {
-        memcpy(&s, d->dd_talloc_array[elem], sizeof(char *));
-        if (STRCMP(s, ==, type)) {
+        if (STRCMP(talloc_get_name(d->dd_talloc_array[elem]), !=, "char *")) {
+            LOG(log_error, logtype_default, "dalloc_value_for_key: key not a string: %s",
+                talloc_get_name(d->dd_talloc_array[elem]));
+            EC_FAIL;
+        }
+        if (STRCMP((char *)d->dd_talloc_array[elem], ==, type)) {
             p = d->dd_talloc_array[elem + 1];
             break;
         }            
@@ -134,3 +138,37 @@ EC_CLEANUP:
         p = NULL;
     return p;
 }
+
+char *dalloc_strdup(const void *ctx, const char *string)
+{
+    EC_INIT;
+    char *p;
+
+    EC_NULL( p = talloc_strdup(ctx, string) );
+    talloc_set_name(p, "char *");
+
+EC_CLEANUP:
+    if (ret != 0) {
+        if (p)
+            talloc_free(p);
+        p = NULL;
+    }
+    return p;
+}
+
+char *dalloc_strndup(const void *ctx, const char *string, size_t n)
+{
+    EC_INIT;
+    char *p;
+
+    EC_NULL( p = talloc_strndup(ctx, string, n) );
+    talloc_set_name(p, "char *");
+
+EC_CLEANUP:
+    if (ret != 0) {
+        if (p)
+            talloc_free(p);
+        p = NULL;
+    }
+    return p;
+}