VirtualBox

Changeset 2699 in kBuild for trunk/src/kmk


Ignore:
Timestamp:
Sep 20, 2013 12:33:20 AM (11 years ago)
Author:
bird
Message:

kmk_redirect: Cross platform environment variable unsetting.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kmk/kmkbuiltin/redirect.c

    r2684 r2699  
    311311                else
    312312#endif /* __OS2__ */
    313                 if (putenv(psz))
    314                 {
    315                     fprintf(pStdErr, "%s: error: putenv(\"%s\"): %s\n", name(argv[0]), psz, strerror(errno));
    316                     return 1;
     313                {
     314                    const char *pchEqual = strchr(psz, '=');
     315                    if (pchEqual && pchEqual[1] != '\0')
     316                    {
     317                        if (putenv(psz))
     318                        {
     319                            fprintf(pStdErr, "%s: error: putenv(\"%s\"): %s\n", name(argv[0]), psz, strerror(errno));
     320                            return 1;
     321                        }
     322                    }
     323                    else
     324                    {
     325                        size_t cchVar = pchEqual ? (size_t)(pchEqual - psz) : strlen(psz);
     326                        char *pszCopy = (char *)malloc(cchVar + 2);
     327                        memcpy(pszCopy, psz, cchVar);
     328
     329#if defined(_MSC_VER) || defined(__OS2__)
     330                        pszCopy[cchVar] = '=';
     331                        pszCopy[cchVar + 1] = '\0';
     332                        if (putenv(pszCopy))
     333                        {
     334                            fprintf(pStdErr, "%s: error: putenv(\"%s\"): %s\n", name(argv[0]), pszCopy, strerror(errno));
     335                            return 1;
     336                        }
     337#else
     338                        pszCopy[cchVar] = '\0';
     339                        if (unsetenv(pszCopy))
     340                        {
     341                            fprintf(pStdErr, "%s: error: unsetenv(\"%s\"): %s\n", name(argv[0]), pszCopy, strerror(errno));
     342                            return 1;
     343                        }
     344#endif
     345                        free(pszCopy);
     346                    }
    317347                }
    318348                continue;
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette