| /* |
| # 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 ); |
| } |