diff options
author | Malcolm Beattie <mbeattie@sable.ox.ac.uk> | 1997-09-30 15:11:07 +0000 |
---|---|---|
committer | Malcolm Beattie <mbeattie@sable.ox.ac.uk> | 1997-09-30 15:11:07 +0000 |
commit | 8206a063cdc1c193b12df1a45cb3a0ee430b5077 (patch) | |
tree | 45fb29ee11703ddeadeb8fa6d9673bc12d51394b /mg.c | |
parent | 2ddcc7aa6c936ba8e7a9703319dfd8959bb54574 (diff) | |
parent | 3e3baf6d63945cb64e829d6e5c70a7d00f3d3d03 (diff) | |
download | perl-8206a063cdc1c193b12df1a45cb3a0ee430b5077.tar.gz |
Merge maint-5.004 branch (5.004_01) with mainline.
p4raw-id: //depot/perl@84
Diffstat (limited to 'mg.c')
-rw-r--r-- | mg.c | 47 |
1 files changed, 43 insertions, 4 deletions
@@ -594,7 +594,7 @@ MAGIC* mg; } #endif -#if !defined(OS2) && !defined(AMIGAOS) && !defined(_WIN32) +#if !defined(OS2) && !defined(AMIGAOS) && !defined(WIN32) /* And you'll never guess what the dog had */ /* in its mouth... */ if (tainting) { @@ -642,7 +642,7 @@ MAGIC* mg; } } } -#endif /* neither OS2 nor AMIGAOS nor _WIN32 */ +#endif /* neither OS2 nor AMIGAOS nor WIN32 */ return 0; } @@ -657,6 +657,45 @@ MAGIC* mg; } int +magic_clear_all_env(sv,mg) +SV* sv; +MAGIC* mg; +{ +#if defined(VMS) + die("Can't make list assignment to %%ENV on this system"); +#else +#ifdef WIN32 + char *envv = GetEnvironmentStrings(); + char *cur = envv; + STRLEN len; + while (*cur) { + char *end = strchr(cur,'='); + if (end && end != cur) { + *end = '\0'; + my_setenv(cur,Nullch); + *end = '='; + cur += strlen(end+1)+1; + } + else if ((len = strlen(cur))) + cur += len+1; + } + FreeEnvironmentStrings(envv); +#else + I32 i; + + if (environ == origenviron) + New(901, environ, 1, char*); + else + for (i = 0; environ[i]; i++) + Safefree(environ[i]); + environ[0] = Nullch; + +#endif +#endif + return 0; +} + +int magic_getsig(sv,mg) SV* sv; MAGIC* mg; @@ -1213,7 +1252,7 @@ SV* sv; croak(no_aelem, (I32)LvTARGOFF(sv)); } } - SvREFCNT_inc(value); + (void)SvREFCNT_inc(value); SvREFCNT_dec(LvTARG(sv)); LvTARG(sv) = value; LvTARGLEN(sv) = 0; @@ -1591,7 +1630,7 @@ MAGIC* mg; } /* can grab env area too? */ if (origenviron && origenviron[0] == s + 1) { - my_setenv("NoNeSuCh", Nullch); + my_setenv("NoNe SuCh", Nullch); /* force copy of environment */ for (i = 0; origenviron[i]; i++) if (origenviron[i] == s + 1) |