]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Add cfree for freeing consts
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Sun, 9 Dec 2012 15:59:15 +0000 (15:59 +0000)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Sun, 9 Dec 2012 15:59:15 +0000 (15:59 +0000)
src/include/radiusd.h
src/main/util.c
src/main/valuepair.c
src/modules/rlm_cache/rlm_cache.c
src/modules/rlm_ldap/rlm_ldap.c
src/modules/rlm_policy/rlm_policy.c

index 9a7e414f8d2d0d9f7bc1d671e3485a2f6db00e62..022b48b58fe5cbe295efa108242ebf2a71cede64 100644 (file)
@@ -541,6 +541,7 @@ int         rad_mkdir(char *directory, int mode);
 int            rad_checkfilename(const char *filename);
 void           *rad_malloc(size_t size); /* calls exit(1) on error! */
 void           *rad_calloc(size_t size); /* calls exit(1) on error! */
+void           cfree(const void *ptr);
 REQUEST                *request_alloc(void);
 REQUEST                *request_alloc_fake(REQUEST *oldreq);
 REQUEST                *request_alloc_coa(REQUEST *request);
index ca3ab52f5ed89b932ff33756b3d743f354dd9fd7..7ccca0c902dd4b8787c5d18aad5a9fe9d3104c35 100644 (file)
@@ -362,6 +362,19 @@ void *rad_calloc(size_t size)
        return ptr;
 }
 
+/*
+ *     Signature for free is dumb, and raises errors when we try
+ *     to free const ptrs.
+ */
+void cfree(const void *ptr)
+{
+       void *tmp;
+       if (!ptr) return;
+
+       memcpy(&tmp, &ptr, sizeof(tmp));
+       free(tmp);
+}
+
 /*
  *     Logs an error message and aborts the program
  *
index 69aed8df70a7f28dd7b1665cfd2cbf8fea1be059..a6167db02a47678d8a43165e479df763ba627bc1 100644 (file)
@@ -1062,7 +1062,7 @@ void radius_tmplfree(VALUE_PAIR_TMPL **tmpl)
        if (*tmpl == NULL) return;
        
        if ((*tmpl)->name) {
-               free((void *) (*tmpl)->name);
+               cfree((*tmpl)->name);
        }
        
        free(*tmpl);
index 86f022af8e20281a2f00af5da26c9b9d2e4e9abe..91f0b7d580c0b0159374e68fa98f41228aa918db 100644 (file)
@@ -84,14 +84,13 @@ static void cache_entry_free(void *data)
 {
        rlm_cache_entry_t *c = data;
 
-       free((void *) c->key);
+       cfree(c->key);
        pairfree(&c->control);
        pairfree(&c->request);
        pairfree(&c->reply);
        free(c);
 }
 
-
 /*
  *     Compare two entries by expiry time.  There may be multiple
  *     entries with the same expiry time.
@@ -436,7 +435,6 @@ done:
        return ret;
 }
 
-
 /*
  *     A mapping of configuration file names to internal variables.
  *
@@ -469,7 +467,7 @@ static int cache_detach(void *instance)
        rlm_cache_t *inst = instance;
 
        free(inst->key);
-       free((void *) inst->xlat_name);
+       cfree(inst->xlat_name);
 
        fr_heap_delete(inst->heap);
        rbtree_free(inst->cache);
index 4ad88a149c9d80a19e65d4bafcc1d1861bb4eaa0..36ba85cb9cd10d60bfa629a671176c297a9f2c66 100644 (file)
@@ -1606,16 +1606,15 @@ static void xlat_attrsfree(const xlat_attrs_t *expanded)
        const VALUE_PAIR_MAP *map;
        unsigned int total = 0;
        
-       char *name;
+       const char *name;
        
        for (map = expanded->maps; map != NULL; map = map->next)
        {
-               memcpy(&name, &(expanded->attrs[total++]), sizeof(name));
-               
+               name = expanded->attrs[total++];
                if (!name) return;
                
                if (map->src->do_xlat) {
-                       free(name);
+                       cfree(name);
                }
        }
 }
index 43dcc567eed4176c5dc624a2f2bc3f83a5d3ffb2..899ebd79b8b512d1ce540cbf31f0fa9175bb161d 100644 (file)
@@ -277,7 +277,7 @@ void rlm_policy_free_item(policy_item_t *item)
 
                                this = (policy_named_t *) item;
                                rad_assert(this->name != NULL);
-                               free((void *) this->name);
+                               rad_free(this->name);
                                rlm_policy_free_item(this->policy);
                        }
                        break;
@@ -287,7 +287,7 @@ void rlm_policy_free_item(policy_item_t *item)
                                policy_call_t *this;
 
                                this = (policy_call_t *) item;
-                               free((void *) this->name);
+                               rad_free(this->name);
                        }
                        break;