Workaround of GC crash on Cygwin64

Patch from <http://www.j10n.org/files/w3m-cvs-1.1055-win64gc.patch>,
[w3m-dev:04469] on 2013-10-14.
This commit is contained in:
AIDA Shinra
2013-10-14 22:31:01 +09:00
committed by Tatsuya Kinoshita
parent dbd52ac2ca
commit ec81194f38
13 changed files with 447 additions and 181 deletions

19
local.c
View File

@@ -359,6 +359,10 @@ localcgi_post(char *uri, char *qstr, FormList *request, char *referer)
int status;
pid_t pid;
char *file = uri, *name = uri, *path_info = NULL, *tmpf = NULL;
#ifdef HAVE_CHDIR
char *cgi_dir;
#endif
char *cgi_basename;
#ifdef __MINGW32_VERSION
return NULL;
@@ -373,7 +377,14 @@ localcgi_post(char *uri, char *qstr, FormList *request, char *referer)
if (!fw)
return NULL;
}
if (qstr)
uri = Strnew_m_charp(uri, "?", qstr, NULL)->ptr;
#ifdef HAVE_CHDIR
cgi_dir = mydirname(file);
#endif
cgi_basename = mybasename(file);
pid = open_pipe_rw(&fr, NULL);
/* Don't invoke gc after here, or the program might crash in some platforms */
if (pid < 0)
return NULL;
else if (pid) {
@@ -383,8 +394,6 @@ localcgi_post(char *uri, char *qstr, FormList *request, char *referer)
}
setup_child(TRUE, 2, fw ? fileno(fw) : -1);
if (qstr)
uri = Strnew_m_charp(uri, "?", qstr, NULL)->ptr;
set_cgi_environ(name, file, uri);
if (path_info)
set_environ("PATH_INFO", path_info);
@@ -415,11 +424,11 @@ localcgi_post(char *uri, char *qstr, FormList *request, char *referer)
}
#ifdef HAVE_CHDIR /* ifndef __EMX__ ? */
chdir(mydirname(file));
chdir(cgi_dir);
#endif
execl(file, mybasename(file), NULL);
execl(file, cgi_basename, NULL);
fprintf(stderr, "execl(\"%s\", \"%s\", NULL): %s\n",
file, mybasename(file), strerror(errno));
file, cgi_basename, strerror(errno));
exit(1);
return NULL;
#endif