[w3m-dev 02592] Accept: and AcceptEncoding:
From: Fumitoshi UKAI <ukai@debian.or.jp>
This commit is contained in:
@@ -1,3 +1,45 @@
|
|||||||
|
2001-11-30 Fumitoshi UKAI <ukai@debian.or.jp>
|
||||||
|
|
||||||
|
* [w3m-dev 02592] Accept: and AcceptEncoding:
|
||||||
|
* url.c (otherinfo): use acceptableEncoding() acceptableMimeTypes()
|
||||||
|
|
||||||
|
* file.c: add compression_decoder
|
||||||
|
* file.c (check_compress): rewrite by using compression_decoder
|
||||||
|
* file.c (compress_application_type): ditto
|
||||||
|
* file.c (uncompressed_file_type): ditto
|
||||||
|
* file.c (check_command): added
|
||||||
|
* file.c (acceptableEncoding): added
|
||||||
|
* proto.h (acceptableEncoding): ditto
|
||||||
|
* file.c (uncompress_stream): renamed from gunzip_stream
|
||||||
|
* file.c (uncompress_stream): rewrite by using compression_decoder
|
||||||
|
* configure: add PATH_SEPARATOR
|
||||||
|
|
||||||
|
* mailcap.c (extractMailcapEntry): static
|
||||||
|
* mailcap.c (loadMailcap): static
|
||||||
|
* proto.h (loadMailcap): removed
|
||||||
|
* mailcap.c (acceptableMimeTypes): added
|
||||||
|
* proto.h (acceptableMimeTypes): added
|
||||||
|
|
||||||
|
* configure: #define USE_PATH_ENVVAR for __EMX__
|
||||||
|
* file.c: GUNZIP_*, BUNZIP2_*, INFLATE_* removed here -> config.h
|
||||||
|
* file.c (gunzip_stream): s/(GUNZIP|BUNZIP2|INFLATE)_CMD/\1_CMDNAME/
|
||||||
|
* configure (config.h): GUNZIP_*, BUNZIP2_*, INFLATE_* moved here
|
||||||
|
* fm.h (DirBufferCommand): use CGI_EXTENSION
|
||||||
|
* fm.h (mailcap_list): removed from global -> mailcap.c
|
||||||
|
* fm.h (UserMailcap): removed from global -> mailcap.c
|
||||||
|
* mailcap.c: static mailcap_list
|
||||||
|
* mailcap.c: static UserMailcap
|
||||||
|
* proto.h (initMimeTypes): moved
|
||||||
|
* proto.h (get_os2_dft): removed
|
||||||
|
* rc.c (loadMimeTypes): removed here -> url.c
|
||||||
|
* rc.c (initMimeTypes): removed here -> url.c
|
||||||
|
* fm.h (mimetypes_list): removed from global -> url.c
|
||||||
|
* fm.h (UserMimeTypes): removed from global -> url.c
|
||||||
|
* url.c: static mimetypes_list
|
||||||
|
* url.c: static UserMimeTypes
|
||||||
|
* url.c (loadMimeTypes): moved here
|
||||||
|
* url.c (initMimeTypes): moved here
|
||||||
|
|
||||||
2001-11-30 Tsutomu Okada <okada@furuno.co.jp>
|
2001-11-30 Tsutomu Okada <okada@furuno.co.jp>
|
||||||
|
|
||||||
* [w3m-dev 02590]
|
* [w3m-dev 02590]
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# $Id: configure,v 1.27 2001/11/29 11:09:23 ukai Exp $
|
# $Id: configure,v 1.28 2001/11/30 09:54:22 ukai Exp $
|
||||||
# Configuration.
|
# Configuration.
|
||||||
#
|
#
|
||||||
|
|
||||||
@@ -2067,12 +2067,19 @@ $def_ipv6_ss_family
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__EMX__) /* use \$extension? */
|
#if defined(__EMX__) /* use \$extension? */
|
||||||
|
#define GUNZIP_CMDNAME "gzip"
|
||||||
|
#define BUNZIP2_CMDNAME "bzip2"
|
||||||
|
#define INFLATE_CMDNAME "inflate.exe"
|
||||||
#define W3MBOOKMARK_CMDNAME "w3mbookmark.exe"
|
#define W3MBOOKMARK_CMDNAME "w3mbookmark.exe"
|
||||||
#define W3MHELPERPANEL_CMDNAME "w3mhelperpanel.exe"
|
#define W3MHELPERPANEL_CMDNAME "w3mhelperpanel.exe"
|
||||||
#define DEV_NULL_PATH "nul"
|
#define DEV_NULL_PATH "nul"
|
||||||
#define DEV_TTY_PATH "con"
|
#define DEV_TTY_PATH "con"
|
||||||
#define CGI_EXTENSION ".cmd"
|
#define CGI_EXTENSION ".cmd"
|
||||||
|
#define USE_PATH_ENVVAR
|
||||||
#else
|
#else
|
||||||
|
#define GUNZIP_CMDNAME "gunzip"
|
||||||
|
#define BUNZIP2_CMDNAME "bunzip2"
|
||||||
|
#define INFLATE_CMDNAME "inflate"
|
||||||
#define W3MBOOKMARK_CMDNAME "w3mbookmark"
|
#define W3MBOOKMARK_CMDNAME "w3mbookmark"
|
||||||
#define W3MHELPERPANEL_CMDNAME "w3mhelperpanel"
|
#define W3MHELPERPANEL_CMDNAME "w3mhelperpanel"
|
||||||
#define DEV_NULL_PATH "/dev/null"
|
#define DEV_NULL_PATH "/dev/null"
|
||||||
@@ -2080,6 +2087,11 @@ $def_ipv6_ss_family
|
|||||||
#define CGI_EXTENSION ".cgi"
|
#define CGI_EXTENSION ".cgi"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define PATH_SEPARATOR ':'
|
||||||
|
#define GUNZIP_NAME "gunzip"
|
||||||
|
#define BUNZIP2_NAME "bunzip2"
|
||||||
|
#define INFLATE_NAME "inflate"
|
||||||
|
|
||||||
#endif /* makefile_parameter */
|
#endif /* makefile_parameter */
|
||||||
#endif /* _CONFIGURED_ */
|
#endif /* _CONFIGURED_ */
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: file.c,v 1.19 2001/11/29 10:48:12 ukai Exp $ */
|
/* $Id: file.c,v 1.20 2001/11/30 09:54:22 ukai Exp $ */
|
||||||
#include "fm.h"
|
#include "fm.h"
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include "myctype.h"
|
#include "myctype.h"
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
#define min(a,b) ((a) > (b) ? (b) : (a))
|
#define min(a,b) ((a) > (b) ? (b) : (a))
|
||||||
#endif /* not min */
|
#endif /* not min */
|
||||||
|
|
||||||
static void gunzip_stream(URLFile *uf);
|
static void uncompress_stream(URLFile *uf);
|
||||||
static FILE *lessopen_stream(char *path);
|
static FILE *lessopen_stream(char *path);
|
||||||
static Buffer *loadcmdout(char *cmd,
|
static Buffer *loadcmdout(char *cmd,
|
||||||
Buffer *(*loadproc) (URLFile *, Buffer *),
|
Buffer *(*loadproc) (URLFile *, Buffer *),
|
||||||
@@ -143,6 +143,26 @@ char *violations[COO_EMAX] = {
|
|||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static struct compression_decoder {
|
||||||
|
int type;
|
||||||
|
char *ext;
|
||||||
|
char *mime_type;
|
||||||
|
int libfile_p;
|
||||||
|
char *cmd;
|
||||||
|
char *name;
|
||||||
|
char *encoding;
|
||||||
|
} compression_decoders[] = {
|
||||||
|
{CMP_COMPRESS, ".gz", "application/x-gzip",
|
||||||
|
0, GUNZIP_CMDNAME, GUNZIP_NAME, "gzip"},
|
||||||
|
{CMP_COMPRESS, ".Z", "application/x-compress",
|
||||||
|
0, GUNZIP_CMDNAME, GUNZIP_NAME, "compress"},
|
||||||
|
{CMP_BZIP2, ".bz2", "application/x-bzip",
|
||||||
|
0, BUNZIP2_CMDNAME, BUNZIP2_NAME, "bzip, bzip2"},
|
||||||
|
{CMP_DEFLATE, NULL, "application/x-deflate",
|
||||||
|
1, INFLATE_CMDNAME, INFLATE_NAME, "deflate"},
|
||||||
|
{CMP_NOCOMPRESS, NULL, NULL, 0, NULL, NULL, NULL},
|
||||||
|
};
|
||||||
|
|
||||||
#define SAVE_BUF_SIZE 1536
|
#define SAVE_BUF_SIZE 1536
|
||||||
|
|
||||||
static MySignalHandler
|
static MySignalHandler
|
||||||
@@ -223,41 +243,36 @@ static void
|
|||||||
check_compression(char *path, URLFile *uf)
|
check_compression(char *path, URLFile *uf)
|
||||||
{
|
{
|
||||||
int len;
|
int len;
|
||||||
|
struct compression_decoder *d;
|
||||||
|
|
||||||
if (path == NULL)
|
if (path == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
len = strlen(path);
|
len = strlen(path);
|
||||||
uf->compression = CMP_NOCOMPRESS;
|
uf->compression = CMP_NOCOMPRESS;
|
||||||
if (len > 2 && strcasecmp(&path[len - 2], ".Z") == 0) {
|
for (d = compression_decoders; d->type != CMP_NOCOMPRESS; d++) {
|
||||||
uf->compression = CMP_COMPRESS;
|
int elen;
|
||||||
uf->guess_type = "application/x-compress";
|
if (d->ext == NULL)
|
||||||
}
|
continue;
|
||||||
else if (len > 3 && strcasecmp(&path[len - 3], ".gz") == 0) {
|
elen = strlen(d->ext);
|
||||||
uf->compression = CMP_GZIP;
|
if (len > elen && strcasecmp(&path[len - elen], d->ext) == 0) {
|
||||||
uf->guess_type = "application/x-gzip";
|
uf->compression = d->type;
|
||||||
}
|
uf->guess_type = d->mime_type;
|
||||||
else if (len > 4 && strcasecmp(&path[len - 4], ".bz2") == 0) {
|
break;
|
||||||
uf->compression = CMP_BZIP2;
|
}
|
||||||
uf->guess_type = "application/x-bzip";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
compress_application_type(int compression)
|
compress_application_type(int compression)
|
||||||
{
|
{
|
||||||
switch (compression) {
|
struct compression_decoder *d;
|
||||||
case CMP_COMPRESS:
|
|
||||||
return "application/x-compress";
|
for (d = compression_decoders; d->type != CMP_NOCOMPRESS; d++) {
|
||||||
case CMP_GZIP:
|
if (d->type == compression)
|
||||||
return "application/x-gzip";
|
return d->mime_type;
|
||||||
case CMP_BZIP2:
|
|
||||||
return "application/x-bzip";
|
|
||||||
case CMP_DEFLATE:
|
|
||||||
return "application/x-deflate";
|
|
||||||
default:
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
@@ -266,21 +281,20 @@ uncompressed_file_type(char *path, char **ext)
|
|||||||
int len, slen;
|
int len, slen;
|
||||||
Str fn;
|
Str fn;
|
||||||
char *t0;
|
char *t0;
|
||||||
|
struct compression_decoder *d;
|
||||||
|
|
||||||
if (path == NULL)
|
if (path == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
len = strlen(path);
|
len = strlen(path);
|
||||||
if (len > 2 && strcasecmp(&path[len - 2], ".Z") == 0) {
|
for (d = compression_decoders; d->type != CMP_NOCOMPRESS; d++) {
|
||||||
slen = 2;
|
if (d->ext == NULL)
|
||||||
|
continue;
|
||||||
|
slen = strlen(d->ext);
|
||||||
|
if (len > slen && strcasecmp(&path[len - slen], d->ext) == 0)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
else if (len > 3 && strcasecmp(&path[len - 3], ".gz") == 0) {
|
if (d->type == CMP_NOCOMPRESS)
|
||||||
slen = 3;
|
|
||||||
}
|
|
||||||
else if (len > 4 && strcasecmp(&path[len - 4], ".bz2") == 0) {
|
|
||||||
slen = 4;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
fn = Strnew_charp(path);
|
fn = Strnew_charp(path);
|
||||||
@@ -326,12 +340,71 @@ examineFile(char *path, URLFile *uf)
|
|||||||
char *t0 = uncompressed_file_type(path, &ext);
|
char *t0 = uncompressed_file_type(path, &ext);
|
||||||
uf->guess_type = t0;
|
uf->guess_type = t0;
|
||||||
uf->ext = ext;
|
uf->ext = ext;
|
||||||
gunzip_stream(uf);
|
uncompress_stream(uf);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define S_IXANY (S_IXUSR|S_IXGRP|S_IXOTH)
|
||||||
|
|
||||||
|
int
|
||||||
|
check_command(char *cmd, int libfile_p)
|
||||||
|
{
|
||||||
|
static char *path = NULL;
|
||||||
|
Str dirs;
|
||||||
|
char *p, *np;
|
||||||
|
Str pathname;
|
||||||
|
struct stat st;
|
||||||
|
|
||||||
|
if (path == NULL)
|
||||||
|
path = getenv("PATH");
|
||||||
|
if (libfile_p)
|
||||||
|
dirs = Strnew_charp(w3m_lib_dir());
|
||||||
|
else
|
||||||
|
dirs = Strnew_charp(path);
|
||||||
|
for (p = dirs->ptr; p != NULL; p = np) {
|
||||||
|
np = strchr(p, PATH_SEPARATOR);
|
||||||
|
if (np)
|
||||||
|
*np++ = '\0';
|
||||||
|
pathname = Strnew();
|
||||||
|
Strcat_charp(pathname, p);
|
||||||
|
Strcat_char(pathname, '/');
|
||||||
|
Strcat_charp(pathname, cmd);
|
||||||
|
if (stat(pathname->ptr, &st) == 0
|
||||||
|
&& S_ISREG(st.st_mode)
|
||||||
|
&& (st.st_mode & S_IXANY) != 0)
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *
|
||||||
|
acceptableEncoding()
|
||||||
|
{
|
||||||
|
static Str encodings = NULL;
|
||||||
|
struct compression_decoder *d;
|
||||||
|
TextList *l;
|
||||||
|
char *p;
|
||||||
|
|
||||||
|
if (encodings != NULL)
|
||||||
|
return encodings->ptr;
|
||||||
|
l = newTextList();
|
||||||
|
for (d = compression_decoders; d->type != CMP_NOCOMPRESS; d++) {
|
||||||
|
if (check_command(d->cmd, d->libfile_p)) {
|
||||||
|
pushText(l, d->encoding);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while ((p = popText(l)) != NULL) {
|
||||||
|
if (encodings == NULL)
|
||||||
|
encodings = Strnew();
|
||||||
|
else
|
||||||
|
Strcat_charp(encodings, ", ");
|
||||||
|
Strcat_charp(encodings, p);
|
||||||
|
}
|
||||||
|
return encodings->ptr;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* convert line
|
* convert line
|
||||||
*/
|
*/
|
||||||
@@ -1263,7 +1336,7 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
|
|||||||
if (!(w3m_dump & DUMP_SOURCE) &&
|
if (!(w3m_dump & DUMP_SOURCE) &&
|
||||||
(w3m_dump & ~DUMP_FRAME || is_text_type(t)
|
(w3m_dump & ~DUMP_FRAME || is_text_type(t)
|
||||||
|| searchExtViewer(t))) {
|
|| searchExtViewer(t))) {
|
||||||
gunzip_stream(&f);
|
uncompress_stream(&f);
|
||||||
uncompressed_file_type(pu.file, &f.ext);
|
uncompressed_file_type(pu.file, &f.ext);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -5961,46 +6034,29 @@ checkOverWrite(char *path)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __EMX__
|
|
||||||
#define GUNZIP_CMD "gzip"
|
|
||||||
#define BUNZIP2_CMD "bzip2"
|
|
||||||
#define INFLATE_CMD libFile("inflate.exe")
|
|
||||||
#else /* not __EMX__ */
|
|
||||||
#define GUNZIP_CMD "gunzip"
|
|
||||||
#define BUNZIP2_CMD "bunzip2"
|
|
||||||
#define INFLATE_CMD libFile("inflate")
|
|
||||||
#endif /* not __EMX__ */
|
|
||||||
#define GUNZIP_NAME "gunzip"
|
|
||||||
#define BUNZIP2_NAME "bunzip2"
|
|
||||||
#define INFLATE_NAME "inflate"
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gunzip_stream(URLFile *uf)
|
uncompress_stream(URLFile *uf)
|
||||||
{
|
{
|
||||||
int pid1;
|
int pid1;
|
||||||
int fd1[2];
|
int fd1[2];
|
||||||
char *expand_cmd = GUNZIP_CMD;
|
char *expand_cmd = GUNZIP_CMDNAME;
|
||||||
char *expand_name = GUNZIP_NAME;
|
char *expand_name = GUNZIP_NAME;
|
||||||
char *tmpf = NULL;
|
char *tmpf = NULL;
|
||||||
|
struct compression_decoder *d;
|
||||||
|
|
||||||
if (IStype(uf->stream) != IST_ENCODED) {
|
if (IStype(uf->stream) != IST_ENCODED) {
|
||||||
uf->stream = newEncodedStream(uf->stream, uf->encoding);
|
uf->stream = newEncodedStream(uf->stream, uf->encoding);
|
||||||
uf->encoding = ENC_7BIT;
|
uf->encoding = ENC_7BIT;
|
||||||
}
|
}
|
||||||
switch (uf->compression) {
|
for (d = compression_decoders; d->type != CMP_NOCOMPRESS; d++) {
|
||||||
case CMP_COMPRESS:
|
if (uf->compression == d->type) {
|
||||||
case CMP_GZIP:
|
if (d->libfile_p)
|
||||||
expand_cmd = GUNZIP_CMD;
|
expand_cmd = libFile(d->cmd);
|
||||||
expand_name = GUNZIP_NAME;
|
else
|
||||||
break;
|
expand_cmd = d->cmd;
|
||||||
case CMP_BZIP2:
|
expand_name = d->name;
|
||||||
expand_cmd = BUNZIP2_CMD;
|
break;
|
||||||
expand_name = BUNZIP2_NAME;
|
}
|
||||||
break;
|
|
||||||
case CMP_DEFLATE:
|
|
||||||
expand_cmd = INFLATE_CMD;
|
|
||||||
expand_name = INFLATE_NAME;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
uf->compression = CMP_NOCOMPRESS;
|
uf->compression = CMP_NOCOMPRESS;
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: fm.h,v 1.23 2001/11/29 09:34:14 ukai Exp $ */
|
/* $Id: fm.h,v 1.24 2001/11/30 09:54:22 ukai Exp $ */
|
||||||
/*
|
/*
|
||||||
* w3m: WWW wo Miru utility
|
* w3m: WWW wo Miru utility
|
||||||
*
|
*
|
||||||
@@ -744,11 +744,7 @@ global char *BookmarkFile init(NULL);
|
|||||||
global char *pauth init(NULL);
|
global char *pauth init(NULL);
|
||||||
global Str proxy_auth_cookie init(NULL);
|
global Str proxy_auth_cookie init(NULL);
|
||||||
global int UseExternalDirBuffer init(TRUE);
|
global int UseExternalDirBuffer init(TRUE);
|
||||||
#ifdef __EMX__
|
global char *DirBufferCommand init("file:///$LIB/dirlist" CGI_EXTENSION);
|
||||||
global char *DirBufferCommand init("file:///$LIB/dirlist.cmd");
|
|
||||||
#else
|
|
||||||
global char *DirBufferCommand init("file:///$LIB/dirlist.cgi");
|
|
||||||
#endif /* __EMX__ */
|
|
||||||
global int ignore_null_img_alt init(TRUE);
|
global int ignore_null_img_alt init(TRUE);
|
||||||
|
|
||||||
global struct auth_cookie *Auth_cookie init(NULL);
|
global struct auth_cookie *Auth_cookie init(NULL);
|
||||||
@@ -757,10 +753,6 @@ global char *Local_cookie init(NULL);
|
|||||||
global struct cookie *First_cookie init(NULL);
|
global struct cookie *First_cookie init(NULL);
|
||||||
#endif /* USE_COOKIE */
|
#endif /* USE_COOKIE */
|
||||||
|
|
||||||
global struct mailcap **UserMailcap;
|
|
||||||
global struct table2 **UserMimeTypes;
|
|
||||||
global TextList *mailcap_list;
|
|
||||||
global TextList *mimetypes_list;
|
|
||||||
global char *mailcap_files init(USER_MAILCAP ", " SYS_MAILCAP);
|
global char *mailcap_files init(USER_MAILCAP ", " SYS_MAILCAP);
|
||||||
global char *mimetypes_files init(USER_MIMETYPES ", " SYS_MIMETYPES);
|
global char *mimetypes_files init(USER_MIMETYPES ", " SYS_MIMETYPES);
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: mailcap.c,v 1.7 2001/11/29 09:34:15 ukai Exp $ */
|
/* $Id: mailcap.c,v 1.8 2001/11/30 09:54:22 ukai Exp $ */
|
||||||
#include "fm.h"
|
#include "fm.h"
|
||||||
#include "myctype.h"
|
#include "myctype.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@@ -12,22 +12,8 @@ static struct mailcap DefaultMailcap[] = {
|
|||||||
{NULL, NULL, 0, NULL, NULL, NULL}
|
{NULL, NULL, 0, NULL, NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
void
|
static TextList *mailcap_list;
|
||||||
initMailcap()
|
static struct mailcap **UserMailcap;
|
||||||
{
|
|
||||||
int i;
|
|
||||||
TextListItem *tl;
|
|
||||||
|
|
||||||
if (non_null(mailcap_files))
|
|
||||||
mailcap_list = make_domain_list(mailcap_files);
|
|
||||||
else
|
|
||||||
mailcap_list = NULL;
|
|
||||||
if (mailcap_list == NULL)
|
|
||||||
return;
|
|
||||||
UserMailcap = New_N(struct mailcap *, mailcap_list->nitem);
|
|
||||||
for (i = 0, tl = mailcap_list->first; tl; i++, tl = tl->next)
|
|
||||||
UserMailcap[i] = loadMailcap(tl->ptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
int
|
||||||
mailcapMatch(struct mailcap *mcap, char *type)
|
mailcapMatch(struct mailcap *mcap, char *type)
|
||||||
@@ -124,7 +110,7 @@ matchMailcapAttr(char *p, char *attr, int len, Str *value)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
static int
|
||||||
extractMailcapEntry(char *mcap_entry, struct mailcap *mcap)
|
extractMailcapEntry(char *mcap_entry, struct mailcap *mcap)
|
||||||
{
|
{
|
||||||
int j, k;
|
int j, k;
|
||||||
@@ -193,7 +179,7 @@ extractMailcapEntry(char *mcap_entry, struct mailcap *mcap)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct mailcap *
|
static struct mailcap *
|
||||||
loadMailcap(char *filename)
|
loadMailcap(char *filename)
|
||||||
{
|
{
|
||||||
FILE *f;
|
FILE *f;
|
||||||
@@ -233,6 +219,70 @@ loadMailcap(char *filename)
|
|||||||
return mcap;
|
return mcap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
initMailcap()
|
||||||
|
{
|
||||||
|
TextListItem *tl;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (non_null(mailcap_files))
|
||||||
|
mailcap_list = make_domain_list(mailcap_files);
|
||||||
|
else
|
||||||
|
mailcap_list = NULL;
|
||||||
|
if (mailcap_list == NULL)
|
||||||
|
return;
|
||||||
|
UserMailcap = New_N(struct mailcap *, mailcap_list->nitem);
|
||||||
|
for (i = 0, tl = mailcap_list->first; tl; i++, tl = tl->next)
|
||||||
|
UserMailcap[i] = loadMailcap(tl->ptr);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
char *
|
||||||
|
acceptableMimeTypes()
|
||||||
|
{
|
||||||
|
static Str types = NULL;
|
||||||
|
TextList *l;
|
||||||
|
Hash_si *mhash;
|
||||||
|
char *p;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (types != NULL)
|
||||||
|
return types->ptr;
|
||||||
|
|
||||||
|
/* generate acceptable media types */
|
||||||
|
l = newTextList();
|
||||||
|
mhash = newHash_si(16); /* XXX */
|
||||||
|
pushText(l, "text");
|
||||||
|
putHash_si(mhash, "text", 1);
|
||||||
|
pushText(l, "image");
|
||||||
|
putHash_si(mhash, "image", 1);
|
||||||
|
for (i = 0; i < mailcap_list->nitem; i++) {
|
||||||
|
struct mailcap *mp = UserMailcap[i];
|
||||||
|
char *mt;
|
||||||
|
if (mp == NULL)
|
||||||
|
continue;
|
||||||
|
for (; mp->type; mp++) {
|
||||||
|
p = strchr(mp->type, '/');
|
||||||
|
if (p == NULL)
|
||||||
|
continue;
|
||||||
|
mt = allocStr(mp->type, p - mp->type);
|
||||||
|
if (getHash_si(mhash, mt, 0) == 0) {
|
||||||
|
pushText(l, mt);
|
||||||
|
putHash_si(mhash, mt, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while ((p = popText(l)) != NULL) {
|
||||||
|
if (types == NULL)
|
||||||
|
types = Strnew();
|
||||||
|
else
|
||||||
|
Strcat_charp(types, ", ");
|
||||||
|
Strcat_charp(types, p);
|
||||||
|
Strcat_charp(types, "/*");
|
||||||
|
}
|
||||||
|
return types->ptr;
|
||||||
|
}
|
||||||
|
|
||||||
struct mailcap *
|
struct mailcap *
|
||||||
searchExtViewer(char *type)
|
searchExtViewer(char *type)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: proto.h,v 1.10 2001/11/29 09:34:15 ukai Exp $ */
|
/* $Id: proto.h,v 1.11 2001/11/30 09:54:22 ukai Exp $ */
|
||||||
/*
|
/*
|
||||||
* This file was automatically generated by version 1.7 of cextract.
|
* This file was automatically generated by version 1.7 of cextract.
|
||||||
* Manual editing not recommended.
|
* Manual editing not recommended.
|
||||||
@@ -108,6 +108,7 @@ extern int currentLn(Buffer *buf);
|
|||||||
extern void tmpClearBuffer(Buffer *buf);
|
extern void tmpClearBuffer(Buffer *buf);
|
||||||
extern char *filename_extension(char *patch, int is_url);
|
extern char *filename_extension(char *patch, int is_url);
|
||||||
extern void examineFile(char *path, URLFile *uf);
|
extern void examineFile(char *path, URLFile *uf);
|
||||||
|
extern char *acceptableEncoding();
|
||||||
extern int dir_exist(char *path);
|
extern int dir_exist(char *path);
|
||||||
extern Str convertLine(URLFile *uf, Str line, char *code, int mode);
|
extern Str convertLine(URLFile *uf, Str line, char *code, int mode);
|
||||||
extern Buffer *loadFile(char *path);
|
extern Buffer *loadFile(char *path);
|
||||||
@@ -391,6 +392,7 @@ extern char str_to_code(char *str);
|
|||||||
extern char *code_to_str(char code);
|
extern char *code_to_str(char code);
|
||||||
extern void put_sjis(Str os, unsigned char ub, unsigned char lb);
|
extern void put_sjis(Str os, unsigned char ub, unsigned char lb);
|
||||||
#endif /* JP_CHARSET */
|
#endif /* JP_CHARSET */
|
||||||
|
extern void initMimeTypes();
|
||||||
extern void free_ssl_ctx();
|
extern void free_ssl_ctx();
|
||||||
extern ParsedURL *baseURL(Buffer *buf);
|
extern ParsedURL *baseURL(Buffer *buf);
|
||||||
extern int openSocket(char *hostname, char *remoteport_name,
|
extern int openSocket(char *hostname, char *remoteport_name,
|
||||||
@@ -410,9 +412,9 @@ extern TextList *make_domain_list(char *domain_list);
|
|||||||
extern int check_no_proxy(char *domain);
|
extern int check_no_proxy(char *domain);
|
||||||
extern char *filename_extension(char *path, int is_url);
|
extern char *filename_extension(char *path, int is_url);
|
||||||
extern int mailcapMatch(struct mailcap *mcap, char *type);
|
extern int mailcapMatch(struct mailcap *mcap, char *type);
|
||||||
extern struct mailcap *loadMailcap(char *filename);
|
|
||||||
extern struct mailcap *searchMailcap(struct mailcap *table, char *type);
|
extern struct mailcap *searchMailcap(struct mailcap *table, char *type);
|
||||||
extern void initMailcap();
|
extern void initMailcap();
|
||||||
|
extern char *acceptableMimeTypes();
|
||||||
extern struct mailcap *searchExtViewer(char *type);
|
extern struct mailcap *searchExtViewer(char *type);
|
||||||
extern Str unquote_mailcap(char *qstr, char *type, char *name, char *attr,
|
extern Str unquote_mailcap(char *qstr, char *type, char *name, char *attr,
|
||||||
int *mc_stat);
|
int *mc_stat);
|
||||||
@@ -577,7 +579,6 @@ extern char *guess_save_name(Buffer *buf, char *file);
|
|||||||
|
|
||||||
extern void wrapToggle(void);
|
extern void wrapToggle(void);
|
||||||
extern void saveBufferInfo(void);
|
extern void saveBufferInfo(void);
|
||||||
extern char *get_os2_dft(const char *, char *);
|
|
||||||
|
|
||||||
extern void dispVer(void);
|
extern void dispVer(void);
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: rc.c,v 1.17 2001/11/30 04:52:57 ukai Exp $ */
|
/* $Id: rc.c,v 1.18 2001/11/30 09:54:22 ukai Exp $ */
|
||||||
/*
|
/*
|
||||||
* Initialization file etc.
|
* Initialization file etc.
|
||||||
*/
|
*/
|
||||||
@@ -1072,73 +1072,6 @@ do_mkdir(const char *dir, long mode)
|
|||||||
#define do_mkdir(dir,mode) mkdir(dir,mode)
|
#define do_mkdir(dir,mode) mkdir(dir,mode)
|
||||||
#endif /* not __EMX__ */
|
#endif /* not __EMX__ */
|
||||||
|
|
||||||
struct table2 *
|
|
||||||
loadMimeTypes(char *filename)
|
|
||||||
{
|
|
||||||
FILE *f;
|
|
||||||
char *d, *type;
|
|
||||||
int i, n;
|
|
||||||
Str tmp;
|
|
||||||
struct table2 *mtypes;
|
|
||||||
|
|
||||||
f = fopen(expandName(filename), "r");
|
|
||||||
if (f == NULL)
|
|
||||||
return NULL;
|
|
||||||
n = 0;
|
|
||||||
while (tmp = Strfgets(f), tmp->length > 0) {
|
|
||||||
d = tmp->ptr;
|
|
||||||
if (d[0] != '#') {
|
|
||||||
d = strtok(d, " \t\n\r");
|
|
||||||
if (d != NULL) {
|
|
||||||
d = strtok(NULL, " \t\n\r");
|
|
||||||
for (i = 0; d != NULL; i++)
|
|
||||||
d = strtok(NULL, " \t\n\r");
|
|
||||||
n += i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fseek(f, 0, 0);
|
|
||||||
mtypes = New_N(struct table2, n + 1);
|
|
||||||
i = 0;
|
|
||||||
while (tmp = Strfgets(f), tmp->length > 0) {
|
|
||||||
d = tmp->ptr;
|
|
||||||
if (d[0] == '#')
|
|
||||||
continue;
|
|
||||||
type = strtok(d, " \t\n\r");
|
|
||||||
if (type == NULL)
|
|
||||||
continue;
|
|
||||||
while (1) {
|
|
||||||
d = strtok(NULL, " \t\n\r");
|
|
||||||
if (d == NULL)
|
|
||||||
break;
|
|
||||||
mtypes[i].item1 = Strnew_charp(d)->ptr;
|
|
||||||
mtypes[i].item2 = Strnew_charp(type)->ptr;
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
mtypes[i].item1 = NULL;
|
|
||||||
mtypes[i].item2 = NULL;
|
|
||||||
fclose(f);
|
|
||||||
return mtypes;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
initMimeTypes()
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
TextListItem *tl;
|
|
||||||
|
|
||||||
if (non_null(mimetypes_files))
|
|
||||||
mimetypes_list = make_domain_list(mimetypes_files);
|
|
||||||
else
|
|
||||||
mimetypes_list = NULL;
|
|
||||||
if (mimetypes_list == NULL)
|
|
||||||
return;
|
|
||||||
UserMimeTypes = New_N(struct table2 *, mimetypes_list->nitem);
|
|
||||||
for (i = 0, tl = mimetypes_list->first; tl; i++, tl = tl->next)
|
|
||||||
UserMimeTypes[i] = loadMimeTypes(tl->ptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
sync_with_option(void)
|
sync_with_option(void)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: url.c,v 1.12 2001/11/29 09:34:15 ukai Exp $ */
|
/* $Id: url.c,v 1.13 2001/11/30 09:54:22 ukai Exp $ */
|
||||||
#include "fm.h"
|
#include "fm.h"
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
@@ -134,6 +134,76 @@ sock_log(char *message, ...)
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static TextList *mimetypes_list;
|
||||||
|
static struct table2 **UserMimeTypes;
|
||||||
|
|
||||||
|
static struct table2 *
|
||||||
|
loadMimeTypes(char *filename)
|
||||||
|
{
|
||||||
|
FILE *f;
|
||||||
|
char *d, *type;
|
||||||
|
int i, n;
|
||||||
|
Str tmp;
|
||||||
|
struct table2 *mtypes;
|
||||||
|
|
||||||
|
f = fopen(expandName(filename), "r");
|
||||||
|
if (f == NULL)
|
||||||
|
return NULL;
|
||||||
|
n = 0;
|
||||||
|
while (tmp = Strfgets(f), tmp->length > 0) {
|
||||||
|
d = tmp->ptr;
|
||||||
|
if (d[0] != '#') {
|
||||||
|
d = strtok(d, " \t\n\r");
|
||||||
|
if (d != NULL) {
|
||||||
|
d = strtok(NULL, " \t\n\r");
|
||||||
|
for (i = 0; d != NULL; i++)
|
||||||
|
d = strtok(NULL, " \t\n\r");
|
||||||
|
n += i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fseek(f, 0, 0);
|
||||||
|
mtypes = New_N(struct table2, n + 1);
|
||||||
|
i = 0;
|
||||||
|
while (tmp = Strfgets(f), tmp->length > 0) {
|
||||||
|
d = tmp->ptr;
|
||||||
|
if (d[0] == '#')
|
||||||
|
continue;
|
||||||
|
type = strtok(d, " \t\n\r");
|
||||||
|
if (type == NULL)
|
||||||
|
continue;
|
||||||
|
while (1) {
|
||||||
|
d = strtok(NULL, " \t\n\r");
|
||||||
|
if (d == NULL)
|
||||||
|
break;
|
||||||
|
mtypes[i].item1 = Strnew_charp(d)->ptr;
|
||||||
|
mtypes[i].item2 = Strnew_charp(type)->ptr;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mtypes[i].item1 = NULL;
|
||||||
|
mtypes[i].item2 = NULL;
|
||||||
|
fclose(f);
|
||||||
|
return mtypes;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
initMimeTypes()
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
TextListItem *tl;
|
||||||
|
|
||||||
|
if (non_null(mimetypes_files))
|
||||||
|
mimetypes_list = make_domain_list(mimetypes_files);
|
||||||
|
else
|
||||||
|
mimetypes_list = NULL;
|
||||||
|
if (mimetypes_list == NULL)
|
||||||
|
return;
|
||||||
|
UserMimeTypes = New_N(struct table2 *, mimetypes_list->nitem);
|
||||||
|
for (i = 0, tl = mimetypes_list->first; tl; i++, tl = tl->next)
|
||||||
|
UserMimeTypes[i] = loadMimeTypes(tl->ptr);
|
||||||
|
}
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
DefaultFile(int scheme)
|
DefaultFile(int scheme)
|
||||||
{
|
{
|
||||||
@@ -1127,10 +1197,15 @@ otherinfo(ParsedURL *target, ParsedURL *current, char *referer)
|
|||||||
else
|
else
|
||||||
Strcat_charp(s, UserAgent);
|
Strcat_charp(s, UserAgent);
|
||||||
Strcat_charp(s, "\r\n");
|
Strcat_charp(s, "\r\n");
|
||||||
Strcat_charp(s,
|
|
||||||
"Accept: text/*, image/*, audio/*, video/*, application/*\r\n");
|
Strcat_charp(s, "Accept: ");
|
||||||
Strcat_charp(s,
|
Strcat_charp(s, acceptableMimeTypes());
|
||||||
"Accept-Encoding: gzip, compress, bzip, bzip2, deflate\r\n");
|
Strcat_charp(s, "\r\n");
|
||||||
|
|
||||||
|
Strcat_charp(s, "Accept-Encoding: ");
|
||||||
|
Strcat_charp(s, acceptableEncoding());
|
||||||
|
Strcat_charp(s, "\r\n");
|
||||||
|
|
||||||
Strcat_charp(s, "Accept-Language: ");
|
Strcat_charp(s, "Accept-Language: ");
|
||||||
if (AcceptLang != NULL && *AcceptLang != '\0') {
|
if (AcceptLang != NULL && *AcceptLang != '\0') {
|
||||||
Strcat_charp(s, AcceptLang);
|
Strcat_charp(s, AcceptLang);
|
||||||
|
|||||||
Reference in New Issue
Block a user