# New Ticket Created by Mike Mattie # Please include the string: [perl #41889] # in the subject line of all future correspondence about this issue. # <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=41889 >
Hello,
While mucking around in src/library.c I noticed some cut & paste duplication.
It looked like a fairly simple hoist
so I have attached the changes I made.
I do not have a win32 platform available for testing so I haven't been able to
compile test it.
while ( (cnv = strchr(path->strstart, '/')) )
*cnv = '\\';
this looks totally broken. unless path->strstart is a stateful iterator this
will only
convert the first instance of a '/' character.
I think it should look like this:
cnv = path->strstart;
while ( (cnv = strchr(cnv, '/')) ) {
*cnv = '\\';
++cnv;
}
I am not sure though because I can't imagine how parrot would pass any part of
the win32 test suite with
this kind of a bug.
Note that the version I considered broken is in the patch. If I am wrong about
the bug then the
hoisted code doesn't have to be reverted to the old form.
Cheers,
Mike Mattie ([EMAIL PROTECTED])
diff -U3 -aur parrot-0.4.9/src/library.c parrot-0.4.9.mine/src/library.c
--- parrot-0.4.9/src/library.c 2007-02-22 05:40:37.000000000 -0800
+++ parrot-0.4.9.mine/src/library.c 2007-03-18 03:59:29.000000000 -0700
@@ -160,6 +160,23 @@
return 0;
}
+
+#ifdef WIN32
+
+static void
+cnv_to_win32_filesep ( STRING *path ) {
+
+ assert(path->encoding == Parrot_fixed_8_encoding_ptr ||
+ path->encoding == Parrot_utf8_encoding_ptr);
+
+ char* cnv;
+
+ while ( (cnv = strchr(path->strstart, '/')) )
+ *cnv = '\\';
+}
+
+#endif
+
/*
=item C<char* Parrot_locate_runtime_file(Interp *, const char *file_name,
@@ -235,15 +252,11 @@
full_name = string_append(interp, full_name, nul);
full_name->bufused--;
full_name->strlen--;
+
#ifdef WIN32
- {
- char *p;
- assert(full_name->encoding == Parrot_fixed_8_encoding_ptr ||
- full_name->encoding == Parrot_utf8_encoding_ptr);
- while ( (p = strchr(full_name->strstart, '/')) )
- *p = '\\';
- }
+ cnv_to_win32_filesep( full_name );
#endif
+
if (Parrot_stat_info_intval(interp, full_name, STAT_EXISTS)) {
return full_name;
}
@@ -252,15 +265,11 @@
full_name = string_append(interp, file, nul);
full_name->bufused--;
full_name->strlen--;
+
#ifdef WIN32
- {
- char *p;
- assert(full_name->encoding == Parrot_fixed_8_encoding_ptr ||
- full_name->encoding == Parrot_utf8_encoding_ptr);
- while ( (p = strchr(full_name->strstart, '/')) )
- *p = '\\';
- }
+ cnv_to_win32_filesep( full_name );
#endif
+
if (Parrot_stat_info_intval(interp, full_name, STAT_EXISTS)) {
return full_name;
}
signature.asc
Description: PGP signature
