mirror of https://github.com/python/cpython
105 lines
3.2 KiB
C
105 lines
3.2 KiB
C
|
/*
|
||
|
# 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 );
|
||
|
}
|