X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=ftepp.c;h=6fb8c6f8caeb93fd5c8c158abd1c35932a00b18f;hb=3a4aba0b31427a6cbea08a959aedf12c2e69a893;hp=b07899a327e936ba45771ccb46c9f01b3940cc0b;hpb=dc8523c6503e014a463df42520b48f597c7655be;p=xonotic%2Fgmqcc.git diff --git a/ftepp.c b/ftepp.c old mode 100755 new mode 100644 index b07899a..6fb8c6f --- a/ftepp.c +++ b/ftepp.c @@ -22,6 +22,7 @@ * SOFTWARE. */ #include +#include #include "gmqcc.h" #include "lexer.h" @@ -174,6 +175,28 @@ char *ftepp_predef_randomlast(lex_file *context) { (void)context; return value; } +/* __TIMESTAMP__ */ +char *ftepp_predef_timestamp(lex_file *context) { + struct stat finfo; + char *find; + char *value; + size_t size; + if (stat(context->name, &finfo)) + return util_strdup("\"\""); + + /* + * ctime and its fucking annoying newline char, no worries, we're + * professionals here. + */ + find = ctime(&finfo.st_mtime); + value = (char*)mem_a(strlen(find) + 1); + memcpy(&value[1], find, (size = strlen(find)) - 1); + + value[0] = '"'; + value[size] = '"'; + + return value; +} const ftepp_predef_t ftepp_predefs[FTEPP_PREDEF_COUNT] = { { "__LINE__", &ftepp_predef_line }, @@ -183,7 +206,8 @@ const ftepp_predef_t ftepp_predefs[FTEPP_PREDEF_COUNT] = { { "__RANDOM__", &ftepp_predef_random }, { "__RANDOM_LAST__", &ftepp_predef_randomlast }, { "__DATE__", &ftepp_predef_date }, - { "__TIME__", &ftepp_predef_time } + { "__TIME__", &ftepp_predef_time }, + { "__TIME_STAMP__", &ftepp_predef_timestamp } }; #define ftepp_tokval(f) ((f)->lex->tok.value) @@ -1828,6 +1852,12 @@ ftepp_t *ftepp_create() ftepp_add_macro(ftepp, "__STD_VERSION_MINOR__", minor); ftepp_add_macro(ftepp, "__STD_VERSION_MAJOR__", major); + /* + * We're going to just make __NULL__ nil, which works for 60% of the + * cases of __NULL_ for fteqcc. + */ + ftepp_add_macro(ftepp, "__NULL__", "nil"); + return ftepp; }