From 1a42d65a632a0f6b743695b3de29c9c676bf4c3a Mon Sep 17 00:00:00 2001 From: meep-eep Date: Tue, 23 Nov 2004 23:53:15 +0000 Subject: [PATCH] Some fixes, enhancements for environment handling. git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@1424 8092fc87-c524-0410-9efc-e669fe64eaf9 --- sc2/build/unix/build.config | 3 ++- sc2/src/config_unix.h.in | 7 ++++-- sc2/src/msvc++/config.h | 9 +++++--- sc2/src/port.c | 39 ++++++++++++++++++++++++++++++++ sc2/src/port.h | 6 +++++ sc2/src/sc2code/libs/file/dirs.c | 12 ++++++---- 6 files changed, 66 insertions(+), 10 deletions(-) diff --git a/sc2/build/unix/build.config b/sc2/build/unix/build.config index 0d05097c8..e44f9b14c 100644 --- a/sc2/build/unix/build.config +++ b/sc2/build/unix/build.config @@ -37,7 +37,8 @@ uqm_requirements() have_library vorbisfile || exit 1 - # Add defines for HAVE_STRUPR and STRICMP + # Add defines for HAVE_SETENV, HAVE_STRUPR and HAVE_STRICMP + define_have_symbol setenv define_have_symbol strupr define_have_symbol stricmp diff --git a/sc2/src/config_unix.h.in b/sc2/src/config_unix.h.in index 5dde0cd29..d37f662f9 100644 --- a/sc2/src/config_unix.h.in +++ b/sc2/src/config_unix.h.in @@ -18,14 +18,17 @@ #define CONFIGDIR USERDIR /* Directory where supermelee teams will be stored */ -#define MELEEDIR "${UQM_CONFIG_DIR}/teams/" +#define MELEEDIR "${UQM_CONFIG_DIR}teams/" /* Directory where save games will be stored */ -#define SAVEDIR "${UQM_CONFIG_DIR}/save/" +#define SAVEDIR "${UQM_CONFIG_DIR}save/" /* Defined if words are stored with the most significant byte first */ @WORDS_BIGENDIAN@ +/* Defined if your system has setenv of its own */ +@HAVE_SETENV@ + /* Defined if your system has strupr of its own */ @HAVE_STRUPR@ diff --git a/sc2/src/msvc++/config.h b/sc2/src/msvc++/config.h index 5e03f7082..98f2223db 100644 --- a/sc2/src/msvc++/config.h +++ b/sc2/src/msvc++/config.h @@ -9,7 +9,7 @@ #define _CONFIG_H /* Directory where the UQM game data is located */ -#define CONTENTDIR "../content" +#define CONTENTDIR "../content/" /* Directory where game data will be stored */ //#define USERDIR "../userdata/" @@ -19,14 +19,17 @@ #define CONFIGDIR USERDIR /* Directory where supermelee teams will be stored */ -#define MELEEDIR "%UQM_CONFIG_DIR%/teams/" +#define MELEEDIR "%UQM_CONFIG_DIR%teams/" /* Directory where save games will be stored */ -#define SAVEDIR "%UQM_CONFIG_DIR%/save/" +#define SAVEDIR "%UQM_CONFIG_DIR%save/" /* Define if words are stored with the most significant byte first */ #undef WORDS_BIGENDIAN +/* Defined if your system has setenv of its own */ +#define HAVE_SETENV + /* Defined if your system has strupr of its own */ #define HAVE_STRUPR diff --git a/sc2/src/port.c b/sc2/src/port.c index 10ab46546..622b96b69 100644 --- a/sc2/src/port.c +++ b/sc2/src/port.c @@ -22,6 +22,7 @@ #include #include +#include #include "port.h" #ifndef HAVE_STRUPR @@ -40,3 +41,41 @@ strupr (char *str) } #endif +#ifndef HAVE_SETENV +int +setenv (const char *name, const char *value, int overwrite) +{ + char *string, *ptr; + size_t nameLen, valueLen; + + if (!overwrite) + { + char *old; + + old = getenv (name); + if (old != NULL) + return 0; + } + + nameLen = strlen (name); + valueLen = strlen (value); + + string = malloc (nameLen + valueLen + 2); + // "NAME=VALUE\0" + // putenv() does NOT make a copy, but uses the string passed. + + ptr = string; + + strcpy (string, name); + ptr += nameLen; + + *ptr = '='; + ptr++; + + strcpy (ptr, value); + + return putenv (string); +} +#endif + + diff --git a/sc2/src/port.h b/sc2/src/port.h index c61f5f306..d203994a5 100644 --- a/sc2/src/port.h +++ b/sc2/src/port.h @@ -98,5 +98,11 @@ typedef unsigned short mode_t; #define snprintf _snprintf #endif +// setenv() +#ifndef HAVE_SETENV +int setenv (const char *name, const char *value, int overwrite); +#endif + #endif /* _PORT_H */ + diff --git a/sc2/src/sc2code/libs/file/dirs.c b/sc2/src/sc2code/libs/file/dirs.c index b5f85b764..982268ce0 100644 --- a/sc2/src/sc2code/libs/file/dirs.c +++ b/sc2/src/sc2code/libs/file/dirs.c @@ -335,10 +335,14 @@ expandPath (char *dest, size_t len, const char *src, int what) envVar = getenv (envName); HFree (envName); - envVarLen = strlen (envVar); - CHECKLEN (buf, envVarLen); - memcpy (bufptr, envVar, envVarLen); - bufptr += envVarLen; + if (envVar != NULL) + { + envVarLen = strlen (envVar); + CHECKLEN (buf, envVarLen); + memcpy (bufptr, envVar, envVarLen); + bufptr += envVarLen; + } + src = end; break; }