This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: setenv problems


I just checked in a patch for the unsetenv issue. There should also have been a check
for name being NULL and empty.


-- Jeff J.

Pawel Veselov wrote:
Hi,

Ugh, Craig and I were discussing the patch offline, and he found two
problems in it, one to do with the fact that unsetenv shouldn't return
(-1) if the var is missing, and the other that getenv() would still
imporoperly return values in certain cases involving equal signs... I
guess another patch would be in order...

Thanks!
  Pawel.

On Wed, Sep 24, 2008 at 6:24 PM, Jeff Johnston <jjohnstn@redhat.com> wrote:
Pawel Veselov wrote:
Hi,

[ skipped ]


http://www.opengroup.org/onlinepubs/000095399/functions/setenv.html
says that setenv() should fail with EINVAL if name contains an equal
sign.

Ok, also considering the linux man pages state the same and the function
isn't specified by ANSI.  Would you like to try your hand at a patch?

[ skipped ]

Here is the patch, attached. Let me know if there are any
questions/comments.
Tested with this:


Thanks Pawel. Patch checked in.

-- Jeff J.
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

static char * _getenv(char *);

char * _getenv(char * var) {
   char * aux = getenv(var);
   if (aux) { return aux; }
   return "(NULL)";
}

int main(int argc, char ** argv) {
   printf("getenv('nada' = %s\n", getenv("nada"));
   printf("getenv('TMP') = %s\n", getenv("TMP"));
   printf("getenv('TMP=XA') = %s\n", getenv("TMP=XA"));
   printf("setenv('PAWEL','DATA') = %d\n", setenv("PAWEL", "DATA", 1));
   printf("getenv('PAWEL') = %s\n", getenv("PAWEL"));
   errno = 0;
   printf("setenv('PAWE=L', 'DATA') = %d\n", setenv("PAWE=L", "DATA", 1));
   fflush(stdout);
   perror("setenv()");
   printf("setenv('LOOK','=FEEL') = %d\n", setenv("LOOK", "=FEEL", 1));
   printf("unsetenv('PAWEL') = %d\n", unsetenv("PAWEL"));
   printf("getenv('LOOK') = %s\n", getenv("LOOK"));
   printf("getenv('PAWEL') = %s\n", getenv("PAWEL"));
   printf("setenv('LOOK', 'JAM', nod) = %d\n", setenv("LOOK", "JAM", 0));
   printf("getenv('LOOK') = %s\n", getenv("LOOK"));
   printf("setenv('LOOK', 'MONKEY', od) = %d\n", setenv("LOOK", "MONKEY",
1));
   printf("getenv('LOOK') = %s\n", getenv("LOOK"));

   errno = 0;
   printf("unsetenv('=') = %d\n", unsetenv("="));
   perror("unsetenv()");

   errno = 0;
   printf("unsetenv('KARA') = %d\n", unsetenv("KARA"));
   perror("unsetenv()");
   return 0;
}








Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]