Submitted by:   blair@orcaware.com
Reviewed by:    olegb@
Approved by:
Obtained from:
stop teh core dumpage!1

thanks Blair

git-svn-id: https://svn.macports.org/repository/macports/trunk/dports@16709 d073be05-634f-4543-b044-5fe20cf6d1d6
This commit is contained in:
Ole Guldberg Jensen
2006-03-01 16:37:34 +00:00
parent 7c9f53b449
commit 04af301f2f
2 changed files with 72 additions and 4 deletions
+2 -2
View File
@@ -1,9 +1,9 @@
# $Id: Portfile,v 1.37 2006/01/08 19:23:30 jberry Exp $
# $Id: Portfile,v 1.38 2006/03/01 16:37:34 olegb Exp $
PortSystem 1.0
name ruby
version 1.8.4
revision 1
revision 2
categories lang ruby
maintainers darwinports@opendarwin.org
+70 -2
View File
@@ -1,5 +1,5 @@
--- ../ruby-1.8.2.orig/ruby.c Fri Jul 23 00:52:38 2004
+++ ruby.c Tue Dec 28 21:52:47 2004
--- ruby.c.orig 2005-12-11 16:36:52.000000000 -0800
+++ ruby.c 2006-02-02 12:38:41.000000000 -0800
@@ -298,6 +298,13 @@
ruby_incpush(RUBY_RELATIVE(RUBY_SITE_ARCHLIB));
ruby_incpush(RUBY_RELATIVE(RUBY_SITE_LIB));
@@ -14,3 +14,71 @@
ruby_incpush(RUBY_RELATIVE(RUBY_LIB));
#ifdef RUBY_THIN_ARCHLIB
ruby_incpush(RUBY_RELATIVE(RUBY_THIN_ARCHLIB));
@@ -1033,43 +1033,47 @@
rb_progname = rb_tainted_str_new(s, i);
#else
if (len == 0) {
- char *s = origargv[0];
- int i;
+ char *s1 = origargv[0];
+ int j;
- s += strlen(s);
+ s1 += strlen(s1);
/* See if all the arguments are contiguous in memory */
- for (i = 1; i < origargc; i++) {
- if (origargv[i] == s + 1) {
- s++;
- s += strlen(s); /* this one is ok too */
+ for (j = 1; j < origargc; j++) {
+ if (origargv[j] == s1 + 1) {
+ s1++;
+ s1 += strlen(s1); /* this one is ok too */
}
else {
break;
}
}
#ifndef DOSISH
- if (s + 1 == envspace.begin) {
- s = envspace.end;
+ if (s1 + 1 == envspace.begin) {
+ s1 = envspace.end;
ruby_setenv("", NULL); /* duplicate environ vars */
}
#endif
- len = s - origargv[0];
+ len = s1 - origargv[0];
}
if (i >= len) {
i = len;
- memcpy(origargv[0], s, i);
- origargv[0][i] = '\0';
}
- else {
- memcpy(origargv[0], s, i);
- s = origargv[0]+i;
- *s++ = '\0';
- while (++i < len)
- *s++ = ' ';
- for (i = 1; i < origargc; i++)
- origargv[i] = 0;
+ memcpy(origargv[0], s, i);
+ memset(origargv[0] + i, '\0', len - i + 1);
+
+ /* If the new program name is longer than the original one, then
+ * have any command line arguments that were written over be
+ * empty strings. */
+ s = origargv[0] + i;
+ for (i = 1; i < origargc; ++i) {
+ if (origargv[i] < s ) {
+ origargv[i] = s;
+ } else {
+ break;
+ }
}
+
rb_progname = rb_tainted_str_new2(origargv[0]);
#endif
}