Added cpp_define_get() to the API (may obsolete cpp_is_defined())
This commit is contained in:
parent
2478e42168
commit
d8a1e43a44
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
38
src/cpp.c
38
src/cpp.c
|
@ -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 */
|
||||
|
|
Loading…
Reference in New Issue
Block a user