Back to index

nordugrid-arc-nox  1.1.0~rc6
listfunc.c
Go to the documentation of this file.
00001 #include "config.h"
00002 
00003 #include <stdlib.h>
00004 #include <string.h>
00005 
00006 char **listjoin(char **base, char **addon, int size) {
00007   char **store = addon, 
00008     **storebase = base,
00009     **newvect = NULL;
00010   int num = 0, num2=0;
00011   int i;
00012 
00013   if (!addon || !(*addon))
00014     return base;
00015 
00016   while (*store++)
00017     num++;
00018 
00019   if (storebase)
00020     while (*storebase++)
00021       num2++;
00022 
00023   if ((newvect = (char **)malloc((num+num2+1)*size))) {
00024     if (newvect) {
00025       memcpy(newvect, base, (size*(num2)));
00026       for (i=num2; i <num+num2; i++)
00027         newvect[i] = addon[i-num2];
00028       newvect[i] = NULL;
00029       free(base);
00030       return newvect;
00031     }
00032    }
00033   return NULL;
00034 }
00035 
00036 char **listadd(char **vect, char *data, int size) {
00037   int i = 0;
00038   char **newvect;
00039 
00040   if (!data || (size <= 0))
00041     return NULL;
00042 
00043   if (vect)
00044     while (vect[i++]) ;
00045   else
00046     i=1;
00047 
00048   if ((newvect = (char **)malloc((i+1)*size))) {
00049     if (vect) {
00050       memcpy(newvect, vect, (size*(i-1)));
00051       newvect[i-1] = data;
00052       newvect[i] = NULL;
00053       free(vect);
00054     }
00055     else {
00056       newvect[0] = data;
00057       newvect[1] = NULL;
00058     }
00059     return newvect;
00060   }
00061   return NULL;
00062 }
00063 
00064 void listfree(char **vect, void (*f)(void *)) {
00065   char **tmp = vect;
00066   if (tmp) {
00067     int i = 0;
00068     while (tmp[i])
00069       f(tmp[i++]);
00070     free(vect);
00071   }
00072 }