diff --git a/README.cygwin b/README.cygwin index c09eeaba6a52..99d0a4f5983b 100644 --- a/README.cygwin +++ b/README.cygwin @@ -401,8 +401,9 @@ Win9x can not rename() an open file (although WinNT can). The Cygwin chroot() implementation has holes (it can not restrict file access by native Win32 programs). -Inplace editing ( perl -i ) of files doesn't work without doing a backup -of the file being edited ( perl -i.bak ). +Inplace editing C of files doesn't work without doing a backup +of the file being edited C because of windowish restrictions, +so Perl does this automagically if you just use C. =back diff --git a/doio.c b/doio.c index e209cf298138..95ae169b48fe 100644 --- a/doio.c +++ b/doio.c @@ -790,7 +790,7 @@ Perl_nextargv(pTHX_ register GV *gv) #endif } else { -#if !defined(DOSISH) && !defined(AMIGAOS) && !defined(__CYGWIN__) +#if !defined(DOSISH) && !defined(AMIGAOS) # ifndef VMS /* Don't delete; use automatic file versioning */ if (UNLINK(PL_oldname) < 0) { if (ckWARN_d(WARN_INPLACE)) diff --git a/perl.c b/perl.c index 90b227eafb46..2354ce5eb375 100644 --- a/perl.c +++ b/perl.c @@ -2363,6 +2363,12 @@ Perl_moreswitches(pTHX_ char *s) case 'i': if (PL_inplace) Safefree(PL_inplace); +#if defined(__CYGWIN__) /* do backup extension automagically */ + if (*(s+1) == '\0') { + PL_inplace = savepv(".bak"); + return s+1; + } +#endif /* __CYGWIN__ */ PL_inplace = savepv(s+1); /*SUPPRESS 530*/ for (s = PL_inplace; *s && !isSPACE(*s); s++) ;