123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- /* $Xorg: misc.c,v 1.4 2001/02/09 02:06:01 xorgcvs Exp $ */
- /******************************************************************************
- Copyright 1993, 1998 The Open Group
- Permission to use, copy, modify, distribute, and sell this software and its
- documentation for any purpose is hereby granted without fee, provided that
- the above copyright notice appear in all copies and that both that
- copyright notice and this permission notice appear in supporting
- documentation.
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- Except as contained in this notice, the name of The Open Group shall not be
- used in advertising or otherwise to promote the sale, use or other dealings
- in this Software without prior written authorization from The Open Group.
- ******************************************************************************/
- /* $XFree86: xc/programs/xsm/misc.c,v 1.5 2001/07/25 15:05:29 dawes Exp $ */
- #include "xsm.h"
- #ifndef HAVE_PUTENV
- /*
- * define our own putenv() if the system doesn't have one.
- * putenv(s): place s (a string of the form "NAME=value") in
- * the environment; replacing any existing NAME. s is placed in
- * environment, so if you change s, the environment changes (like
- * putenv on a sun). Binding removed if you putenv something else
- * called NAME.
- */
- int
- putenv(char *s)
- {
- char *v;
- int varlen, idx;
- char **newenv;
- static int virgin = 1; /* true while "environ" is a virgin */
- v = strchr(s, '=');
- if(v == 0)
- return 0; /* punt if it's not of the right form */
- varlen = (v + 1) - s;
- for (idx = 0; environ[idx] != 0; idx++) {
- if (strncmp(environ[idx], s, varlen) == 0) {
- if(v[1] != 0) { /* true if there's a value */
- environ[idx] = s;
- return 0;
- } else {
- do {
- environ[idx] = environ[idx+1];
- } while(environ[++idx] != 0);
- return 0;
- }
- }
- }
-
- /* add to environment (unless no value; then just return) */
- if(v[1] == 0)
- return 0;
- if(virgin) {
- register i;
- newenv = (char **) XtMalloc((unsigned) ((idx + 2) * sizeof(char*)));
- if(newenv == 0)
- return -1;
- for(i = idx-1; i >= 0; --i)
- newenv[i] = environ[i];
- virgin = 0; /* you're not a virgin anymore, sweety */
- } else {
- newenv = (char **) realloc((char *) environ,
- (unsigned) ((idx + 2) * sizeof(char*)));
- if (newenv == 0)
- return -1;
- }
- environ = newenv;
- environ[idx] = s;
- environ[idx+1] = 0;
-
- return 0;
- }
- #endif /* NOPUTENV */
- int
- strbw(const char *a, const char *b)
- {
- return !strncmp (a, b, strlen (b));
- }
- #if defined(sun) && defined(SVR4)
- #include <sys/wait.h>
- int
- System(char *s)
- {
- int pid, status;
- if ((pid = fork ()) == 0) {
- (void) setpgrp();
- execl ("/bin/sh", "sh", "-c", s, NULL);
- } else
- waitpid (pid, &status, 0);
- return status;
- }
- #endif
- void
- nomem(void)
- {
- fprintf (stderr, "Insufficient memory.\n");
- exit (255);
- }
|