util_url_node_t *n = (util_url_node_t *)c;
util_url_node_t *node = (util_url_node_t *)util_ald_alloc(sizeof(util_url_node_t));
- node->url = util_ald_strdup(n->url);
- node->search_cache = n->search_cache;
- node->compare_cache = n->compare_cache;
- node->dn_compare_cache = n->dn_compare_cache;
- return node;
+ if (node) {
+ if (!(node->url = util_ald_strdup(n->url))) {
+ util_ald_free(node->url);
+ return NULL;
+ }
+ node->search_cache = n->search_cache;
+ node->compare_cache = n->compare_cache;
+ node->dn_compare_cache = n->dn_compare_cache;
+ return node;
+ }
+ else {
+ return NULL;
+ }
}
void util_ldap_url_node_free(void *n)
{
util_compare_node_t *n = (util_compare_node_t *)c;
util_compare_node_t *node = (util_compare_node_t *)util_ald_alloc(sizeof(util_compare_node_t));
- node->dn = util_ald_strdup(n->dn);
- node->attrib = util_ald_strdup(n->attrib);
- node->value = util_ald_strdup(n->value);
- node->lastcompare = n->lastcompare;
- node->result = n->result;
- return node;
+
+ if (node) {
+ if (!(node->dn = util_ald_strdup(n->dn)) ||
+ !(node->attrib = util_ald_strdup(n->attrib)) ||
+ !(node->value = util_ald_strdup(n->value))) {
+ util_ldap_compare_node_free(node);
+ return NULL;
+ }
+ node->lastcompare = n->lastcompare;
+ node->result = n->result;
+ return node;
+ }
+ else {
+ return NULL;
+ }
}
void util_ldap_compare_node_free(void *n)
{
util_dn_compare_node_t *n = (util_dn_compare_node_t *)c;
util_dn_compare_node_t *node = (util_dn_compare_node_t *)util_ald_alloc(sizeof(util_dn_compare_node_t));
- node->reqdn = util_ald_strdup(n->reqdn);
- node->dn = util_ald_strdup(n->dn);
- return node;
+ if (node) {
+ if (!(node->reqdn = util_ald_strdup(n->reqdn)) ||
+ !(node->dn = util_ald_strdup(n->dn))) {
+ util_ldap_dn_compare_node_free(node);
+ return NULL;
+ }
+ return node;
+ }
+ else {
+ return NULL;
+ }
}
void util_ldap_dn_compare_node_free(void *n)
/* util_ldap_cache_mgr.c */
void util_ald_free(const void *ptr);
-void *util_ald_alloc(int size);
+void *util_ald_alloc(unsigned long size);
const char *util_ald_strdup(const char *s);
unsigned long util_ald_hash_string(int nstr, ...);
void util_ald_cache_purge(util_ald_cache_t *cache);
#endif
}
-void *util_ald_alloc(int size)
+void *util_ald_alloc(unsigned long size)
{
+ if (0 == size)
+ return NULL;
#if APR_HAS_SHARED_MEMORY
if (util_ldap_shm) {
return (void *)apr_shm_calloc(util_ldap_shm, size);
return (void *)calloc(sizeof(char), size);
}
#else
- return (void *)calloc(size);
+ return (void *)calloc(sizeof(char), size);
#endif
}
int i;
util_cache_node_t *p, *q;
apr_time_t t;
+
+ if (!cache)
+ return;
cache->last_purge = apr_time_now();
cache->npurged = 0;