[PD-dev] [PD] Problem in os x 10.5.1?
David Plans Casal
dataflow at davidcasal.com
Wed Feb 6 17:20:28 CET 2008
Just to confirm, this is happening for in app and terminal stars, I
was using terminal because I was starting the process from within gdb...
Will try Russell's patch now and look at seteuid()
David Plans
On 1 Feb 2008, at 17:03, Miller Puckette wrote:
> Aha, somehow I had persuaded myself that teh problem was when
> starting from
> the "App" (in which case Tcl/TK fork/execs pd) but now I gather it's
> when
> you start Pd from a shell so that it starts Tcl/Tk instead. I'll go
> try
> that and see if I can make it fail for me :)
>
> M
>
> On Fri, Feb 01, 2008 at 08:54:17AM -0600, Russell Bryant wrote:
>> David Plans Casal wrote:
>>> I can't quite tell why it's complaining (since we -do- call execl),
>>> but of course there is a whole lot of sprintf going on between the
>>> two, so...
>>
>> It's extremely unlikely that any of the string handling is the
>> problem.
>> However, there are also a bunch of calls to stat() as well as a
>> call to
>> seteuid() which are more likely.
>>
>>> Any suggestions, anyone?
>>
>> Try the attached patch to see if moving building the sys_guicmd to
>> before the
>> fork fixes it. If it doesn't, try commenting out the call to
>> seteuid().
>> Between those two, you should be able to find out what it's
>> complaining about.
>>
>> On a sidenote, the string handling here is not safe. It will crash
>> if the path
>> to your home directory is a lot longer than usual ...
>>
>> --
>> Russell Bryant
>
>> Index: s_inter.c
>> ===================================================================
>> RCS file: /cvsroot/pure-data/pd/src/s_inter.c,v
>> retrieving revision 1.22
>> diff -u -r1.22 s_inter.c
>> --- s_inter.c 16 Jan 2008 21:54:11 -0000 1.22
>> +++ s_inter.c 1 Feb 2008 14:43:37 -0000
>> @@ -1018,6 +1018,73 @@
>>
>>
>> #ifdef UNISTD
>> + if (!sys_guicmd) {
>> +#ifdef __APPLE__
>> + char *homedir = getenv("HOME"), filename[250];
>> + struct stat statbuf;
>> + /* first look for Wish bundled with and renamed
>> "Pd" */
>> + sprintf(filename, "%s/../../MacOS/Pd", guidir);
>> + if (stat(filename, &statbuf) >= 0)
>> + goto foundit;
>> + if (!homedir || strlen(homedir) > 150)
>> + goto nohomedir;
>> + /* Look for Wish in user's Applications. Might or
>> might
>> + not be names "Wish Shell", and might or might not be
>> + in "Utilities" subdir. */
>> + sprintf(filename,
>> + "%s/Applications/Utilities/Wish shell.app/Contents/
>> MacOS/Wish Shell",
>> + homedir);
>> + if (stat(filename, &statbuf) >= 0)
>> + goto foundit;
>> + sprintf(filename,
>> + "%s/Applications/Utilities/Wish.app/Contents/MacOS/
>> Wish",
>> + homedir);
>> + if (stat(filename, &statbuf) >= 0)
>> + goto foundit;
>> + sprintf(filename,
>> + "%s/Applications/Wish shell.app/Contents/MacOS/
>> Wish Shell",
>> + homedir);
>> + if (stat(filename, &statbuf) >= 0)
>> + goto foundit;
>> + sprintf(filename,
>> + "%s/Applications/Wish.app/Contents/MacOS/Wish",
>> + homedir);
>> + if (stat(filename, &statbuf) >= 0)
>> + goto foundit;
>> + nohomedir:
>> + /* Perform the same search among system
>> applications. */
>> + strcpy(filename,
>> + "/usr/bin/wish");
>> + if (stat(filename, &statbuf) >= 0)
>> + goto foundit;
>> + strcpy(filename,
>> + "/Applications/Utilities/Wish Shell.app/Contents/
>> MacOS/Wish Shell");
>> + if (stat(filename, &statbuf) >= 0)
>> + goto foundit;
>> + strcpy(filename,
>> + "/Applications/Utilities/Wish.app/Contents/MacOS/
>> Wish");
>> + if (stat(filename, &statbuf) >= 0)
>> + goto foundit;
>> + strcpy(filename,
>> + "/Applications/Wish Shell.app/Contents/MacOS/Wish
>> Shell");
>> + if (stat(filename, &statbuf) >= 0)
>> + goto foundit;
>> + strcpy(filename,
>> + "/Applications/Wish.app/Contents/MacOS/Wish");
>> + foundit:
>> + sprintf(cmdbuf, "\"%s\" %s/pd.tk %d\n", filename,
>> guidir, portno);
>> +#else
>> + sprintf(cmdbuf,
>> + "TCL_LIBRARY=\"%s/tcl/library\" TK_LIBRARY=\"%s/tk/
>> library\" \
>> + \"%s/pd-gui\" %d\n",
>> + sys_libdir->s_name, sys_libdir->s_name, guidir,
>> portno);
>> +#endif
>> + sys_guicmd = cmdbuf;
>> + }
>> +
>> + if (sys_verbose)
>> + fprintf(stderr, "%s", sys_guicmd);
>> +
>> childpid = fork();
>> if (childpid < 0)
>> {
>> @@ -1045,75 +1112,10 @@
>> }
>> }
>> #endif
>> - if (!sys_guicmd)
>> - {
>> -#ifdef __APPLE__
>> - char *homedir = getenv("HOME"), filename[250];
>> - struct stat statbuf;
>> - /* first look for Wish bundled with and
>> renamed "Pd" */
>> - sprintf(filename, "%s/../../MacOS/Pd", guidir);
>> - if (stat(filename, &statbuf) >= 0)
>> - goto foundit;
>> - if (!homedir || strlen(homedir) > 150)
>> - goto nohomedir;
>> - /* Look for Wish in user's Applications.
>> Might or might
>> - not be names "Wish Shell", and might or might
>> not be
>> - in "Utilities" subdir. */
>> - sprintf(filename,
>> - "%s/Applications/Utilities/Wish shell.app/
>> Contents/MacOS/Wish Shell",
>> - homedir);
>> - if (stat(filename, &statbuf) >= 0)
>> - goto foundit;
>> - sprintf(filename,
>> - "%s/Applications/Utilities/Wish.app/Contents/
>> MacOS/Wish",
>> - homedir);
>> - if (stat(filename, &statbuf) >= 0)
>> - goto foundit;
>> - sprintf(filename,
>> - "%s/Applications/Wish shell.app/Contents/MacOS/
>> Wish Shell",
>> - homedir);
>> - if (stat(filename, &statbuf) >= 0)
>> - goto foundit;
>> - sprintf(filename,
>> - "%s/Applications/Wish.app/Contents/MacOS/Wish",
>> - homedir);
>> - if (stat(filename, &statbuf) >= 0)
>> - goto foundit;
>> - nohomedir:
>> - /* Perform the same search among system
>> applications. */
>> - strcpy(filename,
>> - "/usr/bin/wish");
>> - if (stat(filename, &statbuf) >= 0)
>> - goto foundit;
>> - strcpy(filename,
>> - "/Applications/Utilities/Wish Shell.app/
>> Contents/MacOS/Wish Shell");
>> - if (stat(filename, &statbuf) >= 0)
>> - goto foundit;
>> - strcpy(filename,
>> - "/Applications/Utilities/Wish.app/Contents/
>> MacOS/Wish");
>> - if (stat(filename, &statbuf) >= 0)
>> - goto foundit;
>> - strcpy(filename,
>> - "/Applications/Wish Shell.app/Contents/MacOS/
>> Wish Shell");
>> - if (stat(filename, &statbuf) >= 0)
>> - goto foundit;
>> - strcpy(filename,
>> - "/Applications/Wish.app/Contents/MacOS/Wish");
>> - foundit:
>> - sprintf(cmdbuf, "\"%s\" %s/pd.tk %d\n", filename,
>> guidir, portno);
>> -#else
>> - sprintf(cmdbuf,
>> -"TCL_LIBRARY=\"%s/tcl/library\" TK_LIBRARY=\"%s/tk/library\" \
>> - \"%s/pd-gui\" %d\n",
>> - sys_libdir->s_name, sys_libdir->s_name,
>> guidir, portno);
>> -#endif
>> - sys_guicmd = cmdbuf;
>> - }
>> - if (sys_verbose) fprintf(stderr, "%s", sys_guicmd);
>> execl("/bin/sh", "sh", "-c", sys_guicmd, (char*)0);
>> perror("pd: exec");
>> _exit(1);
>> - }
>> + }
>> #endif /* UNISTD */
>>
>> #ifdef MSW
>
>> _______________________________________________
>> PD-dev mailing list
>> PD-dev at iem.at
>> http://lists.puredata.info/listinfo/pd-dev
>
More information about the Pd-dev
mailing list