dougm 00/03/29 16:52:11
Modified: src/modules/perl perl_util.c
Log:
more for win32 api stuff
Revision Changes Path
1.38 +56 -0 modperl/src/modules/perl/perl_util.c
Index: perl_util.c
===================================================================
RCS file: /home/cvs/modperl/src/modules/perl/perl_util.c,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -r1.37 -r1.38
--- perl_util.c 2000/03/30 00:44:40 1.37
+++ perl_util.c 2000/03/30 00:52:11 1.38
@@ -885,3 +885,59 @@
#endif
+#if defined(WIN32) && defined(PERL_IS_5_6)
+void
+Perl_do_join(pTHX_ register SV *sv, SV *del, register SV **mark, register SV **sp)
+{
+ SV **oldmark = mark;
+ register I32 items = sp - mark;
+ register STRLEN len;
+ STRLEN delimlen;
+ register char *delim = SvPV(del, delimlen);
+ STRLEN tmplen;
+
+ mark++;
+ len = (items > 0 ? (delimlen * (items - 1) ) : 0);
+ (void)SvUPGRADE(sv, SVt_PV);
+ if (SvLEN(sv) < len + items) { /* current length is way too short */
+ while (items-- > 0) {
+ if (*mark && !SvGMAGICAL(*mark) && SvOK(*mark)) {
+ SvPV(*mark, tmplen);
+ len += tmplen;
+ }
+ mark++;
+ }
+ SvGROW(sv, len + 1); /* so try to pre-extend */
+
+ mark = oldmark;
+ items = sp - mark;
+ ++mark;
+ }
+
+ if (items-- > 0) {
+ char *s;
+
+ if (*mark) {
+ s = SvPV(*mark, tmplen);
+ sv_setpvn(sv, s, tmplen);
+ }
+ else
+ sv_setpv(sv, "");
+ mark++;
+ }
+ else
+ sv_setpv(sv,"");
+ len = delimlen;
+ if (len) {
+ for (; items > 0; items--,mark++) {
+ sv_catpvn(sv,delim,len);
+ sv_catsv(sv,*mark);
+ }
+ }
+ else {
+ for (; items > 0; items--,mark++)
+ sv_catsv(sv,*mark);
+ }
+ SvSETMAGIC(sv);
+}
+#endif