From 278effd7ea616cf97f7be0431c3dbd5e58ae06b2 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 19 May 2010 21:31:39 +0000 Subject: [PATCH] Solaris 9 doesn't have setenv and unsetenv so add compat versions, based on code from Dagobert Michelsen. --- compat.h | 14 ++++++++++---- compat/setenv.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ configure | 12 ++++++++++-- 3 files changed, 69 insertions(+), 6 deletions(-) create mode 100644 compat/setenv.c diff --git a/compat.h b/compat.h index fb02c50e..dd18840a 100644 --- a/compat.h +++ b/compat.h @@ -1,4 +1,4 @@ -/* $Id: compat.h,v 1.20 2009-11-08 22:51:34 tcunha Exp $ */ +/* $Id: compat.h,v 1.21 2010-05-19 21:31:37 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -175,13 +175,19 @@ pid_t forkpty(int *, char *, struct termios *, struct winsize *); #ifndef HAVE_ASPRINTF /* asprintf.c */ -int asprintf(char **, const char *, ...); -int vasprintf(char **, const char *, va_list); +int asprintf(char **, const char *, ...); +int vasprintf(char **, const char *, va_list); #endif #ifndef HAVE_FGETLN /* fgetln.c */ -char *fgetln(FILE *, size_t *); +char *fgetln(FILE *, size_t *); +#endif + +#ifndef HAVE_SETENV +/* setenv.c */ +int setenv(char *, char *, int); +int unsetenv(char *); #endif #ifndef HAVE_GETOPT diff --git a/compat/setenv.c b/compat/setenv.c new file mode 100644 index 00000000..d7ff4d59 --- /dev/null +++ b/compat/setenv.c @@ -0,0 +1,49 @@ +/* $Id: setenv.c,v 1.1 2010-05-19 21:31:39 nicm Exp $ */ + +/* + * Copyright (c) 2010 Dagobert Michelsen + * Copyright (c) 2010 Nicholas Marriott + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF MIND, 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. + */ + +#include +#include + +#include "tmux.h" + +int +setenv(const char *name, const char *value, unused int overwrite) +{ + char buf[1024]; + + snprintf(buf, sizeof(buf), "%s=%s", name, value); + return (putenv(buf)); +} + +int +unsetenv(const char *name) +{ + char **envptr; + int namelen; + + namelen = strlen(name); + for (envptr = environ; *envptr != NULL; envptr++) { + if (strncmp(name, *envptr, namelen) == 0 && + ((*envptr)[namelen] == '=' || (*envptr)[namelen] == '\0')) + break; + } + for (; *envptr != NULL; envptr++) + *envptr = *(envptr + 1); + return (0); +} diff --git a/configure b/configure index 68436797..67f30873 100755 --- a/configure +++ b/configure @@ -1,5 +1,5 @@ #!/bin/sh -# $Id: configure,v 1.50 2010-04-23 07:29:39 nicm Exp $ +# $Id: configure,v 1.51 2010-05-19 21:31:38 nicm Exp $ # # Copyright (c) 2009 Nicholas Marriott # @@ -70,6 +70,7 @@ case $TMUX_PLATFORM in #define HAVE_PATHS_H #define HAVE_PROGNAME #define HAVE_QUEUE_H +#define HAVE_SETENV #define HAVE_SETPROCTITLE #define HAVE_STRCASESTR #define HAVE_STRLCAT @@ -98,6 +99,7 @@ EOF #define HAVE_PATHS_H #define HAVE_PROGNAME #define HAVE_PTY_H +#define HAVE_SETENV #define HAVE_STRCASESTR #define HAVE_STRSEP #define HAVE_U_INT @@ -122,6 +124,7 @@ EOF cat <>$CONFIG_H #define HAVE_BZERO #define HAVE_DAEMON +#define HAVE_SETENV EOF cat <>$CONFIG_MK LIBS+= -lcurses -levent @@ -158,13 +161,15 @@ SRCS+= osdep-sunos.c \ compat/fgetln.c \ compat/forkpty-sunos.c \ compat/getopt.c \ + compat/setenv.c \ compat/strcasestr.c \ compat/strsep.c \ compat/strtonum.c \ compat/vis.c \ compat/unvis.c \ compat/imsg-buffer.c \ - compat/imsg.c + compat/imsg.c \ + compat/setenv.c EOF ;; # ------------------------------------------------------------------------------ @@ -181,6 +186,7 @@ EOF #define HAVE_GETOPT #define HAVE_PATHS_H #define HAVE_PROGNAME +#define HAVE_SETENV #define HAVE_STRCASESTR #define HAVE_STRLCAT #define HAVE_STRLCPY @@ -213,6 +219,7 @@ EOF #define HAVE_LIBUTIL_H #define HAVE_PATHS_H #define HAVE_PROGNAME +#define HAVE_SETENV #define HAVE_SETPROCTITLE #define HAVE_STRCASESTR #define HAVE_STRLCAT @@ -242,6 +249,7 @@ EOF #define HAVE_PATHS_H #define HAVE_PROGNAME #define HAVE_SETPROCTITLE +#define HAVE_SETENV #define HAVE_STRCASESTR #define HAVE_STRLCAT #define HAVE_STRLCPY