setenv problems

Pawel Veselov pawel.veselov@gmail.com
Fri Sep 26 12:46:00 GMT 2008


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;
>> }
>>
>>
>>
>
>



-- 
With best of best regards
Pawel S. Veselov



More information about the Newlib mailing list