diff options
-rw-r--r-- | src/ChangeLog | 7 | ||||
-rw-r--r-- | src/driver/Makefile.in | 6 | ||||
-rw-r--r-- | src/driver/main.c | 15 | ||||
-rw-r--r-- | src/include/cfuns.h | 1 | ||||
-rw-r--r-- | src/lib/cfuns-c.c | 19 |
5 files changed, 33 insertions, 15 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index 4addb0d3..4d4e1d51 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,10 @@ +2009-09-29 Gabriel Dos Reis <gdr@cse.tamu.edu> + + * driver/Makefile.in (open-axiom): Link against core runtime. + * driver/main.c (publish_systemdir): Rework. + * include/cfuns.h (oa_setenv): Declare. + * lib/cfuns-c.c (oa_setenv): Define. + 2009-09-29 Gabriel Dos Reis <gdr@cs.tamu.edu> * algebra/xpoly.spad.pamphlet (OrderedFreeMonoid): Really make an diff --git a/src/driver/Makefile.in b/src/driver/Makefile.in index f64cfab0..0141482e 100644 --- a/src/driver/Makefile.in +++ b/src/driver/Makefile.in @@ -1,4 +1,4 @@ -# Copyright (C) 2007-2008, Gabriel Dos Reis. +# Copyright (C) 2007-2009, Gabriel Dos Reis. # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -36,6 +36,8 @@ open_axiom_SOURCES = main.c utils.c open_axiom_objects = $(open_axiom_SOURCES:.c=.lo) +open_axiom_LDADD = -L$(axiom_target_libdir) $(oa_c_libs) + .PHONY: all all-ax all-driver all: all-ax @@ -59,7 +61,7 @@ utils.lo: utils.h main.lo: utils.h open-axiom$(EXEEXT): $(open_axiom_objects) - $(LINK) -o $@ $(open_axiom_objects) + $(LINK) -o $@ $(open_axiom_objects) $(open_axiom_LDADD) mostlyclean-local: @rm -f $(axiom_objects) diff --git a/src/driver/main.c b/src/driver/main.c index eb0a3dcb..14762979 100644 --- a/src/driver/main.c +++ b/src/driver/main.c @@ -51,21 +51,10 @@ static void publish_systemdir(const char* dir) { -#ifdef __WIN32__ - if (SetEnvironmentVariable(OPENAXIOM_GLOBAL_ENV, dir) == 0) { - perror("SetEnvironmentVariable"); + if (!oa_setenv(OPENAXIOM_GLOBAL_ENV, dir)) { + perror("publish_systemdir"); abort(); } -#else /* __WIN32__ */ - const int env_length = sizeof (OPENAXIOM_GLOBAL_ENV) - + 1 /* room for '=' */ - + strlen(dir); - char* env = (char*) malloc (env_length); - strcpy(env, OPENAXIOM_GLOBAL_ENV); - env[sizeof OPENAXIOM_GLOBAL_ENV - 1] = '='; - strcpy(env + sizeof(OPENAXIOM_GLOBAL_ENV), dir); - if (putenv(env) != 0) abort(); -#endif /* __WIN32__ */ } diff --git a/src/include/cfuns.h b/src/include/cfuns.h index 46f4cad5..4c84a6c0 100644 --- a/src/include/cfuns.h +++ b/src/include/cfuns.h @@ -55,6 +55,7 @@ OPENAXIOM_EXPORT int oa_rename(const char*, const char*); OPENAXIOM_EXPORT int oa_mkdir(const char*); OPENAXIOM_EXPORT int oa_system(const char*); OPENAXIOM_EXPORT char* oa_getenv(const char*); +OPENAXIOM_EXPORT int oa_setenv(const char*, const char*); OPENAXIOM_EXPORT int oa_getpid(void); OPENAXIOM_EXPORT char* oa_getcwd(void); OPENAXIOM_EXPORT int oa_access_file_for_read(const char*); diff --git a/src/lib/cfuns-c.c b/src/lib/cfuns-c.c index 63758092..7562874a 100644 --- a/src/lib/cfuns-c.c +++ b/src/lib/cfuns-c.c @@ -552,6 +552,25 @@ oa_getenv(const char* var) #endif } +/* Set the value of environment variable VAR to VAL. + Return 1 on success, and 0 otherwise. */ +OPENAXIOM_EXPORT int +oa_setenv(const char* var, const char* val) +{ +#ifdef __WIN32__ + return SetEnvironmentVariable(var, val); +#else + const int var_length = strlen(var); + const int val_length = strlen(val); + char* str = (char*) malloc(var_length + 1 + val_length + 1); + strcpy(str, var); + str[var_length] = '='; + strcpy(str + var_length + 1, val); + str[var_length + 1 + val_length] = '\0'; + return !putenv(str); +#endif +} + OPENAXIOM_EXPORT char* oa_getcwd(void) |