# New Ticket Created by  Kay-Uwe Huell 
# Please include the string:  [perl #41320]
# in the subject line of all future correspondence about this issue. 
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=41320 >


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi parrot-team,

needed rename() function, which I have implemented in os.pmc (POSIX
only). Attached you will find the patch.

Regards,

Kiwi

diffstat:
 src/pmc/os.pmc |   24 ++++++++++++++++++++++++
 t/pmc/os.t     |   24 ++++++++++++++++++++++--
 2 files changed, 46 insertions(+), 2 deletions(-)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.3 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFFtc6MHSiAp6bcIcgRAi+WAKC8w//gH+9LEqW4gjniVSswzv6oYACdHxw0
YGmA42xPlHWef6wOIJY5Y4M=
=zep0
-----END PGP SIGNATURE-----
Index: src/pmc/os.pmc
===================================================================
--- src/pmc/os.pmc	(Revision 16765)
+++ src/pmc/os.pmc	(Arbeitskopie)
@@ -485,8 +485,32 @@
         return NULL;
 #endif
     }
+/*
+=item C<rename(STRING* oldpath, STRING* newpath)>
 
+This method is a wrapper for rename(2). On error a SystemError exception is
+thrown.
 
+=cut
+*/
+    METHOD void rename(STRING* oldpath, STRING* newpath) {
+#ifndef WIN32
+        char *coldpath = string_to_cstring(interp, oldpath) ;
+        char *cnewpath = string_to_cstring(interp, newpath) ;
+        int ret ;
+
+        ret = rename(coldpath, cnewpath) ;
+        if (ret < 0)
+        {
+            char *errmsg = strerror(errno) ;
+            real_exception(interp, NULL, E_SystemError, errmsg) ;
+        }
+#else
+        real_exception(interp, NULL, E_NotImplementedError,
+                "Win32 is not POSIX. Need win32 developer!");
+#endif
+    }
+
 }
 /*
 
Index: t/pmc/os.t
===================================================================
--- t/pmc/os.t	(Revision 16765)
+++ t/pmc/os.t	(Arbeitskopie)
@@ -6,7 +6,7 @@
 use warnings;
 use lib qw( . lib ../lib ../../lib );
 use Test::More;
-use Parrot::Test tests => 14;
+use Parrot::Test tests => 15;
 use Parrot::Config;
 use Cwd;
 use File::Spec;
@@ -194,7 +194,7 @@
 
 # test readdir
 SKIP: {
-    skip 'broken on windows', 1 if ($MSWin32);
+    skip 'not implemented on windows yet', 1 if ($MSWin32);
 
     opendir IN, '.';
     my @entries = readdir IN;
@@ -212,6 +212,26 @@
 CODE
 }
 
+# test rename
+SKIP: {
+    skip 'not implemented on windows yet', 1 if ($MSWin32);
+
+    `touch ____some_test_file` ;
+
+    pir_output_is( <<'CODE', <<"OUT", 'Test OS.rename' );
+.sub main :main
+    $P1 = new .OS
+    $P1.rename('____some_test_file', '___some_other_file')
+    $I0 = stat '___some_other_file', 0
+    print $I0
+    print "\n"
+    $P1.rm('___some_other_file')
+.end
+CODE
+1
+OUT
+}
+
 # test lstat
 
 my $lstat;

Attachment: pmc_os_rename.patch.sig
Description: Binary data

Reply via email to