[w3m-dev 03640] Re: cleanup (don't close connection of news server)
* anchor.c (_put_ahchor_news): always conv_str (_put_anchor_all): always conv_str * etc.c (close_all_fds): deleted (close_all_fds_except): added, except fd=f is left open * file.c (guess_filename): added (UFhalfclose): added (convertLine): cleanup_line if not raw mode check uf (readHeader): always convertLine (loadGeneralFile): rewrite (loadGopherDir): return Str, args change to ParsedURL and code rewrite (saveBuffer): always conv_str (_doFileCopy): close_all_fds (doFileSave): close_all_fds_except (uncompress_stream): dup, close_all_fds_except * form.c (form_fputs_decode): always conv_str (input_textarea): convertLine * frame.c (createFrameFile): convertLine * ftp.c (loadFTPDir): arg code rewrite (readFTPDir): convertLine * html.h (UFfileno): added * image.c (loadImage): close_all_fds * indep.h (RAW_MODE): added * local.c (loadLocalDir): return Str (dirBuffer): rewrite (localcgi_popen_r): close_all_fds * main.c (main): check SCM_LOCAL print err_msg * news.c (news_command): args cmd and arg (news_quit): news_command (openNewsStream): news_command (readNewsgroup): deleted (loadNewsgroup): added (closeNews): added * proto.h (loadGopherDir): update (conv_str): define for no JP_CHARSET (readFTPDir): deleted (loadFTPDir): added (readNewsgroup): deleted (loadNewsgroup): added (dirBuffer): deleted (loadLocalDir): added (close_all_fds): defined by close_all_fds_except (close_all_fds_except): added From: Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp>
This commit is contained in:
@@ -1,3 +1,53 @@
|
||||
2003-01-16 Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp>
|
||||
|
||||
* [w3m-dev 03640] Re: cleanup (don't close connection of news server)
|
||||
* anchor.c (_put_ahchor_news): always conv_str
|
||||
(_put_anchor_all): always conv_str
|
||||
* etc.c (close_all_fds): deleted
|
||||
(close_all_fds_except): added, except fd=f is left open
|
||||
* file.c (guess_filename): added
|
||||
(UFhalfclose): added
|
||||
(convertLine): cleanup_line if not raw mode
|
||||
check uf
|
||||
(readHeader): always convertLine
|
||||
(loadGeneralFile): rewrite
|
||||
(loadGopherDir): return Str, args change to ParsedURL and code
|
||||
rewrite
|
||||
(saveBuffer): always conv_str
|
||||
(_doFileCopy): close_all_fds
|
||||
(doFileSave): close_all_fds_except
|
||||
(uncompress_stream): dup, close_all_fds_except
|
||||
* form.c (form_fputs_decode): always conv_str
|
||||
(input_textarea): convertLine
|
||||
* frame.c (createFrameFile): convertLine
|
||||
* ftp.c (loadFTPDir): arg code
|
||||
rewrite
|
||||
(readFTPDir): convertLine
|
||||
* html.h (UFfileno): added
|
||||
* image.c (loadImage): close_all_fds
|
||||
* indep.h (RAW_MODE): added
|
||||
* local.c (loadLocalDir): return Str
|
||||
(dirBuffer): rewrite
|
||||
(localcgi_popen_r): close_all_fds
|
||||
* main.c (main): check SCM_LOCAL
|
||||
print err_msg
|
||||
* news.c (news_command): args cmd and arg
|
||||
(news_quit): news_command
|
||||
(openNewsStream): news_command
|
||||
(readNewsgroup): deleted
|
||||
(loadNewsgroup): added
|
||||
(closeNews): added
|
||||
* proto.h (loadGopherDir): update
|
||||
(conv_str): define for no JP_CHARSET
|
||||
(readFTPDir): deleted
|
||||
(loadFTPDir): added
|
||||
(readNewsgroup): deleted
|
||||
(loadNewsgroup): added
|
||||
(dirBuffer): deleted
|
||||
(loadLocalDir): added
|
||||
(close_all_fds): defined by close_all_fds_except
|
||||
(close_all_fds_except): added
|
||||
|
||||
2003-01-16 Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp>
|
||||
|
||||
* [w3m-dev 03639] Re: smb.cgi
|
||||
@@ -6410,4 +6460,4 @@ a * [w3m-dev 03276] compile error on EWS4800
|
||||
* release-0-2-1
|
||||
* import w3m-0.2.1
|
||||
|
||||
$Id: ChangeLog,v 1.680 2003/01/15 15:51:29 ukai Exp $
|
||||
$Id: ChangeLog,v 1.681 2003/01/15 16:11:43 ukai Exp $
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* $Id: anchor.c,v 1.19 2003/01/06 15:37:49 ukai Exp $ */
|
||||
/* $Id: anchor.c,v 1.20 2003/01/15 16:11:43 ukai Exp $ */
|
||||
#include "fm.h"
|
||||
#include "myctype.h"
|
||||
#include "regex.h"
|
||||
@@ -198,10 +198,7 @@ _put_anchor_news(Buffer *buf, char *p1, char *p2, int line, int pos)
|
||||
if (*(p2 - 1) == '>')
|
||||
p2--;
|
||||
}
|
||||
tmp = Strnew_charp_n(p1, p2 - p1);
|
||||
#ifdef JP_CHARSET
|
||||
tmp = conv_str(tmp, InnerCode, buf->document_code);
|
||||
#endif
|
||||
tmp = conv_str(Strnew_charp_n(p1, p2 - p1), InnerCode, buf->document_code);
|
||||
tmp = Sprintf("news:%s", file_quote(tmp->ptr));
|
||||
return registerHref(buf, tmp->ptr, NULL, NO_REFERER, NULL, '\0', line,
|
||||
pos);
|
||||
@@ -213,10 +210,7 @@ _put_anchor_all(Buffer *buf, char *p1, char *p2, int line, int pos)
|
||||
{
|
||||
Str tmp;
|
||||
|
||||
tmp = Strnew_charp_n(p1, p2 - p1);
|
||||
#ifdef JP_CHARSET
|
||||
tmp = conv_str(tmp, InnerCode, buf->document_code);
|
||||
#endif
|
||||
tmp = conv_str(Strnew_charp_n(p1, p2 - p1), InnerCode, buf->document_code);
|
||||
return registerHref(buf, url_quote(tmp->ptr), NULL, NO_REFERER, NULL,
|
||||
'\0', line, pos);
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* $Id: etc.c,v 1.47 2003/01/10 16:42:26 ukai Exp $ */
|
||||
/* $Id: etc.c,v 1.48 2003/01/15 16:11:43 ukai Exp $ */
|
||||
#include "fm.h"
|
||||
#include <pwd.h>
|
||||
#include "myctype.h"
|
||||
@@ -1306,7 +1306,7 @@ reset_signals(void)
|
||||
#endif
|
||||
|
||||
void
|
||||
close_all_fds(int i)
|
||||
close_all_fds_except(int i, int f)
|
||||
{
|
||||
switch (i) { /* fall through */
|
||||
case 0:
|
||||
@@ -1317,8 +1317,10 @@ close_all_fds(int i)
|
||||
dup2(open("/dev/null", O_WRONLY), 2);
|
||||
}
|
||||
/* close all other file descriptors (socket, ...) */
|
||||
for (i = 3; i < FOPEN_MAX; i++)
|
||||
close(i);
|
||||
for (i = 3; i < FOPEN_MAX; i++) {
|
||||
if (i != f)
|
||||
close(i);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef HAVE_SETPGRP
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* $Id: file.c,v 1.184 2003/01/11 15:54:08 ukai Exp $ */
|
||||
/* $Id: file.c,v 1.185 2003/01/15 16:11:43 ukai Exp $ */
|
||||
#include "fm.h"
|
||||
#include <sys/types.h>
|
||||
#include "myctype.h"
|
||||
@@ -28,6 +28,7 @@
|
||||
|
||||
static int frame_source = 0;
|
||||
|
||||
static char *guess_filename(char *file);
|
||||
static int _MoveFile(char *path1, char *path2);
|
||||
static void uncompress_stream(URLFile *uf, char **src);
|
||||
static FILE *lessopen_stream(char *path);
|
||||
@@ -193,6 +194,25 @@ KeyAbort(SIGNAL_ARG)
|
||||
SIGNAL_RETURN;
|
||||
}
|
||||
|
||||
static void
|
||||
UFhalfclose(URLFile *f)
|
||||
{
|
||||
switch (f->scheme) {
|
||||
case SCM_FTP:
|
||||
closeFTP();
|
||||
break;
|
||||
#ifdef USE_NNTP
|
||||
case SCM_NEWS:
|
||||
case SCM_NNTP:
|
||||
closeFTP();
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
UFclose(f);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
currentLn(Buffer *buf)
|
||||
{
|
||||
@@ -455,9 +475,10 @@ convertLine(URLFile *uf, Str line, char *code, int mode)
|
||||
line = conv_str(line, *code, InnerCode);
|
||||
}
|
||||
#endif /* JP_CHARSET */
|
||||
cleanup_line(line, mode);
|
||||
if (mode != RAW_MODE)
|
||||
cleanup_line(line, mode);
|
||||
#ifdef USE_NNTP
|
||||
if (uf->scheme == SCM_NEWS)
|
||||
if (uf && uf->scheme == SCM_NEWS)
|
||||
Strchop(line);
|
||||
#endif /* USE_NNTP */
|
||||
return line;
|
||||
@@ -560,9 +581,7 @@ readHeader(URLFile *uf, Buffer *newBuf, int thru, ParsedURL *pu)
|
||||
Str lineBuf2 = NULL;
|
||||
Str tmp;
|
||||
TextList *headerlist;
|
||||
#ifdef JP_CHARSET
|
||||
char code = DocumentCode, ic;
|
||||
#endif
|
||||
char code;
|
||||
FILE *src = NULL;
|
||||
|
||||
headerlist = newBuf->document_header = newTextList();
|
||||
@@ -581,6 +600,9 @@ readHeader(URLFile *uf, Buffer *newBuf, int thru, ParsedURL *pu)
|
||||
if (src)
|
||||
newBuf->header_source = tmpf->ptr;
|
||||
}
|
||||
#ifdef JP_CHARSET
|
||||
code = DocumentCode;
|
||||
#endif
|
||||
while ((tmp = StrmyUFgets(uf))->length) {
|
||||
#ifdef USE_NNTP
|
||||
if (uf->scheme == SCM_NEWS && tmp->ptr[0] == '.')
|
||||
@@ -616,13 +638,7 @@ readHeader(URLFile *uf, Buffer *newBuf, int thru, ParsedURL *pu)
|
||||
/* header line is continued */
|
||||
continue;
|
||||
lineBuf2 = decodeMIME(lineBuf2->ptr);
|
||||
#ifdef JP_CHARSET
|
||||
if ((ic = checkShiftCode(lineBuf2, code)) != '\0') {
|
||||
if (UseAutoDetect)
|
||||
code = ic;
|
||||
lineBuf2 = conv_str(lineBuf2, code, InnerCode);
|
||||
}
|
||||
#endif /* JP_CHARSET */
|
||||
lineBuf2 = convertLine(NULL, lineBuf2, &code, RAW_MODE);
|
||||
/* separated with line and stored */
|
||||
tmp = Strnew_size(lineBuf2->length);
|
||||
for (p = lineBuf2->ptr; *p; p = q) {
|
||||
@@ -1503,6 +1519,8 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
|
||||
unsigned char status = HTST_NORMAL;
|
||||
URLOption url_option;
|
||||
Str tmp;
|
||||
Str volatile page = NULL;
|
||||
char code = '\0';
|
||||
HRequest hr;
|
||||
ParsedURL *volatile auth_pu;
|
||||
|
||||
@@ -1524,34 +1542,7 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
|
||||
content_charset = '\0';
|
||||
#endif
|
||||
if (f.stream == NULL) {
|
||||
/* openURL failure: it means either (1) the requested URL is a directory name
|
||||
* on an FTP server, or (2) is a local directory name.
|
||||
*/
|
||||
switch (f.scheme) {
|
||||
case SCM_FTPDIR:
|
||||
{
|
||||
Str ftpdir = readFTPDir(&pu);
|
||||
if (ftpdir && ftpdir->length > 0) {
|
||||
FILE *src;
|
||||
tmp = tmpfname(TMPF_SRC, ".html");
|
||||
src = fopen(tmp->ptr, "w");
|
||||
if (src) {
|
||||
Strfputs(ftpdir, src);
|
||||
fclose(src);
|
||||
}
|
||||
b = loadHTMLString(ftpdir);
|
||||
if (b) {
|
||||
if (b->currentURL.host == NULL
|
||||
&& b->currentURL.file == NULL)
|
||||
copyParsedURL(&b->currentURL, &pu);
|
||||
b->real_scheme = pu.scheme;
|
||||
if (src)
|
||||
b->sourcefile = tmp->ptr;
|
||||
}
|
||||
return b;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case SCM_LOCAL:
|
||||
{
|
||||
struct stat st;
|
||||
@@ -1572,42 +1563,24 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
|
||||
return b;
|
||||
}
|
||||
else {
|
||||
b = dirBuffer(pu.real_file);
|
||||
if (b == NULL)
|
||||
return NULL;
|
||||
t = "text/html";
|
||||
b->real_scheme = pu.scheme;
|
||||
goto loaded;
|
||||
page = loadLocalDir(pu.real_file);
|
||||
t = "local:directory";
|
||||
#ifdef JP_CHARSET
|
||||
code = SystemCode;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case SCM_FTPDIR:
|
||||
page = loadFTPDir(&pu, &code);
|
||||
t = "ftp:directory";
|
||||
break;
|
||||
#ifdef USE_NNTP
|
||||
case SCM_NEWS_GROUP:
|
||||
{
|
||||
Str group = readNewsgroup(&pu);
|
||||
if (group && group->length > 0) {
|
||||
FILE *src;
|
||||
tmp = tmpfname(TMPF_SRC, ".html");
|
||||
src = fopen(tmp->ptr, "w");
|
||||
if (src) {
|
||||
Strfputs(group, src);
|
||||
fclose(src);
|
||||
}
|
||||
b = loadHTMLString(group);
|
||||
if (b) {
|
||||
b->real_type = "news:group";
|
||||
if (b->currentURL.host == NULL
|
||||
&& b->currentURL.file == NULL)
|
||||
copyParsedURL(&b->currentURL, &pu);
|
||||
b->real_scheme = pu.scheme;
|
||||
if (src)
|
||||
b->sourcefile = tmp->ptr;
|
||||
}
|
||||
return b;
|
||||
}
|
||||
}
|
||||
break;
|
||||
page = loadNewsgroup(&pu, &code);
|
||||
t = "news:group";
|
||||
break;
|
||||
#endif
|
||||
case SCM_UNKNOWN:
|
||||
#ifdef USE_EXTERNAL_URI_LOADER
|
||||
@@ -1623,6 +1596,8 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
|
||||
parsedURL2Str(&pu)->ptr)->ptr, FALSE);
|
||||
break;
|
||||
}
|
||||
if (page && page->length > 0)
|
||||
goto page_loaded;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -1812,11 +1787,13 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
|
||||
t = "text/plain";
|
||||
break;
|
||||
case '1':
|
||||
t = "gopher:directory";
|
||||
break;
|
||||
case 'm':
|
||||
page = loadGopherDir(&f, &pu, &code);
|
||||
t = "gopher:directory";
|
||||
break;
|
||||
if (fmInitialized)
|
||||
term_raw();
|
||||
signal(SIGINT, prevtrap);
|
||||
goto page_loaded;
|
||||
case 's':
|
||||
t = "audio/basic";
|
||||
break;
|
||||
@@ -1906,12 +1883,52 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
|
||||
if (f.guess_type)
|
||||
t = f.guess_type;
|
||||
}
|
||||
|
||||
page_loaded:
|
||||
if (page) {
|
||||
FILE *src;
|
||||
tmp = tmpfname(TMPF_SRC, ".html");
|
||||
src = fopen(tmp->ptr, "w");
|
||||
if (src) {
|
||||
Strfputs(conv_str(page, InnerCode, code), src);
|
||||
fclose(src);
|
||||
}
|
||||
if (do_download) {
|
||||
char *file;
|
||||
if (!src)
|
||||
return NULL;
|
||||
file = guess_filename(pu.file);
|
||||
#ifdef USE_GOPHER
|
||||
if (f.scheme == SCM_GOPHER)
|
||||
file = Sprintf("%s.html", file)->ptr;
|
||||
#endif
|
||||
#ifdef USE_NNTP
|
||||
if (f.scheme == SCM_NEWS_GROUP)
|
||||
file = Sprintf("%s.html", file)->ptr;
|
||||
#endif
|
||||
doFileMove(tmp->ptr, file);
|
||||
return NO_BUFFER;
|
||||
}
|
||||
b = loadHTMLString(page);
|
||||
if (b) {
|
||||
copyParsedURL(&b->currentURL, &pu);
|
||||
b->real_scheme = pu.scheme;
|
||||
b->real_type = t;
|
||||
if (src)
|
||||
b->sourcefile = tmp->ptr;
|
||||
#ifdef JP_CHARSET
|
||||
b->document_code = code;
|
||||
#endif
|
||||
}
|
||||
return b;
|
||||
}
|
||||
|
||||
if (real_type == NULL)
|
||||
real_type = t;
|
||||
if (SkipHeader) {
|
||||
t_buf = newBuffer(INIT_BUFFER_WIDTH);
|
||||
readHeader(&f, t_buf, TRUE, NULL);
|
||||
}
|
||||
if (real_type == NULL)
|
||||
real_type = t;
|
||||
proc = loadBuffer;
|
||||
#ifdef USE_IMAGE
|
||||
cur_baseURL = New(ParsedURL);
|
||||
@@ -1921,7 +1938,6 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
|
||||
current_content_length = 0;
|
||||
if ((p = checkHeader(t_buf, "Content-Length:")) != NULL)
|
||||
current_content_length = strtoclen(p);
|
||||
|
||||
if (do_download) {
|
||||
/* download only */
|
||||
char *file;
|
||||
@@ -1938,8 +1954,8 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
|
||||
}
|
||||
else
|
||||
file = guess_save_name(t_buf, pu.file);
|
||||
if (doFileSave(f, file) == 0 && f.scheme == SCM_FTP)
|
||||
closeFTP();
|
||||
if (doFileSave(f, file) == 0)
|
||||
UFhalfclose(&f);
|
||||
else
|
||||
UFclose(&f);
|
||||
return NO_BUFFER;
|
||||
@@ -1986,11 +2002,6 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
|
||||
!(w3m_dump & ~DUMP_FRAME) && !strncasecmp(t, "image/", 6))
|
||||
proc = loadImageBuffer;
|
||||
#endif
|
||||
#ifdef USE_GOPHER
|
||||
else if (!strcasecmp(t, "gopher:directory")) {
|
||||
proc = loadGopherDir;
|
||||
}
|
||||
#endif /* USE_GOPHER */
|
||||
else if (w3m_backend) ;
|
||||
else if (!(w3m_dump & ~DUMP_FRAME) || is_dump_text_type(t)) {
|
||||
if (!do_download && doExternal(f,
|
||||
@@ -2021,9 +2032,8 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
|
||||
else {
|
||||
if (DecodeCTE && IStype(f.stream) != IST_ENCODED)
|
||||
f.stream = newEncodedStream(f.stream, f.encoding);
|
||||
if (doFileSave(f, guess_save_name(t_buf, pu.file)) == 0 &&
|
||||
f.scheme == SCM_FTP)
|
||||
closeFTP();
|
||||
if (doFileSave(f, guess_save_name(t_buf, pu.file)) == 0)
|
||||
UFhalfclose(&f);
|
||||
else
|
||||
UFclose(&f);
|
||||
}
|
||||
@@ -2047,7 +2057,6 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
|
||||
if (b) {
|
||||
b->real_scheme = f.scheme;
|
||||
b->real_type = real_type;
|
||||
loaded:
|
||||
if (b->currentURL.host == NULL && b->currentURL.file == NULL)
|
||||
copyParsedURL(&b->currentURL, &pu);
|
||||
if (!strcasecmp(t, "text/html"))
|
||||
@@ -2059,10 +2068,6 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
|
||||
#ifdef USE_IMAGE
|
||||
else if (proc == loadImageBuffer)
|
||||
b->type = "text/html";
|
||||
#endif
|
||||
#ifdef USE_GOPHER
|
||||
else if (proc == loadGopherDir)
|
||||
b->type = "text/html";
|
||||
#endif
|
||||
else
|
||||
b->type = "text/plain";
|
||||
@@ -6558,8 +6563,6 @@ loadHTMLString(Str page)
|
||||
URLFile f;
|
||||
MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL;
|
||||
Buffer *newBuf;
|
||||
Str tmp;
|
||||
FILE *volatile src = NULL;
|
||||
|
||||
newBuf = newBuffer(INIT_BUFFER_WIDTH);
|
||||
if (SETJMP(AbortLoading) != 0) {
|
||||
@@ -6574,15 +6577,7 @@ loadHTMLString(Str page)
|
||||
term_cbreak();
|
||||
|
||||
init_stream(&f, SCM_LOCAL, newStrStream(page));
|
||||
|
||||
if (w3m_dump & DUMP_FRAME) {
|
||||
tmp = tmpfname(TMPF_SRC, ".html");
|
||||
src = fopen(tmp->ptr, "w");
|
||||
if (src)
|
||||
newBuf->sourcefile = tmp->ptr;
|
||||
}
|
||||
|
||||
loadHTMLstream(&f, newBuf, src, TRUE);
|
||||
loadHTMLstream(&f, newBuf, NULL, TRUE);
|
||||
|
||||
if (fmInitialized)
|
||||
term_raw();
|
||||
@@ -6597,9 +6592,6 @@ loadHTMLString(Str page)
|
||||
newBuf->real_type = newBuf->type;
|
||||
if (n_textarea)
|
||||
formResetBuffer(newBuf, newBuf->formitem);
|
||||
if (src)
|
||||
fclose(src);
|
||||
|
||||
return newBuf;
|
||||
}
|
||||
|
||||
@@ -6608,19 +6600,21 @@ loadHTMLString(Str page)
|
||||
/*
|
||||
* loadGopherDir: get gopher directory
|
||||
*/
|
||||
Buffer *
|
||||
loadGopherDir(URLFile *uf, Buffer *volatile newBuf)
|
||||
Str
|
||||
loadGopherDir(URLFile *uf, ParsedURL *pu, char *code)
|
||||
{
|
||||
Str tmp, lbuf, name, file, host, port;
|
||||
char code = CODE_ASCII;
|
||||
char *p, *q;
|
||||
FILE *src;
|
||||
URLFile f;
|
||||
Str volatile tmp;
|
||||
Str lbuf, name, file, host, port;
|
||||
char *volatile p, *volatile q;
|
||||
MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL;
|
||||
|
||||
if (newBuf == NULL)
|
||||
newBuf = newBuffer(INIT_BUFFER_WIDTH);
|
||||
tmp = Strnew_charp("<pre>\n");
|
||||
tmp = parsedURL2Str(pu);
|
||||
p = html_quote(tmp->ptr);
|
||||
tmp = convertLine(NULL, Strnew_charp(file_unquote(tmp->ptr)), code, NULL);
|
||||
q = html_quote(tmp->ptr);
|
||||
tmp = Strnew_m_charp("<html>\n<head>\n<base href=\"", p, "\">\n<title>", q,
|
||||
"</title>\n</head>\n<body>\n<h1>Index of ", q,
|
||||
"</h1>\n<table>\n", NULL);
|
||||
|
||||
if (SETJMP(AbortLoading) != 0)
|
||||
goto gopher_end;
|
||||
@@ -6629,13 +6623,7 @@ loadGopherDir(URLFile *uf, Buffer *volatile newBuf)
|
||||
term_cbreak();
|
||||
|
||||
#ifdef JP_CHARSET
|
||||
if (newBuf->document_code != '\0')
|
||||
code = newBuf->document_code;
|
||||
else if (content_charset != '\0' && UseContentCharset)
|
||||
code = content_charset;
|
||||
else
|
||||
code = DocumentCode;
|
||||
content_charset = '\0';
|
||||
*code = DocumentCode;
|
||||
#endif
|
||||
while (1) {
|
||||
if (lbuf = StrUFgets(uf), lbuf->length == 0)
|
||||
@@ -6643,7 +6631,7 @@ loadGopherDir(URLFile *uf, Buffer *volatile newBuf)
|
||||
if (lbuf->ptr[0] == '.' &&
|
||||
(lbuf->ptr[1] == '\n' || lbuf->ptr[1] == '\r'))
|
||||
break;
|
||||
lbuf = convertLine(uf, lbuf, &code, HTML_MODE);
|
||||
lbuf = convertLine(uf, lbuf, code, HTML_MODE);
|
||||
p = lbuf->ptr;
|
||||
for (q = p; *q && *q != '\t'; q++) ;
|
||||
name = Strnew_charp_n(p, q - p);
|
||||
@@ -6665,22 +6653,22 @@ loadGopherDir(URLFile *uf, Buffer *volatile newBuf)
|
||||
|
||||
switch (name->ptr[0]) {
|
||||
case '0':
|
||||
p = "[text file] ";
|
||||
p = "[text file]";
|
||||
break;
|
||||
case '1':
|
||||
p = "[directory] ";
|
||||
p = "[directory]";
|
||||
break;
|
||||
case 'm':
|
||||
p = "[message] ";
|
||||
p = "[message]";
|
||||
break;
|
||||
case 's':
|
||||
p = "[sound] ";
|
||||
p = "[sound]";
|
||||
break;
|
||||
case 'g':
|
||||
p = "[gif] ";
|
||||
p = "[gif]";
|
||||
break;
|
||||
case 'h':
|
||||
p = "[HTML] ";
|
||||
p = "[HTML]";
|
||||
break;
|
||||
default:
|
||||
p = "[unsupported]";
|
||||
@@ -6688,9 +6676,9 @@ loadGopherDir(URLFile *uf, Buffer *volatile newBuf)
|
||||
}
|
||||
q = Strnew_m_charp("gopher://", host->ptr, ":", port->ptr,
|
||||
"/", file->ptr, NULL)->ptr;
|
||||
Strcat_m_charp(tmp, "<a href=\"",
|
||||
html_quote(url_quote_conv(q, code)),
|
||||
"\">", p, html_quote(name->ptr + 1), "</a>\n", NULL);
|
||||
Strcat_m_charp(tmp, "<tr valign=top><td>", p, "<td><a href=\"",
|
||||
html_quote(url_quote_conv(q, *code)),
|
||||
"\">", html_quote(name->ptr + 1), "</a>\n", NULL);
|
||||
}
|
||||
|
||||
gopher_end:
|
||||
@@ -6698,25 +6686,8 @@ loadGopherDir(URLFile *uf, Buffer *volatile newBuf)
|
||||
term_raw();
|
||||
signal(SIGINT, prevtrap);
|
||||
|
||||
Strcat_charp(tmp, "</pre>\n");
|
||||
|
||||
file = tmpfname(TMPF_SRC, ".html");
|
||||
src = fopen(file->ptr, "w");
|
||||
newBuf->sourcefile = file->ptr;
|
||||
|
||||
init_stream(&f, SCM_LOCAL, newStrStream(tmp));
|
||||
loadHTMLstream(&f, newBuf, src, TRUE);
|
||||
if (src)
|
||||
fclose(src);
|
||||
|
||||
#ifdef JP_CHARSET
|
||||
newBuf->document_code = code;
|
||||
#endif /* JP_CHARSET */
|
||||
newBuf->topLine = newBuf->firstLine;
|
||||
newBuf->lastLine = newBuf->currentLine;
|
||||
newBuf->currentLine = newBuf->firstLine;
|
||||
|
||||
return newBuf;
|
||||
Strcat_charp(tmp, "</table>\n</body>\n</html>\n");
|
||||
return tmp;
|
||||
}
|
||||
#endif /* USE_GOPHER */
|
||||
|
||||
@@ -6946,10 +6917,7 @@ saveBuffer(Buffer *buf, FILE * f)
|
||||
else
|
||||
#endif
|
||||
tmp = Strnew_charp_n(l->lineBuf, l->len);
|
||||
#ifdef JP_CHARSET
|
||||
tmp = conv_str(tmp, InnerCode, DisplayCode);
|
||||
#endif
|
||||
Strfputs(tmp, f);
|
||||
Strfputs(conv_str(tmp, InnerCode, DisplayCode), f);
|
||||
if (Strlastchar(tmp) != '\n')
|
||||
putc('\n', f);
|
||||
}
|
||||
@@ -7520,6 +7488,7 @@ _doFileCopy(char *tmpf, char *defstr, int download)
|
||||
signal(SIGINT, SIG_IGN);
|
||||
SETPGRP();
|
||||
close_tty();
|
||||
close_all_fds(2);
|
||||
QuietMessage = TRUE;
|
||||
fmInitialized = FALSE;
|
||||
if (!_MoveFile(tmpf, p) && PreserveTimestamp && !is_pipe &&
|
||||
@@ -7626,6 +7595,7 @@ doFileSave(URLFile uf, char *defstr)
|
||||
signal(SIGINT, SIG_IGN);
|
||||
SETPGRP();
|
||||
close_tty();
|
||||
close_all_fds_except(2, UFfileno(&uf));
|
||||
QuietMessage = TRUE;
|
||||
fmInitialized = FALSE;
|
||||
if (!save2tmp(uf, p) && PreserveTimestamp && uf.modtime != -1)
|
||||
@@ -7788,6 +7758,9 @@ uncompress_stream(URLFile *uf, char **src)
|
||||
QuietMessage = TRUE;
|
||||
fmInitialized = FALSE;
|
||||
close(fd1[0]);
|
||||
dup2(fd1[1], 1);
|
||||
dup2(fd1[1], 2);
|
||||
close_all_fds_except(-1, UFfileno(uf));
|
||||
if (tmpf) {
|
||||
#ifdef USE_BINMODE_STREAM
|
||||
int tmpfd = open(tmpf, O_RDONLY | O_BINARY);
|
||||
@@ -7825,8 +7798,6 @@ uncompress_stream(URLFile *uf, char **src)
|
||||
close(fd2[1]);
|
||||
dup2(fd2[0], 0);
|
||||
}
|
||||
dup2(fd1[1], 1);
|
||||
dup2(fd1[1], 2);
|
||||
execlp(expand_cmd, expand_name, NULL);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* $Id: form.c,v 1.27 2003/01/10 16:58:31 ukai Exp $ */
|
||||
/* $Id: form.c,v 1.28 2003/01/15 16:11:43 ukai Exp $ */
|
||||
/*
|
||||
* HTML forms
|
||||
*/
|
||||
@@ -447,11 +447,7 @@ form_fputs_decode(Str s, FILE * f)
|
||||
break;
|
||||
}
|
||||
}
|
||||
#ifdef JP_CHARSET
|
||||
fputs(conv_str(z, InnerCode, DisplayCode)->ptr, f);
|
||||
#else /* not JP_CHARSET */
|
||||
fputs(z->ptr, f);
|
||||
#endif /* not JP_CHARSET */
|
||||
}
|
||||
|
||||
|
||||
@@ -462,7 +458,7 @@ input_textarea(FormItemList *fi)
|
||||
Str tmp;
|
||||
FILE *f;
|
||||
#ifdef JP_CHARSET
|
||||
char code = DisplayCode, ic;
|
||||
char code = DisplayCode;
|
||||
#endif
|
||||
|
||||
f = fopen(tmpf, "w");
|
||||
@@ -497,8 +493,7 @@ input_textarea(FormItemList *fi)
|
||||
Strcat_charp(tmp, "\r\n");
|
||||
}
|
||||
#ifdef JP_CHARSET
|
||||
if ((ic = checkShiftCode(tmp, code)) != '\0')
|
||||
tmp = conv_str(tmp, (code = ic), InnerCode);
|
||||
tmp = convertLine(NULL, tmp, &code, RAW_MODE);
|
||||
#endif /* not JP_CHARSET */
|
||||
Strcat(fi->value, tmp);
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* $Id: frame.c,v 1.28 2003/01/09 15:30:43 ukai Exp $ */
|
||||
/* $Id: frame.c,v 1.29 2003/01/15 16:11:43 ukai Exp $ */
|
||||
#include "fm.h"
|
||||
#include "parsetagx.h"
|
||||
#include "myctype.h"
|
||||
@@ -410,8 +410,9 @@ createFrameFile(struct frameset *f, FILE * f1, Buffer *current, int level,
|
||||
{
|
||||
int r, c, t_stack;
|
||||
URLFile f2;
|
||||
char code;
|
||||
#ifdef JP_CHARSET
|
||||
char code, ic, charset[2];
|
||||
char charset[2];
|
||||
#endif /* JP_CHARSET */
|
||||
char *d_target, *p_target, *s_target, *t_target;
|
||||
ParsedURL *currentURL, base;
|
||||
@@ -530,20 +531,15 @@ createFrameFile(struct frameset *f, FILE * f1, Buffer *current, int level,
|
||||
t_target = "_blank";
|
||||
d_target = TargetSelf ? s_target : t_target;
|
||||
#ifdef JP_CHARSET
|
||||
code = '\0';
|
||||
#endif /* JP_CHARSET */
|
||||
code = DocumentCode;
|
||||
#endif
|
||||
t_stack = 0;
|
||||
if (frame.body->type &&
|
||||
!strcasecmp(frame.body->type, "text/plain")) {
|
||||
Str tmp;
|
||||
fprintf(f1, "<pre>\n");
|
||||
while ((tmp = StrmyUFgets(&f2))->length) {
|
||||
#ifdef JP_CHARSET
|
||||
if ((ic = checkShiftCode(tmp, code)) != '\0')
|
||||
tmp = conv_str(tmp, (code = ic), InnerCode);
|
||||
|
||||
#endif /* JP_CHARSET */
|
||||
cleanup_line(tmp, HTML_MODE);
|
||||
tmp = convertLine(NULL, tmp, &code, HTML_MODE);
|
||||
fprintf(f1, "%s", html_quote(tmp->ptr));
|
||||
}
|
||||
fprintf(f1, "</pre>\n");
|
||||
@@ -560,12 +556,7 @@ createFrameFile(struct frameset *f, FILE * f1, Buffer *current, int level,
|
||||
Str tmp = StrmyUFgets(&f2);
|
||||
if (tmp->length == 0)
|
||||
break;
|
||||
#ifdef JP_CHARSET
|
||||
if ((ic = checkShiftCode(tmp, code)) != '\0')
|
||||
tmp = conv_str(tmp, (code = ic), InnerCode);
|
||||
|
||||
#endif /* JP_CHARSET */
|
||||
cleanup_line(tmp, HTML_MODE);
|
||||
tmp = convertLine(NULL, tmp, &code, HTML_MODE);
|
||||
p = tmp->ptr;
|
||||
}
|
||||
read_token(tok, &p, &status, 1, status != R_ST_NORMAL);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* $Id: ftp.c,v 1.23 2003/01/11 16:00:56 ukai Exp $ */
|
||||
/* $Id: ftp.c,v 1.24 2003/01/15 16:11:43 ukai Exp $ */
|
||||
#include <stdio.h>
|
||||
#include <pwd.h>
|
||||
#include <Str.h>
|
||||
@@ -411,15 +411,18 @@ openFTPStream(ParsedURL *pu, URLFile *uf)
|
||||
}
|
||||
|
||||
Str
|
||||
readFTPDir(ParsedURL *pu)
|
||||
loadFTPDir(ParsedURL *pu, char *code)
|
||||
{
|
||||
Str FTPDIRtmp;
|
||||
Str tmp;
|
||||
int status, sv_type;
|
||||
char *realpathname, *fn;
|
||||
char *realpathname, *fn, *q;
|
||||
char **flist;
|
||||
int i, nfile, nfile_max = 100;
|
||||
|
||||
#ifdef JP_CHARSET
|
||||
*code = DocumentCode;
|
||||
#endif
|
||||
if (current_ftp.data == NULL)
|
||||
return NULL;
|
||||
tmp = ftp_command(¤t_ftp, "SYST", NULL, &status);
|
||||
@@ -453,13 +456,16 @@ readFTPDir(ParsedURL *pu)
|
||||
if (Strlastchar(tmp) != '/')
|
||||
Strcat_char(tmp, '/');
|
||||
fn = html_quote(tmp->ptr);
|
||||
FTPDIRtmp = Strnew_m_charp("<html><head><title>", fn,
|
||||
"</title></head><body><h1>Index of ", fn,
|
||||
tmp = convertLine(NULL, Strnew_charp(file_unquote(tmp->ptr)), code, NULL);
|
||||
q = html_quote(tmp->ptr);
|
||||
FTPDIRtmp = Strnew_m_charp("<html>\n<head>\n<base href=\"", fn,
|
||||
"\">\n<title>", q,
|
||||
"</title>\n</head>\n<body>\n<h1>Index of ", q,
|
||||
"</h1>\n", NULL);
|
||||
if (sv_type == UNIXLIKE_SERVER)
|
||||
Strcat_charp(FTPDIRtmp, "<pre>");
|
||||
Strcat_charp(FTPDIRtmp, "<pre>\n");
|
||||
else
|
||||
Strcat_charp(FTPDIRtmp, "<ul><li>");
|
||||
Strcat_charp(FTPDIRtmp, "<ul>\n<li>");
|
||||
Strcat_charp(FTPDIRtmp, "<a href=\"..\">[Upper Directory]</a>\n");
|
||||
|
||||
flist = New_N(char *, nfile_max);
|
||||
@@ -519,8 +525,9 @@ readFTPDir(ParsedURL *pu)
|
||||
}
|
||||
date++;
|
||||
len = strlen(fn);
|
||||
tmp = convertLine(NULL, Strnew_charp(fn), code, NULL);
|
||||
Strcat_m_charp(FTPDIRtmp, "<a href=\"", html_quote(file_quote(fn)),
|
||||
"\">", html_quote(fn), NULL);
|
||||
"\">", html_quote(tmp->ptr), NULL);
|
||||
if (ftype == FTPDIR_LINK) {
|
||||
Strcat_charp(FTPDIRtmp, "@");
|
||||
len++;
|
||||
@@ -536,7 +543,7 @@ readFTPDir(ParsedURL *pu)
|
||||
}
|
||||
Strcat_m_charp(FTPDIRtmp, date, "\n", NULL);
|
||||
}
|
||||
Strcat_charp(FTPDIRtmp, "</pre></body></html>\n");
|
||||
Strcat_charp(FTPDIRtmp, "</pre>\n");
|
||||
}
|
||||
else {
|
||||
while (tmp = Strfgets(current_ftp.data), tmp->length > 0) {
|
||||
@@ -550,12 +557,15 @@ readFTPDir(ParsedURL *pu)
|
||||
qsort(flist, nfile, sizeof(char *), strCmp);
|
||||
for (i = 0; i < nfile; i++) {
|
||||
fn = flist[i];
|
||||
tmp = convertLine(NULL, Strnew_charp(fn), code, NULL);
|
||||
Strcat_m_charp(FTPDIRtmp, "<li><a href=\"",
|
||||
html_quote(file_quote(fn)), "\">", html_quote(fn),
|
||||
"</a>\n", NULL);
|
||||
html_quote(file_quote(fn)), "\">",
|
||||
html_quote(tmp->ptr), "</a>\n", NULL);
|
||||
}
|
||||
Strcat_charp(FTPDIRtmp, "</ul></body></html>\n");
|
||||
Strcat_charp(FTPDIRtmp, "</ul>\n");
|
||||
}
|
||||
Strcat_charp(FTPDIRtmp, "</body>\n</html>\n");
|
||||
|
||||
closeFTPdata(current_ftp.data);
|
||||
return FTPDIRtmp;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* $Id: html.h,v 1.21 2003/01/10 17:15:22 ukai Exp $ */
|
||||
/* $Id: html.h,v 1.22 2003/01/15 16:11:43 ukai Exp $ */
|
||||
#ifndef _HTML_H
|
||||
#define _HTML_H
|
||||
#ifdef USE_SSL
|
||||
@@ -15,6 +15,7 @@
|
||||
#define UFundogetc(f) ISundogetc((f)->stream)
|
||||
#define UFread(f,buf,len) ISread((f)->stream,buf,len)
|
||||
#define UFclose(f) (void)(ISclose((f)->stream) == 0 && ((f)->stream = NULL))
|
||||
#define UFfileno(f) ISfileno((f)->stream)
|
||||
|
||||
struct cmdtable {
|
||||
char *cmdname;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* $Id: image.c,v 1.24 2003/01/10 16:42:46 ukai Exp $ */
|
||||
/* $Id: image.c,v 1.25 2003/01/15 16:11:43 ukai Exp $ */
|
||||
|
||||
#include "fm.h"
|
||||
#include <sys/types.h>
|
||||
@@ -456,6 +456,7 @@ loadImage(int flag)
|
||||
reset_signals();
|
||||
signal(SIGINT, SIG_IGN);
|
||||
close_tty();
|
||||
close_all_fds(2);
|
||||
QuietMessage = TRUE;
|
||||
fmInitialized = FALSE;
|
||||
image_source = cache->file;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* $Id: indep.h,v 1.11 2003/01/08 17:24:12 ukai Exp $ */
|
||||
/* $Id: indep.h,v 1.12 2003/01/15 16:11:43 ukai Exp $ */
|
||||
#ifndef INDEP_H
|
||||
#define INDEP_H
|
||||
#include "gc.h"
|
||||
@@ -12,9 +12,10 @@
|
||||
#define FALSE 0
|
||||
#endif /* FALSE */
|
||||
|
||||
#define PAGER_MODE 0
|
||||
#define HTML_MODE 1
|
||||
#define HEADER_MODE 2
|
||||
#define RAW_MODE 0
|
||||
#define PAGER_MODE 1
|
||||
#define HTML_MODE 2
|
||||
#define HEADER_MODE 3
|
||||
|
||||
extern clen_t strtoclen(const char *s);
|
||||
extern char *conv_entity(int ch);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* $Id: local.c,v 1.17 2003/01/10 16:42:50 ukai Exp $ */
|
||||
/* $Id: local.c,v 1.18 2003/01/15 16:11:43 ukai Exp $ */
|
||||
#include "fm.h"
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
@@ -34,8 +34,8 @@ setLocalCookie()
|
||||
set_environ("LOCAL_COOKIE", Local_cookie->ptr);
|
||||
}
|
||||
|
||||
Buffer *
|
||||
dirBuffer(char *dname)
|
||||
Str
|
||||
loadLocalDir(char *dname)
|
||||
{
|
||||
Str tmp;
|
||||
DIR *d;
|
||||
@@ -53,17 +53,18 @@ dirBuffer(char *dname)
|
||||
int i, l, nrow = 0, n = 0, maxlen = 0;
|
||||
int nfile, nfile_max = 100;
|
||||
Str dirname;
|
||||
Buffer *buf;
|
||||
|
||||
d = opendir(dname);
|
||||
if (d == NULL)
|
||||
return NULL;
|
||||
dirname = Strnew_charp(dname);
|
||||
if (Strlastchar(dirname) != '/')
|
||||
Strcat_char(dirname, '/');
|
||||
qdir = html_quote(Str_conv_from_system(dirname)->ptr);
|
||||
tmp =
|
||||
Sprintf
|
||||
("<title>Directory list of %s</title><h1>Directory list of %s</h1>\n",
|
||||
qdir, qdir);
|
||||
tmp = Strnew_m_charp("<HTML>\n<HEAD>\n<BASE HREF=\"file://", qdir,
|
||||
"\">\n<TITLE>Directory list of ", qdir,
|
||||
"</TITLE>\n</HEAD>\n<BODY>\n<H1>Directory list of ",
|
||||
qdir, "</H1>\n", NULL);
|
||||
flist = New_N(char *, nfile_max);
|
||||
nfile = 0;
|
||||
while ((dir = readdir(d)) != NULL) {
|
||||
@@ -86,7 +87,7 @@ dirBuffer(char *dname)
|
||||
l = 1;
|
||||
nrow = (n + l - 1) / l;
|
||||
n = 1;
|
||||
Strcat_charp(tmp, "<TABLE CELLPADDING=0><TR VALIGN=TOP>\n");
|
||||
Strcat_charp(tmp, "<TABLE CELLPADDING=0>\n<TR VALIGN=TOP>\n");
|
||||
}
|
||||
qsort((void *)flist, nfile, sizeof(char *), strCmp);
|
||||
for (i = 0; i < nfile; i++) {
|
||||
@@ -108,22 +109,23 @@ dirBuffer(char *dname)
|
||||
Strcat_charp(tmp, "<TD><NOBR>");
|
||||
}
|
||||
else {
|
||||
#ifdef HAVE_LSTAT
|
||||
if (S_ISLNK(lst.st_mode))
|
||||
Strcat_charp(tmp, "[LINK] ");
|
||||
else
|
||||
#endif /* HAVE_LSTAT */
|
||||
if (S_ISDIR(st.st_mode))
|
||||
Strcat_charp(tmp, "[DIR] ");
|
||||
#ifdef HAVE_LSTAT
|
||||
else if (S_ISLNK(lst.st_mode))
|
||||
Strcat_charp(tmp, "[LINK] ");
|
||||
#endif /* HAVE_LSTAT */
|
||||
else
|
||||
Strcat_charp(tmp, "[FILE] ");
|
||||
}
|
||||
Strcat_m_charp(tmp, "<A HREF=\"", file_to_url(fbuf->ptr), NULL);
|
||||
Strcat_m_charp(tmp, "<A HREF=\"", html_quote(file_quote(p)), NULL);
|
||||
if (S_ISDIR(st.st_mode))
|
||||
Strcat_char(tmp, '/');
|
||||
Strcat_m_charp(tmp, "\">", html_quote(conv_from_system(p)), NULL);
|
||||
if (S_ISDIR(st.st_mode))
|
||||
Strcat_char(tmp, '/');
|
||||
Strcat_charp(tmp, "</a>");
|
||||
Strcat_charp(tmp, "</A>");
|
||||
if (multicolList) {
|
||||
if (n++ == nrow) {
|
||||
Strcat_charp(tmp, "</NOBR></TD>\n");
|
||||
@@ -149,15 +151,11 @@ dirBuffer(char *dname)
|
||||
}
|
||||
}
|
||||
if (multicolList) {
|
||||
Strcat_charp(tmp, "</TR></TABLE>\n");
|
||||
Strcat_charp(tmp, "</TR>\n</TABLE>\n");
|
||||
}
|
||||
Strcat_charp(tmp, "</BODY>\n</HTML>\n");
|
||||
|
||||
buf = loadHTMLString(tmp);
|
||||
#ifdef JP_CHARSET
|
||||
if (buf)
|
||||
buf->document_code = SystemCode;
|
||||
#endif
|
||||
return buf;
|
||||
return tmp;
|
||||
}
|
||||
|
||||
static int
|
||||
@@ -364,6 +362,7 @@ localcgi_popen_r(FILE ** p_fp)
|
||||
close(fd[1]);
|
||||
|
||||
close(fd[0]);
|
||||
close_all_fds(2);
|
||||
}
|
||||
else {
|
||||
close(fd[1]);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* $Id: main.c,v 1.191 2003/01/11 16:17:43 ukai Exp $ */
|
||||
/* $Id: main.c,v 1.192 2003/01/15 16:11:43 ukai Exp $ */
|
||||
#define MAINPROGRAM
|
||||
#include "fm.h"
|
||||
#include <signal.h>
|
||||
@@ -889,7 +889,8 @@ main(int argc, char **argv, char **envp)
|
||||
else if (newbuf == NO_BUFFER)
|
||||
continue;
|
||||
if (newbuf->pagerSource ||
|
||||
(newbuf->currentURL.file && strcmp(newbuf->currentURL.file, "-")))
|
||||
(newbuf->real_scheme == SCM_LOCAL && newbuf->header_source &&
|
||||
newbuf->currentURL.file && strcmp(newbuf->currentURL.file, "-")))
|
||||
newbuf->search_header = search_header;
|
||||
if (CurrentTab == NULL) {
|
||||
FirstTab = LastTab = CurrentTab = newTab();
|
||||
@@ -928,6 +929,8 @@ main(int argc, char **argv, char **envp)
|
||||
}
|
||||
}
|
||||
if (w3m_dump) {
|
||||
if (err_msg->length)
|
||||
fprintf(stderr, "%s", err_msg->ptr);
|
||||
#ifdef USE_COOKIE
|
||||
save_cookies();
|
||||
#endif /* USE_COOKIE */
|
||||
@@ -4409,7 +4412,9 @@ vwSrc(void)
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (Currentbuf->real_scheme == SCM_LOCAL) {
|
||||
else if (Currentbuf->real_scheme == SCM_LOCAL &&
|
||||
!(Currentbuf->real_type &&
|
||||
!strcasecmp(Currentbuf->real_type, "local:directory"))) {
|
||||
fn = Currentbuf->filename;
|
||||
}
|
||||
else {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* $Id: news.c,v 1.11 2003/01/10 17:06:25 ukai Exp $ */
|
||||
/* $Id: news.c,v 1.12 2003/01/15 16:11:43 ukai Exp $ */
|
||||
#include "fm.h"
|
||||
#include "myctype.h"
|
||||
#include <stdio.h>
|
||||
@@ -33,14 +33,18 @@ KeyAbort(SIGNAL_ARG)
|
||||
}
|
||||
|
||||
static Str
|
||||
news_command(News * news, char *command, int *status)
|
||||
news_command(News * news, char *cmd, char *arg, int *status)
|
||||
{
|
||||
Str tmp;
|
||||
|
||||
if (!news->host)
|
||||
return NULL;
|
||||
if (command) {
|
||||
fprintf(news->wf, "%s\r\n", command);
|
||||
if (cmd) {
|
||||
if (arg)
|
||||
tmp = Sprintf("%s %s\r\n", cmd, arg);
|
||||
else
|
||||
tmp = Sprintf("%s\r\n", cmd);
|
||||
fwrite(tmp->ptr, tmp->length, sizeof(char), news->wf);
|
||||
fflush(news->wf);
|
||||
}
|
||||
if (!status)
|
||||
@@ -82,11 +86,11 @@ news_open(News * news)
|
||||
if (!news->rf || !news->wf)
|
||||
goto open_err;
|
||||
IStype(news->rf) |= IST_UNCLOSE;
|
||||
news_command(news, NULL, &status);
|
||||
news_command(news, NULL, NULL, &status);
|
||||
if (status != 200 && status != 201)
|
||||
goto open_err;
|
||||
if (news->mode) {
|
||||
news_command(news, Sprintf("MODE %s", news->mode)->ptr, &status);
|
||||
news_command(news, "MODE", news->mode, &status);
|
||||
if (status != 200 && status != 201)
|
||||
goto open_err;
|
||||
}
|
||||
@@ -99,7 +103,7 @@ news_open(News * news)
|
||||
static void
|
||||
news_quit(News * news)
|
||||
{
|
||||
news_command(news, "QUIT", NULL);
|
||||
news_command(news, "QUIT", NULL, NULL);
|
||||
news_close(news);
|
||||
}
|
||||
|
||||
@@ -257,8 +261,8 @@ openNewsStream(ParsedURL *pu)
|
||||
mode = NULL;
|
||||
if (current_news.host) {
|
||||
if (!strcmp(current_news.host, host) && current_news.port == port) {
|
||||
tmp = Sprintf("MODE %s", mode ? mode : "READER");
|
||||
tmp = news_command(¤t_news, tmp->ptr, &status);
|
||||
tmp = news_command(¤t_news, "MODE", mode ? mode : "READER",
|
||||
&status);
|
||||
if (status != 200 && status != 201)
|
||||
news_close(¤t_news);
|
||||
}
|
||||
@@ -283,17 +287,15 @@ openNewsStream(ParsedURL *pu)
|
||||
}
|
||||
else { /* <newsgroup>/<message-id or article-number> */
|
||||
*p++ = '\0';
|
||||
news_command(¤t_news, Sprintf("GROUP %s", group)->ptr,
|
||||
&status);
|
||||
news_command(¤t_news, "GROUP", group, &status);
|
||||
if (status != 211)
|
||||
return NULL;
|
||||
}
|
||||
if (strchr(p, '@')) /* <message-id> */
|
||||
news_command(¤t_news, Sprintf("ARTICLE <%s>", p)->ptr,
|
||||
news_command(¤t_news, "ARTICLE", Sprintf("<%s>", p)->ptr,
|
||||
&status);
|
||||
else /* <article-number> */
|
||||
news_command(¤t_news, Sprintf("ARTICLE %s", p)->ptr,
|
||||
&status);
|
||||
news_command(¤t_news, "ARTICLE", p, &status);
|
||||
if (status != 220)
|
||||
return NULL;
|
||||
return current_news.rf;
|
||||
@@ -302,7 +304,7 @@ openNewsStream(ParsedURL *pu)
|
||||
}
|
||||
|
||||
Str
|
||||
readNewsgroup(ParsedURL *pu)
|
||||
loadNewsgroup(ParsedURL *pu, char *code)
|
||||
{
|
||||
volatile Str page;
|
||||
Str tmp;
|
||||
@@ -312,11 +314,13 @@ readNewsgroup(ParsedURL *pu)
|
||||
char *volatile scheme, *volatile group, *volatile list;
|
||||
int status, i, first, last;
|
||||
volatile int flag = 0, start = 0, end = 0;
|
||||
char code = '\0';
|
||||
MySignalHandler(*volatile trap) (SIGNAL_ARG) = NULL;
|
||||
|
||||
if (current_news.host == NULL || !pu->file || *pu->file == '\0')
|
||||
return NULL;
|
||||
#ifdef JP_CHARSET
|
||||
*code = DocumentCode;
|
||||
#endif
|
||||
group = allocStr(pu->file, -1);
|
||||
if (pu->scheme == SCM_NNTP_GROUP)
|
||||
scheme = "/";
|
||||
@@ -332,12 +336,15 @@ readNewsgroup(ParsedURL *pu)
|
||||
}
|
||||
qgroup = html_quote(group);
|
||||
group = file_unquote(group);
|
||||
page = Sprintf("<title>Newsgroup: %s</title>\n\
|
||||
<h1>Newsgroup: %s</h1>\n<hr>\n", qgroup, qgroup);
|
||||
page = Strnew_m_charp("<html>\n<head>\n<base href=\"",
|
||||
parsedURL2Str(pu)->ptr, "\">\n<title>Newsgroup: ",
|
||||
qgroup, "</title>\n</head>\n<body>\n<h1>Newsgroup: ",
|
||||
qgroup, "</h1>\n<hr>\n", NULL);
|
||||
|
||||
if (SETJMP(AbortLoading) != 0) {
|
||||
news_close(¤t_news);
|
||||
Strcat_charp(page, "</table><p>Transfer Interrupted!\n");
|
||||
Strcat_charp(page,
|
||||
"</table>\n<p>Transfer Interrupted!\n");
|
||||
goto news_end;
|
||||
}
|
||||
trap = signal(SIGINT, KeyAbort);
|
||||
@@ -345,7 +352,7 @@ readNewsgroup(ParsedURL *pu)
|
||||
term_cbreak();
|
||||
|
||||
tmp =
|
||||
news_command(¤t_news, Sprintf("GROUP %s", group)->ptr, &status);
|
||||
news_command(¤t_news, "GROUP", group, &status);
|
||||
if (status != 211)
|
||||
goto news_list;
|
||||
if (sscanf(tmp->ptr, "%d %d %d %d", &status, &i, &first, &last) != 4)
|
||||
@@ -369,8 +376,11 @@ readNewsgroup(ParsedURL *pu)
|
||||
if (end - start > MaxNewsMessage - 1)
|
||||
start = end - MaxNewsMessage + 1;
|
||||
}
|
||||
page = Sprintf("<title>Newsgroup: %s %d-%d</title>\n\
|
||||
<h1>Newsgroup: %s %d-%d</h1>\n<hr>\n", qgroup, start, end, qgroup, start, end);
|
||||
page = Sprintf("<html>\n<head>\n<base href=\"%s\">\n\
|
||||
<title>Newsgroup: %s %d-%d</title>\n\
|
||||
</head>\n<body>\n<h1>Newsgroup: %s %d-%d</h1>\n<hr>\n",
|
||||
parsedURL2Str(pu)->ptr, qgroup, start, end, qgroup, start,
|
||||
end);
|
||||
if (start > first) {
|
||||
i = start - MaxNewsMessage;
|
||||
if (i < first)
|
||||
@@ -380,7 +390,7 @@ readNewsgroup(ParsedURL *pu)
|
||||
}
|
||||
|
||||
Strcat_charp(page, "<table>\n");
|
||||
news_command(¤t_news, Sprintf("XOVER %d-%d", start, end)->ptr,
|
||||
news_command(¤t_news, "XOVER", Sprintf("%d-%d", start, end)->ptr,
|
||||
&status);
|
||||
if (status == 224) {
|
||||
f.scheme = SCM_NEWS;
|
||||
@@ -407,8 +417,8 @@ readNewsgroup(ParsedURL *pu)
|
||||
if (!(q = strchr(p, '>')) && !(q = strchr(p, '\t')))
|
||||
continue;
|
||||
*q = '\0';
|
||||
s = convertLine(&f, decodeMIME(s), &code, HEADER_MODE)->ptr;
|
||||
n = convertLine(&f, decodeMIME(n), &code, HEADER_MODE)->ptr;
|
||||
s = convertLine(&f, decodeMIME(s), code, HEADER_MODE)->ptr;
|
||||
n = convertLine(&f, decodeMIME(n), code, HEADER_MODE)->ptr;
|
||||
add_news_message(page, i, t, n, s, p, scheme,
|
||||
pu->scheme == SCM_NNTP_GROUP ? qgroup : NULL);
|
||||
}
|
||||
@@ -417,7 +427,7 @@ readNewsgroup(ParsedURL *pu)
|
||||
init_stream(&f, SCM_NEWS, current_news.rf);
|
||||
buf = newBuffer(INIT_BUFFER_WIDTH);
|
||||
for (i = start; i <= end && i <= last; i++) {
|
||||
news_command(¤t_news, Sprintf("HEAD %d", i)->ptr, &status);
|
||||
news_command(¤t_news, "HEAD", Sprintf("%d", i)->ptr, &status);
|
||||
if (status != 221)
|
||||
continue;
|
||||
readHeader(&f, buf, FALSE, NULL);
|
||||
@@ -449,10 +459,10 @@ readNewsgroup(ParsedURL *pu)
|
||||
flag = 1;
|
||||
|
||||
news_list:
|
||||
tmp = Sprintf("LIST ACTIVE %s", group);
|
||||
tmp = Sprintf("ACTIVE %s", group);
|
||||
if (!strchr(group, '*'))
|
||||
Strcat_charp(tmp, ".*");
|
||||
news_command(¤t_news, tmp->ptr, &status);
|
||||
news_command(¤t_news, "LIST", tmp->ptr, &status);
|
||||
if (status != 215)
|
||||
goto news_end;
|
||||
while (1) {
|
||||
@@ -481,12 +491,19 @@ readNewsgroup(ParsedURL *pu)
|
||||
Strcat_charp(page, "</table>\n");
|
||||
|
||||
news_end:
|
||||
Strcat_charp(page, "</body>\n</html>\n");
|
||||
if (fmInitialized)
|
||||
term_raw();
|
||||
signal(SIGINT, trap);
|
||||
return page;
|
||||
}
|
||||
|
||||
void
|
||||
closeNews(void)
|
||||
{
|
||||
news_close(¤t_news);
|
||||
}
|
||||
|
||||
void
|
||||
disconnectNews(void)
|
||||
{
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* $Id: proto.h,v 1.77 2003/01/11 15:54:09 ukai Exp $ */
|
||||
/* $Id: proto.h,v 1.78 2003/01/15 16:11:43 ukai Exp $ */
|
||||
/*
|
||||
* This file was automatically generated by version 1.7 of cextract.
|
||||
* Manual editing not recommended.
|
||||
@@ -218,7 +218,7 @@ extern void loadHTMLstream(URLFile *f, Buffer *newBuf, FILE * src,
|
||||
int internal);
|
||||
extern Buffer *loadHTMLString(Str page);
|
||||
#ifdef USE_GOPHER
|
||||
extern Buffer *loadGopherDir(URLFile *uf, Buffer *newBuf);
|
||||
extern Str loadGopherDir(URLFile *uf, ParsedURL *pu, char *code);
|
||||
#endif /* USE_GOPHER */
|
||||
extern Buffer *loadBuffer(URLFile *uf, Buffer *newBuf);
|
||||
#ifdef USE_IMAGE
|
||||
@@ -477,6 +477,8 @@ extern char checkShiftCode(Str buf, unsigned char hint);
|
||||
extern char str_to_code(char *str);
|
||||
extern char *code_to_str(char code);
|
||||
extern void put_sjis(Str os, unsigned char ub, unsigned char lb);
|
||||
#else
|
||||
#define conv_str(is, fc, tc) (is)
|
||||
#endif /* JP_CHARSET */
|
||||
extern void initMimeTypes();
|
||||
extern void free_ssl_ctx();
|
||||
@@ -506,12 +508,13 @@ extern char *guessContentType(char *filename);
|
||||
extern TextList *make_domain_list(char *domain_list);
|
||||
extern int check_no_proxy(char *domain);
|
||||
extern InputStream openFTPStream(ParsedURL *pu, URLFile *uf);
|
||||
extern Str readFTPDir(ParsedURL *pu);
|
||||
extern Str loadFTPDir(ParsedURL *pu, char *code);
|
||||
extern void closeFTP(void);
|
||||
extern void disconnectFTP(void);
|
||||
#ifdef USE_NNTP
|
||||
extern InputStream openNewsStream(ParsedURL *pu);
|
||||
extern Str readNewsgroup(ParsedURL *pu);
|
||||
extern Str loadNewsgroup(ParsedURL *pu, char *code);
|
||||
extern void closeNews(void);
|
||||
extern void disconnectNews(void);
|
||||
#endif
|
||||
extern AnchorList *putAnchor(AnchorList *al, char *url, char *target,
|
||||
@@ -569,7 +572,7 @@ extern char *auxbinFile(char *base);
|
||||
extern char *libFile(char *base);
|
||||
extern char *helpFile(char *base);
|
||||
extern void setLocalCookie(void);
|
||||
extern Buffer *dirBuffer(char *dirname);
|
||||
extern Str loadLocalDir(char *dirname);
|
||||
extern void set_environ(char *var, char *value);
|
||||
extern FILE *localcgi_post(char *, char *, FormList *, char *);
|
||||
extern FILE *localcgi_get(char *, char *, char *);
|
||||
@@ -585,7 +588,8 @@ extern char *last_modified(Buffer *buf);
|
||||
extern Str romanNumeral(int n);
|
||||
extern Str romanAlphabet(int n);
|
||||
extern void reset_signals(void);
|
||||
extern void close_all_fds(int i);
|
||||
extern void close_all_fds_except(int i, int f);
|
||||
#define close_all_fds(i) close_all_fds_except(i, -1)
|
||||
#ifdef HAVE_SETPGRP
|
||||
extern void myExec(char *command);
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user