[OT] jak odpalić thunderbirda?
Tomek Grzejszczyk
T.Grzejszczyk w elka.pw.edu.pl
Pią, 4 Cze 2004, 09:27:47 CEST
Cześć,
List jest może trochę OT, w razie czego proszę o skierowanie mnie na
właściwą listę.
Problem jest taki, że usiłuję zainstalować sobie dockappa wmmaiload, nie
ma go na razie w PLD więc kompiluję go ze źródeł (może napiszę speca,
jak go już zmuszę do działąnia, tak w ramach podziękowań). Posiada on
taką funkcjonalność, że po kliknięciu myszką odpala dowolny program, w
moim przypadku mozilla-thunderbird. Robi to w ten sposób:
wywołuje funkcję my_system("mozilla-thunderbird",NULL)
static int my_system(char *cmd, char *param) {
int pid;
extern char **environ;
if (cmd == 0) return 1;
pid = fork();
if (pid == -1) return -1;
if (pid == 0) {
pid = fork();
if (pid == 0) {
char *argv[4];
char fcmd[2048];
strncpy(fcmd, cmd, 2047);
if (param) strncat(fcmd, param, 2045 - strlen(cmd));
argv[0] = "sh";
argv[1] = "-c";
argv[2] = fcmd;
argv[3] = 0;
execve("/bin/sh", argv, environ);
exit(0);
}
exit(0);
}
return 0;
}
Ta funkcja robi w miarę oczywistą rzecz (jeśli nie brać pod uwagę
drugiego fork() nie wiadomo po co), tylko że thunderbird odpalony w ten
sposób wywala się w 9 przypadkach na 10. Wyświetla "Memory fault" zanim
jeszcze odpali się interfejs graficzny.
Jest to dziwne biorąc pod uwagę następujące fakty:
- odpalony z ręki nie wywala się nigdy
- odpalony z innego dockappa (wmdrawer), nie wywala się nigdy
- jeśli zamiast thunderbirda odpalę coś innego z wmmaiload (gvima) to
nie wywala się
Thunderbirda zbudowałem ze speca i ostatnio uaktualniłem biblioteki,
więc może to dlatego, ale czemu tylko z jednego dockappa?
Sprawdziłem jak odpalanie aplikacji jest robione w wmdrawer, jest tam
bardzo podobna funkcja:
void execCmd (const char *cmd) {
int cpid;
cpid = fork ();
if (cpid == -1) {
printf ("%s error: can't fork\n", PACKAGE);
}
else if (cpid == 0) {
setsid ();
execl ("/bin/sh", "/bin/sh", "-c", cmd, NULL);
exit (EXIT_SUCCESS);
}
}
Różnica polega w zasadzie tylko na wywołaniu setsid. No ale, może czegoś
nie wiem. W każdym razie przepisałem ten kod do wmmaiload (tak żeby
pasowało), ale nic to nie zmieniło, nadal nie lubi thunderbirda. W tej
chwili zabrakło mi już pomysłów jak mogę to dalej debugować i próbować
naprawić. Będę wdzięczy za pomoc.
Tomek Grzejszczyk
Więcej informacji o liście dyskusyjnej pld-devel-pl