[PD-dev] [PD] Problem in os x 10.5.1?
Miller Puckette
mpuckett at imusic1.ucsd.edu
Fri Feb 1 18:03:19 CET 2008
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