diff options
Diffstat (limited to 'Modules/environment.c')
-rw-r--r-- | Modules/environment.c | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/Modules/environment.c b/Modules/environment.c new file mode 100644 index 0000000000..977e9172f4 --- /dev/null +++ b/Modules/environment.c @@ -0,0 +1,104 @@ +/* +# Copyright 1995, InfoSeek Corporation +# All rights reserved. +# Written by Andy Bensky +# +# Permission to use, copy, modify, and distribute this Python software +# and its associated documentation for any purpose (subject to the +# restriction in the following sentence) without fee is hereby granted, +# provided that the above copyright notice appears in all copies, and +# that both that copyright notice and this permission notice appear in +# supporting documentation, and that the name of InfoSeek not be used in +# advertising or publicity pertaining to distribution of the software +# without specific, prior written permission. This permission is +# explicitly restricted to the copying and modification of the software +# to remain in Python, compiled Python, or other languages (such as C) +# wherein the modified or derived code is exclusively imported into a +# Python module. +# +# INFOSEEK CORPORATION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS +# SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +# FITNESS. IN NO EVENT SHALL INFOSEEK CORPORATION BE LIABLE FOR ANY +# DIRECT, SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN +# AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING +# OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE, +# EVEN IF INFOSEEK SHALL HAVE BEEN MADE AWARE OF THE POSSIBILITY OF SUCH +# DAMAGES. +*/ + +/* Hooks to call the Unix putenv() to modify the environment +*/ + +#include "allobjects.h" +#include <stdlib.h> +#include <assert.h> +#include <string.h> + +/* Error conditions that can be raised */ + +/* Headers for functions accessible from Python as module methods */ +static object *put_environ( object *self, object *args ); + +static struct methodlist environ_methods[] = { + {"putenv", put_environ}, + {NULL, NULL} +}; + + +/* + * Name: initenvironment + * Description: + * Initialzation function that Python will use to establish callbacks to + * the methods of this module. + * + * Returns: + * void - + * + * Notes: + */ +void initenvironment() +{ + object *m, *d; + + m = initmodule("environment", environ_methods); + d = getmoduledict(m); +} + +/* + * Name: put_environ + * Description: + * accepts 2 string objects as arguments and forms a string of the + * form string1=string2 that can be passed to the putenv() system call. + * + * Returns: + * None object if successfull, otherwise raises a SystemError exception + * + * + * Notes: + */ +static object *put_environ( object *self, object *args ) +{ + char *string1, *string2; + char *set_str; + object *return_object = None; + + if (args && getargs(args, "(ss)", &string1, &string2)) + { + set_str = malloc(strlen(string1) + strlen(string2) + 2); + assert( set_str ); + (void) sprintf(set_str, "%s=%s", string1, string2); + if ( putenv( set_str ) ) + { + err_setstr(SystemError, "Error in system putenv call."); + return_object = 0; + } + } + else + { + err_setstr(TypeError, "Usage: putenv(string1, string2)"); + return_object = 0; + } + + return( return_object ); +} |