[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>
|
||||
|
||||
* [w3m-dev 02590]
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/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.
|
||||
#
|
||||
|
||||
@@ -2067,12 +2067,19 @@ $def_ipv6_ss_family
|
||||
#endif
|
||||
|
||||
#if defined(__EMX__) /* use \$extension? */
|
||||
#define GUNZIP_CMDNAME "gzip"
|
||||
#define BUNZIP2_CMDNAME "bzip2"
|
||||
#define INFLATE_CMDNAME "inflate.exe"
|
||||
#define W3MBOOKMARK_CMDNAME "w3mbookmark.exe"
|
||||
#define W3MHELPERPANEL_CMDNAME "w3mhelperpanel.exe"
|
||||
#define DEV_NULL_PATH "nul"
|
||||
#define DEV_TTY_PATH "con"
|
||||
#define CGI_EXTENSION ".cmd"
|
||||
#define USE_PATH_ENVVAR
|
||||
#else
|
||||
#define GUNZIP_CMDNAME "gunzip"
|
||||
#define BUNZIP2_CMDNAME "bunzip2"
|
||||
#define INFLATE_CMDNAME "inflate"
|
||||
#define W3MBOOKMARK_CMDNAME "w3mbookmark"
|
||||
#define W3MHELPERPANEL_CMDNAME "w3mhelperpanel"
|
||||
#define DEV_NULL_PATH "/dev/null"
|
||||
@@ -2080,6 +2087,11 @@ $def_ipv6_ss_family
|
||||
#define CGI_EXTENSION ".cgi"
|
||||
#endif
|
||||
|
||||
#define PATH_SEPARATOR ':'
|
||||
#define GUNZIP_NAME "gunzip"
|
||||
#define BUNZIP2_NAME "bunzip2"
|
||||
#define INFLATE_NAME "inflate"
|
||||
|
||||
#endif /* makefile_parameter */
|
||||
#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 <sys/types.h>
|
||||
#include "myctype.h"
|
||||
@@ -23,7 +23,7 @@
|
||||
#define min(a,b) ((a) > (b) ? (b) : (a))
|
||||
#endif /* not min */
|
||||
|
||||
static void gunzip_stream(URLFile *uf);
|
||||
static void uncompress_stream(URLFile *uf);
|
||||
static FILE *lessopen_stream(char *path);
|
||||
static Buffer *loadcmdout(char *cmd,
|
||||
Buffer *(*loadproc) (URLFile *, Buffer *),
|
||||
@@ -143,6 +143,26 @@ char *violations[COO_EMAX] = {
|
||||
};
|
||||
#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
|
||||
|
||||
static MySignalHandler
|
||||
@@ -223,41 +243,36 @@ static void
|
||||
check_compression(char *path, URLFile *uf)
|
||||
{
|
||||
int len;
|
||||
struct compression_decoder *d;
|
||||
|
||||
if (path == NULL)
|
||||
return;
|
||||
|
||||
len = strlen(path);
|
||||
uf->compression = CMP_NOCOMPRESS;
|
||||
if (len > 2 && strcasecmp(&path[len - 2], ".Z") == 0) {
|
||||
uf->compression = CMP_COMPRESS;
|
||||
uf->guess_type = "application/x-compress";
|
||||
}
|
||||
else if (len > 3 && strcasecmp(&path[len - 3], ".gz") == 0) {
|
||||
uf->compression = CMP_GZIP;
|
||||
uf->guess_type = "application/x-gzip";
|
||||
}
|
||||
else if (len > 4 && strcasecmp(&path[len - 4], ".bz2") == 0) {
|
||||
uf->compression = CMP_BZIP2;
|
||||
uf->guess_type = "application/x-bzip";
|
||||
for (d = compression_decoders; d->type != CMP_NOCOMPRESS; d++) {
|
||||
int elen;
|
||||
if (d->ext == NULL)
|
||||
continue;
|
||||
elen = strlen(d->ext);
|
||||
if (len > elen && strcasecmp(&path[len - elen], d->ext) == 0) {
|
||||
uf->compression = d->type;
|
||||
uf->guess_type = d->mime_type;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static char *
|
||||
compress_application_type(int compression)
|
||||
{
|
||||
switch (compression) {
|
||||
case CMP_COMPRESS:
|
||||
return "application/x-compress";
|
||||
case CMP_GZIP:
|
||||
return "application/x-gzip";
|
||||
case CMP_BZIP2:
|
||||
return "application/x-bzip";
|
||||
case CMP_DEFLATE:
|
||||
return "application/x-deflate";
|
||||
default:
|
||||
return NULL;
|
||||
struct compression_decoder *d;
|
||||
|
||||
for (d = compression_decoders; d->type != CMP_NOCOMPRESS; d++) {
|
||||
if (d->type == compression)
|
||||
return d->mime_type;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static char *
|
||||
@@ -266,21 +281,20 @@ uncompressed_file_type(char *path, char **ext)
|
||||
int len, slen;
|
||||
Str fn;
|
||||
char *t0;
|
||||
struct compression_decoder *d;
|
||||
|
||||
if (path == NULL)
|
||||
return NULL;
|
||||
|
||||
len = strlen(path);
|
||||
if (len > 2 && strcasecmp(&path[len - 2], ".Z") == 0) {
|
||||
slen = 2;
|
||||
for (d = compression_decoders; d->type != CMP_NOCOMPRESS; d++) {
|
||||
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) {
|
||||
slen = 3;
|
||||
}
|
||||
else if (len > 4 && strcasecmp(&path[len - 4], ".bz2") == 0) {
|
||||
slen = 4;
|
||||
}
|
||||
else
|
||||
if (d->type == CMP_NOCOMPRESS)
|
||||
return NULL;
|
||||
|
||||
fn = Strnew_charp(path);
|
||||
@@ -326,12 +340,71 @@ examineFile(char *path, URLFile *uf)
|
||||
char *t0 = uncompressed_file_type(path, &ext);
|
||||
uf->guess_type = t0;
|
||||
uf->ext = ext;
|
||||
gunzip_stream(uf);
|
||||
uncompress_stream(uf);
|
||||
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
|
||||
*/
|
||||
@@ -1263,7 +1336,7 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
|
||||
if (!(w3m_dump & DUMP_SOURCE) &&
|
||||
(w3m_dump & ~DUMP_FRAME || is_text_type(t)
|
||||
|| searchExtViewer(t))) {
|
||||
gunzip_stream(&f);
|
||||
uncompress_stream(&f);
|
||||
uncompressed_file_type(pu.file, &f.ext);
|
||||
}
|
||||
else {
|
||||
@@ -5961,46 +6034,29 @@ checkOverWrite(char *path)
|
||||
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
|
||||
gunzip_stream(URLFile *uf)
|
||||
uncompress_stream(URLFile *uf)
|
||||
{
|
||||
int pid1;
|
||||
int fd1[2];
|
||||
char *expand_cmd = GUNZIP_CMD;
|
||||
char *expand_cmd = GUNZIP_CMDNAME;
|
||||
char *expand_name = GUNZIP_NAME;
|
||||
char *tmpf = NULL;
|
||||
struct compression_decoder *d;
|
||||
|
||||
if (IStype(uf->stream) != IST_ENCODED) {
|
||||
uf->stream = newEncodedStream(uf->stream, uf->encoding);
|
||||
uf->encoding = ENC_7BIT;
|
||||
}
|
||||
switch (uf->compression) {
|
||||
case CMP_COMPRESS:
|
||||
case CMP_GZIP:
|
||||
expand_cmd = GUNZIP_CMD;
|
||||
expand_name = GUNZIP_NAME;
|
||||
break;
|
||||
case CMP_BZIP2:
|
||||
expand_cmd = BUNZIP2_CMD;
|
||||
expand_name = BUNZIP2_NAME;
|
||||
break;
|
||||
case CMP_DEFLATE:
|
||||
expand_cmd = INFLATE_CMD;
|
||||
expand_name = INFLATE_NAME;
|
||||
break;
|
||||
for (d = compression_decoders; d->type != CMP_NOCOMPRESS; d++) {
|
||||
if (uf->compression == d->type) {
|
||||
if (d->libfile_p)
|
||||
expand_cmd = libFile(d->cmd);
|
||||
else
|
||||
expand_cmd = d->cmd;
|
||||
expand_name = d->name;
|
||||
break;
|
||||
}
|
||||
}
|
||||
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
|
||||
*
|
||||
@@ -744,11 +744,7 @@ global char *BookmarkFile init(NULL);
|
||||
global char *pauth init(NULL);
|
||||
global Str proxy_auth_cookie init(NULL);
|
||||
global int UseExternalDirBuffer init(TRUE);
|
||||
#ifdef __EMX__
|
||||
global char *DirBufferCommand init("file:///$LIB/dirlist.cmd");
|
||||
#else
|
||||
global char *DirBufferCommand init("file:///$LIB/dirlist.cgi");
|
||||
#endif /* __EMX__ */
|
||||
global char *DirBufferCommand init("file:///$LIB/dirlist" CGI_EXTENSION);
|
||||
global int ignore_null_img_alt init(TRUE);
|
||||
|
||||
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);
|
||||
#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 *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 "myctype.h"
|
||||
#include <stdio.h>
|
||||
@@ -12,22 +12,8 @@ static struct mailcap DefaultMailcap[] = {
|
||||
{NULL, NULL, 0, NULL, NULL, NULL}
|
||||
};
|
||||
|
||||
void
|
||||
initMailcap()
|
||||
{
|
||||
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);
|
||||
}
|
||||
static TextList *mailcap_list;
|
||||
static struct mailcap **UserMailcap;
|
||||
|
||||
int
|
||||
mailcapMatch(struct mailcap *mcap, char *type)
|
||||
@@ -124,7 +110,7 @@ matchMailcapAttr(char *p, char *attr, int len, Str *value)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
static int
|
||||
extractMailcapEntry(char *mcap_entry, struct mailcap *mcap)
|
||||
{
|
||||
int j, k;
|
||||
@@ -193,7 +179,7 @@ extractMailcapEntry(char *mcap_entry, struct mailcap *mcap)
|
||||
return 1;
|
||||
}
|
||||
|
||||
struct mailcap *
|
||||
static struct mailcap *
|
||||
loadMailcap(char *filename)
|
||||
{
|
||||
FILE *f;
|
||||
@@ -233,6 +219,70 @@ loadMailcap(char *filename)
|
||||
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 *
|
||||
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.
|
||||
* Manual editing not recommended.
|
||||
@@ -108,6 +108,7 @@ extern int currentLn(Buffer *buf);
|
||||
extern void tmpClearBuffer(Buffer *buf);
|
||||
extern char *filename_extension(char *patch, int is_url);
|
||||
extern void examineFile(char *path, URLFile *uf);
|
||||
extern char *acceptableEncoding();
|
||||
extern int dir_exist(char *path);
|
||||
extern Str convertLine(URLFile *uf, Str line, char *code, int mode);
|
||||
extern Buffer *loadFile(char *path);
|
||||
@@ -391,6 +392,7 @@ 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);
|
||||
#endif /* JP_CHARSET */
|
||||
extern void initMimeTypes();
|
||||
extern void free_ssl_ctx();
|
||||
extern ParsedURL *baseURL(Buffer *buf);
|
||||
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 char *filename_extension(char *path, int is_url);
|
||||
extern int mailcapMatch(struct mailcap *mcap, char *type);
|
||||
extern struct mailcap *loadMailcap(char *filename);
|
||||
extern struct mailcap *searchMailcap(struct mailcap *table, char *type);
|
||||
extern void initMailcap();
|
||||
extern char *acceptableMimeTypes();
|
||||
extern struct mailcap *searchExtViewer(char *type);
|
||||
extern Str unquote_mailcap(char *qstr, char *type, char *name, char *attr,
|
||||
int *mc_stat);
|
||||
@@ -577,7 +579,6 @@ extern char *guess_save_name(Buffer *buf, char *file);
|
||||
|
||||
extern void wrapToggle(void);
|
||||
extern void saveBufferInfo(void);
|
||||
extern char *get_os2_dft(const char *, char *);
|
||||
|
||||
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.
|
||||
*/
|
||||
@@ -1072,73 +1072,6 @@ do_mkdir(const char *dir, long mode)
|
||||
#define do_mkdir(dir,mode) mkdir(dir,mode)
|
||||
#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
|
||||
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 <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
@@ -134,6 +134,76 @@ sock_log(char *message, ...)
|
||||
|
||||
#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 *
|
||||
DefaultFile(int scheme)
|
||||
{
|
||||
@@ -1127,10 +1197,15 @@ otherinfo(ParsedURL *target, ParsedURL *current, char *referer)
|
||||
else
|
||||
Strcat_charp(s, UserAgent);
|
||||
Strcat_charp(s, "\r\n");
|
||||
Strcat_charp(s,
|
||||
"Accept: text/*, image/*, audio/*, video/*, application/*\r\n");
|
||||
Strcat_charp(s,
|
||||
"Accept-Encoding: gzip, compress, bzip, bzip2, deflate\r\n");
|
||||
|
||||
Strcat_charp(s, "Accept: ");
|
||||
Strcat_charp(s, acceptableMimeTypes());
|
||||
Strcat_charp(s, "\r\n");
|
||||
|
||||
Strcat_charp(s, "Accept-Encoding: ");
|
||||
Strcat_charp(s, acceptableEncoding());
|
||||
Strcat_charp(s, "\r\n");
|
||||
|
||||
Strcat_charp(s, "Accept-Language: ");
|
||||
if (AcceptLang != NULL && *AcceptLang != '\0') {
|
||||
Strcat_charp(s, AcceptLang);
|
||||
|
||||
Reference in New Issue
Block a user