/* parse into a temporary file */ int wpp_parse_temp( const char *input, const char *output_base, char **output_name ) { FILE *output; int ret, fd; char *temp_name; if (!output_base || !output_base[0]) output_base = "wpptmp"; temp_name = pp_xmalloc( strlen(output_base) + 8 ); strcpy( temp_name, output_base ); strcat( temp_name, ".XXXXXX" ); if((fd = mkstemps( temp_name, 0 )) == -1) { fprintf(stderr, "Could not generate a temp name from %s\n", temp_name); exit(2); } if (!(output = fdopen(fd, "wt"))) { fprintf(stderr,"Could not open fd %s for writing\n", temp_name); exit(2); } *output_name = temp_name; ret = wpp_parse( input, output ); fclose( output ); return ret; }
/* add a define to the preprocessor list */ int wpp_add_define( const char *name, const char *value ) { struct define *def; if (!value) value = ""; for (def = cmdline_defines; def; def = def->next) { if (!strcmp( def->name, name )) { char *new_value = pp_xstrdup(value); if(!new_value) return 1; free( def->value ); def->value = new_value; return 0; } } def = pp_xmalloc( sizeof(*def) ); if(!def) return 1; def->next = cmdline_defines; def->name = pp_xstrdup(name); if(!def->name) { free(def); return 1; } def->value = pp_xstrdup(value); if(!def->value) { free(def->name); free(def); return 1; } cmdline_defines = def; return 0; }
/* add a define to the preprocessor list */ void wpp_add_define( const char *name, const char *value ) { struct define *def; if (!value) value = ""; for (def = cmdline_defines; def; def = def->next) { if (!strcmp( def->name, name )) { if (def->value) free( def->value ); def->value = pp_xstrdup(value); return; } } def = pp_xmalloc( sizeof(*def) ); def->next = cmdline_defines; def->name = pp_xstrdup(name); def->value = pp_xstrdup(value); cmdline_defines = def; }