+ fprintf(stderr, "Could not open library %s: %s\n", qPrintable(libpath), qPrintable(ltdlError) );
Index: kdelibs-4.7.1/kinit/kinit.cpp
===================================================================
--- kdelibs-4.7.1.orig/kinit/kinit.cpp 2011-05-20 22:24:54.000000000 +0200
+++ kdelibs-4.7.1/kinit/kinit.cpp 2011-09-25 01:29:50.000000000 +0200
const QString bundlepath = s_instance->dirs()->findExe(QFile::decodeName(execpath));
+ // Don't run this inside the child process, it crashes on OS/X 10.6
+ const QString helperpath = s_instance->dirs()->findExe(QString::fromLatin1("kdeinit4_helper"));
+ const QString argvexe = s_instance->dirs()->findExe(QString::fromLatin1(_name));
- d.argv = (char **) malloc(sizeof(char *) * (argc+1));
+ d.argv = (char **) malloc(sizeof(char *) * (argc+2));
d.argv[0] = (char *) _name;
- QString argvexe = s_instance->dirs()->findExe(QString::fromLatin1(d.argv[0]));
if (!argvexe.isEmpty()) {
QByteArray cstr = argvexe.toLocal8Bit();
- kDebug(7016) << "kdeinit4: launch() setting argv: " << cstr.data();
d.argv[0] = strdup(cstr.data());
- void * sym = l.resolve( "kdeinitmain");
- sym = l.resolve( "kdemain" );
- QString ltdlError = l.errorString();
- fprintf(stderr, "Could not find kdemain: %s\n", qPrintable(ltdlError) );
- QString errorMsg = i18n("Could not find 'kdemain' in '%1'.\n%2",
- exitWithErrorMsg(errorMsg);
- d.result = 0; // Success
+ d.result = 2; // Try execing
write(d.fd[1], &d.result, 1);
- d.func = (int (*)(int, char *[])) sym;
+ // We set the close on exec flag.
+ // Closing of d.fd[1] indicates that the execvp succeeded!
+ fcntl(d.fd[1], F_SETFD, FD_CLOEXEC);
fprintf(stderr, "kdeinit4: Suspending process\n"