Added cpp_define_get() to the API (may obsolete cpp_is_defined())

This commit is contained in:
Pierre Pronchery 2009-07-29 14:43:29 +00:00
parent 2478e42168
commit d8a1e43a44
3 changed files with 33 additions and 12 deletions

View File

@ -123,6 +123,7 @@ int cpp_is_defined(Cpp * cpp, char const * name);
/* useful */
int cpp_define_add(Cpp * cpp, char const * name, char const * value);
char const * cpp_define_get(Cpp * cpp, char const * name);
int cpp_define_remove(Cpp * cpp, char const * name);
int cpp_path_add(Cpp * cpp, char const * path);

View File

@ -23,11 +23,7 @@
/* types */
typedef struct _CppDefine /* FIXME use a hash table */
{
char * name;
char * value;
} CppDefine;
typedef struct _CppDefine CppDefine;
typedef enum _CppScope
{

View File

@ -28,6 +28,15 @@
/* Cpp */
/* private */
/* types */
struct _CppDefine /* FIXME use a hash table */
{
char * name;
char * value;
};
/* public */
/* functions */
/* cpp_new */
@ -107,7 +116,6 @@ int cpp_is_defined(Cpp * cpp, char const * name)
/* useful */
/* cpp_define_add */
int cpp_define_add(Cpp * cpp, char const * name, char const * value)
/* FIXME should verify validity of name and interpret value */
{
size_t i;
CppDefine * p;
@ -116,6 +124,10 @@ int cpp_define_add(Cpp * cpp, char const * name, char const * value)
fprintf(stderr, "DEBUG: %s(cpp, \"%s\", \"%s\")\n", __func__, name,
value);
#endif
if(name == NULL || name[0] == '\0')
return error_set_code(1, "%s", strerror(EINVAL));
if(value == NULL)
value = "";
for(i = 0; i < cpp->defines_cnt; i++)
if(strcmp(cpp->defines[i].name, name) == 0)
break;
@ -126,19 +138,31 @@ int cpp_define_add(Cpp * cpp, char const * name, char const * value)
return error_set_code(1, "%s", strerror(errno));
cpp->defines = p;
p = &p[cpp->defines_cnt];
p->name = strdup(name);
p->value = (value != NULL) ? strdup(value) : NULL;
if(p->name == NULL || (value != NULL && p->value == NULL))
p->name = string_new(name);
p->value = string_new(value);
if(p->name == NULL || p->value == NULL)
{
free(p->name);
free(p->value);
return error_set_code(1, "%s", strerror(errno));
string_delete(p->name);
string_delete(p->value);
return 1;
}
cpp->defines_cnt++;
return 0;
}
/* cpp_define_get */
char const * cpp_define_get(Cpp * cpp, char const * name)
{
size_t i;
for(i = 0; i < cpp->defines_cnt; i++)
if(strcmp(cpp->defines[i].name, name) == 0)
return cpp->defines[i].value;
return NULL;
}
/* cpp_define_remove */
int cpp_define_remove(Cpp * cpp, char const * name)
/* FIXME should verify validity of name */