Cleanup of lib from Morten Nilsen - thanks
SVN revision: 19434
This commit is contained in:
parent
b2bb84d0e8
commit
4e0e175bf8
|
@ -1,6 +1,7 @@
|
|||
/* ############## bad */
|
||||
#define HAVE_EVAS2
|
||||
|
||||
#include "Ecore.h"
|
||||
#include "Ecore_Config.h"
|
||||
#include "ecore_config_util.h"
|
||||
#include "ecore_config_ipc.h"
|
||||
|
@ -18,7 +19,7 @@
|
|||
#include <stdlib.h> /* malloc(), free() */
|
||||
|
||||
static Ecore_Config_Server *__ecore_config_servers;
|
||||
static unsigned long ipc_timer = 0L;
|
||||
Ecore_Timer *ipc_timer = NULL;
|
||||
|
||||
extern int _ecore_config_ipc_ecore_init(const char *pipe_name, void **data);
|
||||
extern int _ecore_config_ipc_ecore_exit(void **data);
|
||||
|
@ -232,7 +233,8 @@ _ecore_config_ipc_exit(void)
|
|||
Ecore_Config_Server *l;
|
||||
|
||||
if (ipc_timer)
|
||||
timeout_remove(ipc_timer);
|
||||
ecore_timer_del(ipc_timer);
|
||||
|
||||
l = __ecore_config_servers;
|
||||
while (l)
|
||||
{
|
||||
|
@ -274,7 +276,7 @@ _ecore_config_ipc_init(const char *pipe_name)
|
|||
ret_srv = list;
|
||||
|
||||
if (!ipc_timer)
|
||||
ipc_timer = timeout_add(100, _ecore_config_ipc_poll, NULL);
|
||||
ipc_timer = ecore_timer_add(100, _ecore_config_ipc_poll, NULL);
|
||||
|
||||
return ret_srv;
|
||||
}
|
||||
|
|
|
@ -1,20 +1,10 @@
|
|||
/* azundris */
|
||||
|
||||
/*#include <glib.h>*/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/time.h> /* gimetimeofday() */
|
||||
#include <stdio.h> /* NULL */
|
||||
#include <stdlib.h> /* malloc(), free() */
|
||||
#include <string.h> /* str...() */
|
||||
#include <ctype.h> /* isspace() */
|
||||
|
||||
#include <stdarg.h> /* varargs in dlmulti() */
|
||||
#include <dlfcn.h> /* dlopen() and friends for dlmulti() */
|
||||
|
||||
/* #ifdef HAVE_GLIB2 */
|
||||
/* # include <glib/gmain.h> */
|
||||
/* #endif */
|
||||
#include <stdarg.h> /* varargs in sprintf/appendf */
|
||||
|
||||
#include "ecore_private.h"
|
||||
|
||||
|
@ -23,468 +13,6 @@
|
|||
|
||||
#include "ecore_config_private.h"
|
||||
|
||||
#define CHUNKLEN 4096
|
||||
|
||||
/*****************************************************************************/
|
||||
/* MISC */
|
||||
/********/
|
||||
|
||||
int
|
||||
dlmulti(const char *name, const char *file, int flag, void **libr, const char *fmt, ...)
|
||||
{
|
||||
#define MAX_SYM_LEN 256
|
||||
va_list ap;
|
||||
void *lib;
|
||||
int ret = ECORE_CONFIG_ERR_SUCC;
|
||||
char buf[MAX_SYM_LEN] = "\0";
|
||||
|
||||
if (!libr)
|
||||
return ECORE_CONFIG_ERR_FAIL;
|
||||
|
||||
if (!name)
|
||||
name = file;
|
||||
|
||||
*libr = NULL;
|
||||
|
||||
if ((lib = dlopen(file, flag)))
|
||||
{
|
||||
void **funr, *fun;
|
||||
char *b, *e;
|
||||
size_t l;
|
||||
int required = 1;
|
||||
|
||||
va_start(ap, fmt);
|
||||
while (*fmt)
|
||||
{
|
||||
switch (*fmt)
|
||||
{
|
||||
case '?':
|
||||
required = 0;
|
||||
fmt++;
|
||||
break;
|
||||
|
||||
case '!':
|
||||
case '.':
|
||||
required = 1;
|
||||
fmt++;
|
||||
break;
|
||||
|
||||
case '\t':
|
||||
case '\n':
|
||||
case '\r':
|
||||
case ';':
|
||||
case ',':
|
||||
case ' ':
|
||||
fmt++;
|
||||
break;
|
||||
|
||||
default:
|
||||
e = b = (char *)fmt;
|
||||
while (*e && (strchr("?!.,; \t\n\r", *e) == NULL))
|
||||
e++;
|
||||
|
||||
fmt = e;
|
||||
if (e == b)
|
||||
ret = ECORE_CONFIG_ERR_NODATA;
|
||||
else if ((l = (e - b)) >= MAX_SYM_LEN)
|
||||
ret = ECORE_CONFIG_ERR_OOM;
|
||||
else
|
||||
{
|
||||
memcpy(buf, b, l);
|
||||
buf[l] = '\0';
|
||||
funr = va_arg(ap, void **);
|
||||
|
||||
if (!(fun = dlsym(lib, buf)))
|
||||
{
|
||||
if ((ret =
|
||||
required ? ECORE_CONFIG_ERR_NOTFOUND :
|
||||
ECORE_CONFIG_ERR_PARTIAL) ==
|
||||
ECORE_CONFIG_ERR_NOTFOUND)
|
||||
E(1,
|
||||
"DLMulti: library/plugin/engine \"%s\" (\"%s\") did not contain required function \"%s\"...\n",
|
||||
name, file, buf);
|
||||
}
|
||||
E(2, "DLMulti: %p => %p %c\"%s\"\n", fun, funr,
|
||||
required ? '!' : '?', buf);
|
||||
if (funr)
|
||||
*funr = fun;
|
||||
}
|
||||
required = 1;
|
||||
}
|
||||
}
|
||||
|
||||
va_end(ap);
|
||||
|
||||
if ((ret == ECORE_CONFIG_ERR_SUCC) || (ret == ECORE_CONFIG_ERR_PARTIAL))
|
||||
*libr = lib;
|
||||
else
|
||||
dlclose(lib);
|
||||
}
|
||||
else
|
||||
ret = ECORE_CONFIG_ERR_NODATA;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
#if 0 /* Unused */
|
||||
/*****************************************************************************/
|
||||
|
||||
unsigned long
|
||||
now(long delay)
|
||||
{
|
||||
static struct timeval tv;
|
||||
unsigned long r;
|
||||
|
||||
gettimeofday(&tv, NULL);
|
||||
r = tv.tv_sec * 1000 + (((float)tv.tv_usec) / 1000.0) + delay;
|
||||
return r;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
int
|
||||
parse_line(char *in, char **o1, char **o2, char **o3, char **o4)
|
||||
{
|
||||
#define PLMAX 16
|
||||
int c;
|
||||
char *p = in;
|
||||
char *r[PLMAX];
|
||||
|
||||
for (c = 0; c < PLMAX; c++)
|
||||
r[c] = NULL;
|
||||
|
||||
c = 0;
|
||||
if (!in || !*in)
|
||||
goto pl_end;
|
||||
|
||||
do
|
||||
{
|
||||
while (isspace(*p))
|
||||
*(p++) = '\0';
|
||||
|
||||
if (!*p || (strchr("#;", *p) && (!p[1] || isspace(p[1]))))
|
||||
*p = '\0'; /* it ends HERE */
|
||||
else
|
||||
{
|
||||
if (*p == '\"')
|
||||
{
|
||||
r[c++] = ++p;
|
||||
while (*p && (*p != '\"'))
|
||||
{
|
||||
if ((*p == '\\') && p[1])
|
||||
p += 2;
|
||||
else
|
||||
p++;
|
||||
}
|
||||
if (*p)
|
||||
*(p++) = '\0';
|
||||
}
|
||||
else
|
||||
{
|
||||
r[c++] = p;
|
||||
while (*p && !isspace(*p))
|
||||
p++;
|
||||
}
|
||||
}
|
||||
}
|
||||
while (*p);
|
||||
|
||||
pl_end:
|
||||
if (o1)
|
||||
*o1 = r[0];
|
||||
if (o2)
|
||||
*o2 = r[1];
|
||||
if (o3)
|
||||
*o3 = r[2];
|
||||
if (o4)
|
||||
*o4 = r[3];
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
/*char *unit_size(char *size) {
|
||||
gchar *unit="byte";
|
||||
long s;
|
||||
|
||||
if((s=atol(size))&&(s>=1024)) {
|
||||
if((s>(1024*1024*1024))) {
|
||||
unit="GB";
|
||||
s=(long)(s/(1024*1024)); }
|
||||
else if((s>(1024*1024))) {
|
||||
unit="MB";
|
||||
s=(long)(s/1024); }
|
||||
else
|
||||
unit="KB";
|
||||
|
||||
if((s/1024)>31)
|
||||
sprintf(size,"%ld %s",(long)(s/1024),unit);
|
||||
else
|
||||
sprintf(size,"%.1f %s",((float)s)/1024,unit); }
|
||||
else
|
||||
sprintf(size,"%ld %s",s,unit);
|
||||
|
||||
return size; }
|
||||
|
||||
*/
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
void
|
||||
qsrt(void *a[], void *data, int lo, int hi,
|
||||
int (*compare) (const void *, const void *, const void *))
|
||||
{
|
||||
int h, l;
|
||||
void *p, *t;
|
||||
|
||||
if (lo < hi)
|
||||
{
|
||||
l = lo;
|
||||
h = hi;
|
||||
p = a[hi];
|
||||
|
||||
do
|
||||
{
|
||||
while ((l < h) && (compare(data, a[l], p) <= 0))
|
||||
l = l + 1;
|
||||
while ((h > l) && (compare(data, a[h], p) >= 0))
|
||||
h = h - 1;
|
||||
if (l < h)
|
||||
{
|
||||
t = a[l];
|
||||
a[l] = a[h];
|
||||
a[h] = t;
|
||||
}
|
||||
}
|
||||
while (l < h);
|
||||
|
||||
t = a[l];
|
||||
a[l] = a[hi];
|
||||
a[hi] = t;
|
||||
|
||||
qsrt(a, data, lo, l - 1, compare);
|
||||
qsrt(a, data, l + 1, hi, compare);
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* TIMERS */
|
||||
/**********/
|
||||
|
||||
#ifdef HAVE_GLIB2
|
||||
|
||||
unsigned long
|
||||
timeout_add(uint f, int (*fun) (void *), void *data)
|
||||
{
|
||||
return g_timeout_add((guint) f, (GSourceFunc) fun, (gpointer) data);
|
||||
}
|
||||
|
||||
int
|
||||
timeout_remove(unsigned long handle)
|
||||
{
|
||||
return g_source_remove(handle) ? ECORE_CONFIG_ERR_SUCC :
|
||||
ECORE_CONFIG_ERR_FAIL;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
unsigned long
|
||||
timeout_add(uint f __UNUSED__, int (*fun) (void *) __UNUSED__, void *data __UNUSED__)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
timeout_remove(unsigned long handle __UNUSED__)
|
||||
{
|
||||
return ECORE_CONFIG_ERR_NOTSUPP;
|
||||
}
|
||||
|
||||
#endif /* HAVE_GLIB2 */
|
||||
|
||||
/*****************************************************************************/
|
||||
/* HASHES */
|
||||
/**********/
|
||||
|
||||
int
|
||||
eslist_free(eslist ** l)
|
||||
{
|
||||
eslist *e, *f;
|
||||
|
||||
if (!l)
|
||||
return ECORE_CONFIG_ERR_NODATA;
|
||||
for (e = *l; e; e = f)
|
||||
{
|
||||
f = e->next;
|
||||
free(e);
|
||||
}
|
||||
*l = NULL;
|
||||
return ECORE_CONFIG_ERR_SUCC;
|
||||
}
|
||||
|
||||
int
|
||||
eslist_next(eslist ** e)
|
||||
{
|
||||
if (!e || !*e)
|
||||
return ECORE_CONFIG_ERR_NODATA;
|
||||
*e = (*e)->next;
|
||||
return ECORE_CONFIG_ERR_SUCC;
|
||||
}
|
||||
|
||||
void *
|
||||
eslist_payload(eslist ** e)
|
||||
{
|
||||
return (!e || !*e) ? NULL : (*e)->payload;
|
||||
}
|
||||
|
||||
int
|
||||
eslist_prepend(eslist ** e, void *p)
|
||||
{
|
||||
eslist *f;
|
||||
|
||||
if (!e)
|
||||
return ECORE_CONFIG_ERR_NODATA;
|
||||
|
||||
if (!(f = malloc(sizeof(eslist))))
|
||||
return ECORE_CONFIG_ERR_OOM;
|
||||
|
||||
f->payload = p;
|
||||
f->next = *e;
|
||||
|
||||
*e = f;
|
||||
|
||||
return ECORE_CONFIG_ERR_SUCC;
|
||||
}
|
||||
|
||||
int
|
||||
eslist_append(eslist ** e, void *p)
|
||||
{
|
||||
eslist *f;
|
||||
|
||||
if (!e)
|
||||
return ECORE_CONFIG_ERR_NODATA;
|
||||
|
||||
if (!(f = malloc(sizeof(eslist))))
|
||||
return ECORE_CONFIG_ERR_OOM;
|
||||
|
||||
f->payload = p;
|
||||
f->next = NULL;
|
||||
|
||||
if (!*e)
|
||||
*e = f;
|
||||
else
|
||||
{
|
||||
eslist *g = *e;
|
||||
|
||||
while (g->next)
|
||||
g = g->next;
|
||||
g->next = f;
|
||||
}
|
||||
|
||||
return ECORE_CONFIG_ERR_SUCC;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* HASHES */
|
||||
/**********/
|
||||
|
||||
#ifdef HAVE_GLIB2
|
||||
|
||||
void *
|
||||
hash_table_new(void (*freekey), void (*freeval))
|
||||
{
|
||||
return g_hash_table_new_full(g_str_hash, g_str_equal, freekey, freeval);
|
||||
}
|
||||
|
||||
void *
|
||||
hash_table_fetch(void *hashtable, char *key)
|
||||
{
|
||||
return g_hash_table_lookup(hashtable, key);
|
||||
}
|
||||
|
||||
int
|
||||
hash_table_insert(void *hashtable, char *key, void *value)
|
||||
{
|
||||
g_hash_table_insert(hashtable, key, value);
|
||||
return ECORE_CONFIG_ERR_SUCC;
|
||||
}
|
||||
|
||||
int
|
||||
hash_table_replace(void *hashtable, char *key, void *value)
|
||||
{
|
||||
g_hash_table_replace(hashtable, key, value);
|
||||
return ECORE_CONFIG_ERR_SUCC;
|
||||
}
|
||||
|
||||
int
|
||||
hash_table_remove(void *hashtable, char *key)
|
||||
{
|
||||
g_hash_table_remove(hashtable, key);
|
||||
return ECORE_CONFIG_ERR_SUCC;
|
||||
}
|
||||
|
||||
int
|
||||
hash_table_dst(void *hashtable)
|
||||
{
|
||||
g_hash_table_destroy(hashtable);
|
||||
return ECORE_CONFIG_ERR_SUCC;
|
||||
}
|
||||
|
||||
int
|
||||
hash_table_walk(void *hashtable, hash_walker fun, void *data)
|
||||
{
|
||||
g_hash_table_foreach(hashtable, (GHFunc) fun, data);
|
||||
return ECORE_CONFIG_ERR_SUCC;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
void *
|
||||
hash_table_new(void (*freekey) __UNUSED__, void (*freeval) __UNUSED__)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void *
|
||||
hash_table_fetch(void *hashtable __UNUSED__, char *key __UNUSED__)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int
|
||||
hash_table_insert(void *hashtable __UNUSED__, char *key __UNUSED__, void *value __UNUSED__)
|
||||
{
|
||||
return ECORE_CONFIG_ERR_NOTSUPP;
|
||||
}
|
||||
|
||||
int
|
||||
hash_table_replace(void *hashtable __UNUSED__, char *key __UNUSED__, void *value __UNUSED__)
|
||||
{
|
||||
return ECORE_CONFIG_ERR_NOTSUPP;
|
||||
}
|
||||
|
||||
int
|
||||
hash_table_remove(void *hashtable __UNUSED__, char *key __UNUSED__)
|
||||
{
|
||||
return ECORE_CONFIG_ERR_NOTSUPP;
|
||||
}
|
||||
|
||||
int
|
||||
hash_table_dst(void *hashtable __UNUSED__)
|
||||
{
|
||||
return ECORE_CONFIG_ERR_NOTSUPP;
|
||||
}
|
||||
|
||||
int
|
||||
hash_table_walk(void *hashtable __UNUSED__, hash_walker fun __UNUSED__, void *data __UNUSED__)
|
||||
{
|
||||
return ECORE_CONFIG_ERR_NOTSUPP;
|
||||
}
|
||||
|
||||
#endif /* HAVE_GLIB2 */
|
||||
|
||||
/*****************************************************************************/
|
||||
/* STRINGS */
|
||||
/***********/
|
||||
|
@ -503,18 +31,6 @@ estring_new(int size)
|
|||
return e;
|
||||
}
|
||||
|
||||
estring *
|
||||
estring_dst(estring * e)
|
||||
{
|
||||
if (e)
|
||||
{
|
||||
if (e->str)
|
||||
free(e->str);
|
||||
free(e);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
char *
|
||||
estring_disown(estring * e)
|
||||
{
|
||||
|
@ -528,254 +44,72 @@ estring_disown(estring * e)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
char *
|
||||
estring_free(estring * e, int release_payload)
|
||||
{ /* glib compat */
|
||||
if (release_payload)
|
||||
{
|
||||
estring_dst(e);
|
||||
return NULL;
|
||||
}
|
||||
return estring_disown(e);
|
||||
}
|
||||
|
||||
int
|
||||
estring_truncate(estring * e, int size)
|
||||
{
|
||||
if (!e || (size < 0))
|
||||
return ECORE_CONFIG_ERR_FAIL;
|
||||
if (e->used <= size)
|
||||
return e->used;
|
||||
e->str[size] = '\0';
|
||||
e->used = size;
|
||||
return size;
|
||||
}
|
||||
|
||||
int
|
||||
estring_printf(estring * e, const char *fmt, ...)
|
||||
{
|
||||
int need;
|
||||
va_list ap;
|
||||
char *p;
|
||||
|
||||
if (!e)
|
||||
return ECORE_CONFIG_ERR_FAIL;
|
||||
|
||||
if (!(e->str))
|
||||
{
|
||||
if (!(e->str = (char *)malloc(e->alloc = 512)))
|
||||
return ECORE_CONFIG_ERR_OOM;
|
||||
}
|
||||
|
||||
retry:
|
||||
va_start(ap, fmt);
|
||||
need = vsnprintf(e->str, e->alloc, fmt, ap);
|
||||
va_end(ap);
|
||||
|
||||
if ((need >= e->alloc) || (need < 0))
|
||||
{
|
||||
if (need < 0)
|
||||
need = 2 * e->alloc;
|
||||
else
|
||||
need++;
|
||||
if (!(p = (char *)realloc(e->str, need)))
|
||||
{
|
||||
free(e->str);
|
||||
e->alloc = e->used = 0;
|
||||
return ECORE_CONFIG_ERR_OOM;
|
||||
}
|
||||
e->alloc = need;
|
||||
e->str = p;
|
||||
goto retry;
|
||||
}
|
||||
|
||||
return e->used = need;
|
||||
}
|
||||
|
||||
int
|
||||
estring_appendf(estring * e, const char *fmt, ...)
|
||||
{
|
||||
int need;
|
||||
va_list ap;
|
||||
char *p;
|
||||
va_list ap;
|
||||
size_t need;
|
||||
char *p;
|
||||
|
||||
if (!e)
|
||||
return ECORE_CONFIG_ERR_FAIL;
|
||||
|
||||
if (!e->str)
|
||||
{
|
||||
e->used = e->alloc = 0;
|
||||
if (!(e->str = (char *)malloc(e->alloc = 512)))
|
||||
return ECORE_CONFIG_ERR_OOM;
|
||||
}
|
||||
e->used = e->alloc = 0;
|
||||
|
||||
retry:
|
||||
va_start(ap, fmt);
|
||||
need = vsnprintf(e->str + e->used, e->alloc - e->used, fmt, ap);
|
||||
need = vsnprintf(NULL, 0, fmt, ap);
|
||||
va_end(ap);
|
||||
|
||||
if ((need >= (e->alloc - e->used)) || (need < 0))
|
||||
if(need >= (e->alloc - e->used))
|
||||
{
|
||||
if (need < 0)
|
||||
need = 2 * e->alloc;
|
||||
else
|
||||
need++;
|
||||
need += e->used;
|
||||
need += (CHUNKLEN - (need % CHUNKLEN));
|
||||
|
||||
if (!(p = (char *)realloc(e->str, need)))
|
||||
{
|
||||
if( !(p = (char *)realloc( e->str, need + e->used + 1 )) )
|
||||
{
|
||||
free(e->str);
|
||||
e->alloc = e->used = 0;
|
||||
return ECORE_CONFIG_ERR_OOM;
|
||||
}
|
||||
e->alloc = need;
|
||||
}
|
||||
e->alloc += need + 1;
|
||||
e->str = p;
|
||||
goto retry;
|
||||
}
|
||||
|
||||
return e->used += need;
|
||||
va_start(ap, fmt);
|
||||
vsnprintf(e->str + e->used, e->alloc - e->used, fmt, ap);
|
||||
va_end(ap);
|
||||
|
||||
return e->used;
|
||||
}
|
||||
|
||||
int
|
||||
esprintf(char **result, const char *fmt, ...)
|
||||
{
|
||||
int need, have;
|
||||
va_list ap;
|
||||
char *n;
|
||||
va_list ap;
|
||||
size_t need;
|
||||
char *n;
|
||||
|
||||
if (!result)
|
||||
return ECORE_CONFIG_ERR_FAIL;
|
||||
|
||||
if (!(n = (char *)malloc(have = 512)))
|
||||
return ECORE_CONFIG_ERR_OOM;
|
||||
|
||||
retry:
|
||||
va_start(ap, fmt);
|
||||
need = vsnprintf(n, have, fmt, ap);
|
||||
need = vsnprintf(NULL, 0, fmt, ap) + 1;
|
||||
va_end(ap);
|
||||
n = malloc(need + 1);
|
||||
|
||||
if ((need >= have) || (need < 0))
|
||||
if (n)
|
||||
{
|
||||
char *p;
|
||||
|
||||
if (need < 0)
|
||||
need = 2 * have;
|
||||
else
|
||||
need++;
|
||||
if (!(p = (char *)realloc(n, need)))
|
||||
{
|
||||
free(n);
|
||||
return ECORE_CONFIG_ERR_OOM;
|
||||
}
|
||||
have = need;
|
||||
n = p;
|
||||
goto retry;
|
||||
}
|
||||
|
||||
if (*result)
|
||||
free(*result);
|
||||
*result = n;
|
||||
|
||||
return need;
|
||||
}
|
||||
|
||||
#if 0
|
||||
int
|
||||
ejoin(char **result, char *delim, ...)
|
||||
{
|
||||
int dl, cl, ret = ECORE_CONFIG_ERR_SUCC;
|
||||
va_list ap;
|
||||
char *e, *n;
|
||||
|
||||
if (!result)
|
||||
return ECORE_CONFIG_ERR_FAIL;
|
||||
if (!delim)
|
||||
delim = "";
|
||||
dl = strlen(delim);
|
||||
|
||||
va_start(ap, delim);
|
||||
cl = -dl;
|
||||
while ((e = va_arg(ap, char *)))
|
||||
cl += strlen(e) + dl;
|
||||
|
||||
va_end(ap);
|
||||
|
||||
if (cl <= 0)
|
||||
{
|
||||
if (!(n = strdup("")))
|
||||
ret = ECORE_CONFIG_ERR_OOM;
|
||||
}
|
||||
else if (!(n = malloc(cl + 1)))
|
||||
ret = ECORE_CONFIG_ERR_OOM;
|
||||
else
|
||||
{
|
||||
char *p = n;
|
||||
|
||||
va_start(ap, delim);
|
||||
while ((e = va_arg(ap, char *)))
|
||||
{
|
||||
if (dl && (p != n))
|
||||
{
|
||||
strcpy(p, delim);
|
||||
p += dl;
|
||||
}
|
||||
strcpy(p, e);
|
||||
p += strlen(p);
|
||||
}
|
||||
va_start(ap, fmt);
|
||||
need = vsnprintf(n, need, fmt, ap);
|
||||
va_end(ap);
|
||||
|
||||
n[need] = 0;
|
||||
|
||||
if(*result)
|
||||
free(result);
|
||||
*result = n;
|
||||
|
||||
return need;
|
||||
}
|
||||
|
||||
if (*result)
|
||||
free(*result);
|
||||
*result = n;
|
||||
|
||||
return ret;
|
||||
return ECORE_CONFIG_ERR_OOM;
|
||||
}
|
||||
|
||||
int
|
||||
ecat(char **result, ...)
|
||||
{
|
||||
int cl, ret = ECORE_CONFIG_ERR_SUCC;
|
||||
va_list ap;
|
||||
char *e, *n;
|
||||
|
||||
if (!result)
|
||||
return ECORE_CONFIG_ERR_FAIL;
|
||||
|
||||
va_start(ap, result);
|
||||
cl = 0;
|
||||
while ((e = va_arg(ap, char *)))
|
||||
cl += strlen(e);
|
||||
|
||||
va_end(ap);
|
||||
|
||||
if (cl <= 0)
|
||||
{
|
||||
if (!(n = strdup("")))
|
||||
ret = ECORE_CONFIG_ERR_OOM;
|
||||
}
|
||||
else if (!(n = malloc(cl + 1)))
|
||||
ret = ECORE_CONFIG_ERR_OOM;
|
||||
else
|
||||
{
|
||||
char *p = n;
|
||||
|
||||
va_start(ap, result);
|
||||
while ((e = va_arg(ap, char *)))
|
||||
{
|
||||
strcpy(p, e);
|
||||
p += strlen(p);
|
||||
}
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
if (*result)
|
||||
free(*result);
|
||||
*result = n;
|
||||
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -7,57 +7,8 @@ typedef struct _estring
|
|||
int alloc, used;
|
||||
} estring;
|
||||
|
||||
typedef struct _eslist
|
||||
{
|
||||
void *payload;
|
||||
struct _eslist *next;
|
||||
} eslist;
|
||||
|
||||
int parse_line(char *, char **, char **, char **, char **);
|
||||
char *unit_size(char *size);
|
||||
|
||||
/*unsigned long now(long delay);*/
|
||||
void qsrt(void *a[], void *data, int lo, int hi,
|
||||
int (*compare) (const void *, const void *,
|
||||
const void *));
|
||||
int dlmulti(const char *name, const char *file, int flag, void **libr,
|
||||
const char *fmt, ...);
|
||||
|
||||
typedef void (*hash_walker) (char *key, void *value, void *data);
|
||||
|
||||
void *hash_table_new(void (*freekey), void (*freeval));
|
||||
void *hash_table_fetch(void *hashtable, char *key);
|
||||
int hash_table_insert(void *hashtable, char *key, void *value);
|
||||
int hash_table_replace(void *hashtable, char *key, void *value);
|
||||
int hash_table_remove(void *hashtable, char *key);
|
||||
int hash_table_dst(void *hashtable);
|
||||
int hash_table_walk(void *hashtable, hash_walker fun,
|
||||
void *data);
|
||||
|
||||
int eslist_free(eslist **);
|
||||
int eslist_next(eslist **);
|
||||
|
||||
#define ESLIST_NEXT(e) (e=e->next)
|
||||
void *eslist_payload(eslist **);
|
||||
|
||||
#define ESLIST_PAYLOAD(e) ((e)->payload)
|
||||
int eslist_prepend(eslist **, void *);
|
||||
int eslist_append(eslist **, void *);
|
||||
|
||||
estring *estring_new(int size);
|
||||
estring *estring_dst(estring * e);
|
||||
char *estring_disown(estring * e);
|
||||
char *estring_free(estring * e, int release_payload); /* glib compat */
|
||||
int estring_printf(estring * e, const char *fmt, ...);
|
||||
int estring_appendf(estring * e, const char *fmt, ...);
|
||||
int estring_truncate(estring * e, int size);
|
||||
|
||||
#define ESTRING_GET_CSTRING(a) ((a)->str)
|
||||
|
||||
int esprintf(char **result, const char *fmt, ...);
|
||||
int ejoin(char **result, const char *delim, ...);
|
||||
int ecat(char **result, ...);
|
||||
|
||||
unsigned long timeout_add(unsigned int f, int (*fun) (void *),
|
||||
void *data);
|
||||
int timeout_remove(unsigned long handle);
|
||||
|
|
Loading…
Reference in New Issue