X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=mg.c;h=eb5888605f8243e1fdf2a91ff87116c60a5bc6d9;hb=64f14228217abb04a437553319642d6e7a82a3e8;hp=3d1e1ee16bf0fc397ce56c80e571987a0893f445;hpb=66b1d5575fd5eb6242bac2e9a08b163be8b1b960;p=p5sagit%2Fp5-mst-13.2.git diff --git a/mg.c b/mg.c index 3d1e1ee..eb58886 100644 --- a/mg.c +++ b/mg.c @@ -591,7 +591,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) { @@ -639,7 +639,7 @@ MAGIC* mg; } } } -#endif /* neither OS2 nor AMIGAOS nor _WIN32 */ +#endif /* neither OS2 nor AMIGAOS nor WIN32 */ return 0; } @@ -654,10 +654,29 @@ MAGIC* mg; } int -magic_clear_all_env() +magic_clear_all_env(sv,mg) +SV* sv; +MAGIC* mg; { -#if defined(VMS) || defined(WIN32) - DIE("'%ENV = @list;' is not implemented on this machine"); +#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; @@ -668,8 +687,9 @@ magic_clear_all_env() Safefree(environ[i]); environ[0] = Nullch; - return 0; #endif +#endif + return 0; } int @@ -1216,7 +1236,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;