From d779a33d23b2add6e08d40f56e1f92def0f7691f Mon Sep 17 00:00:00 2001 From: Fumitoshi UKAI Date: Sat, 8 Feb 2003 18:23:52 +0000 Subject: [w3m-dev 03737] local-CGI POST * local.c (localcgi_post): use tmp file From: Hironori SAKAMOTO --- ChangeLog | 7 ++++++- local.c | 27 ++++++++++++++++----------- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/ChangeLog b/ChangeLog index 496b101..7134e67 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2003-02-09 Hironori SAKAMOTO + + * [w3m-dev 03737] local-CGI POST + * local.c (localcgi_post): use tmp file + 2003-02-08 Hiroyuki Ito * [w3m-dev 03736] dirlist sort @@ -7123,4 +7128,4 @@ a * [w3m-dev 03276] compile error on EWS4800 * release-0-2-1 * import w3m-0.2.1 -$Id: ChangeLog,v 1.743 2003/02/07 15:06:15 ukai Exp $ +$Id: ChangeLog,v 1.744 2003/02/08 18:23:52 ukai Exp $ diff --git a/local.c b/local.c index 2ae6a60..9d11f61 100644 --- a/local.c +++ b/local.c @@ -1,4 +1,4 @@ -/* $Id: local.c,v 1.27 2003/01/31 16:26:41 ukai Exp $ */ +/* $Id: local.c,v 1.28 2003/02/08 18:23:53 ukai Exp $ */ #include "fm.h" #include #include @@ -344,26 +344,27 @@ localcgi_post(char *uri, char *qstr, FormList *request, char *referer) FILE *fr = NULL, *fw = NULL; int status; pid_t pid; - char *file = uri, *name = uri, *path_info = NULL; + char *file = uri, *name = uri, *path_info = NULL, *tmpf = NULL; status = cgi_filename(uri, &file, &name, &path_info); if (check_local_cgi(file, status) < 0) return NULL; writeLocalCookie(); - if (request && request->enctype != FORM_ENCTYPE_MULTIPART) - pid = open_pipe_rw(&fr, &fw); - else - pid = open_pipe_rw(&fr, NULL); + if (request && request->enctype != FORM_ENCTYPE_MULTIPART) { + tmpf = tmpfname(TMPF_DFL, NULL)->ptr; + fw = fopen(tmpf, "w"); + if (!fw) + return NULL; + } + pid = open_pipe_rw(&fr, NULL); if (pid < 0) return NULL; else if (pid) { - if (fw) { - fwrite(request->body, sizeof(char), request->length, fw); + if (fw) fclose(fw); - } return fr; } - setup_child(TRUE, 2, -1); + setup_child(TRUE, 2, fw ? fileno(fw) : -1); if (qstr) uri = Strnew_m_charp(uri, "?", qstr, NULL)->ptr; @@ -383,8 +384,12 @@ localcgi_post(char *uri, char *qstr, FormList *request, char *referer) request->boundary)->ptr); freopen(request->body, "r", stdin); } - else + else { set_environ("CONTENT_TYPE", "application/x-www-form-urlencoded"); + fwrite(request->body, sizeof(char), request->length, fw); + fclose(fw); + freopen(tmpf, "r", stdin); + } } else { set_environ("REQUEST_METHOD", "GET"); -- cgit v1.2.3