mothra: read the content-type header over file(1) to determine type (thanks james palmer)
this fixes some pages being classified as xml by file(1), meaning they would be rendered as plain text rather than as html.
This commit is contained in:
parent
af95aa431d
commit
aacf368c6d
4 changed files with 25 additions and 8 deletions
|
@ -1017,8 +1017,9 @@ void geturl(char *urlname, int post, int plumb, int map){
|
|||
message("getting %s", selection->fullname);
|
||||
if(mothmode && !plumb)
|
||||
typ = -1;
|
||||
else
|
||||
else if((typ = mimetotype(selection->contenttype)) < 0)
|
||||
typ = snooptype(fd);
|
||||
|
||||
switch(typ){
|
||||
default:
|
||||
if(plumb){
|
||||
|
|
|
@ -28,6 +28,7 @@ struct Url{
|
|||
char *reltext;
|
||||
char fullname[NNAME];
|
||||
char tag[NNAME];
|
||||
char contenttype[NNAME];
|
||||
int map; /* is this an image map? */
|
||||
};
|
||||
struct Www{
|
||||
|
@ -97,6 +98,7 @@ int Ufmt(Fmt *f);
|
|||
#pragma varargck type "U" char*
|
||||
void message(char *, ...);
|
||||
int filetype(int, char *, int);
|
||||
int mimetotype(char *);
|
||||
int snooptype(int);
|
||||
void mkfieldpanel(Rtext *);
|
||||
void geturl(char *, int, int, int);
|
||||
|
|
|
@ -87,8 +87,9 @@ Err1:
|
|||
}
|
||||
|
||||
int
|
||||
snooptype(int fd)
|
||||
mimetotype(char *mime)
|
||||
{
|
||||
int i;
|
||||
static struct {
|
||||
char *typ;
|
||||
int val;
|
||||
|
@ -110,13 +111,23 @@ snooptype(int fd)
|
|||
"image/", PAGE,
|
||||
"text/", PLAIN,
|
||||
"message/rfc822", PLAIN,
|
||||
};
|
||||
char buf[128];
|
||||
int i;
|
||||
if(filetype(fd, buf, sizeof(buf)) < 0)
|
||||
return -1;
|
||||
};
|
||||
|
||||
for(i=0; i<nelem(tab); i++)
|
||||
if(strncmp(buf, tab[i].typ, strlen(tab[i].typ)) == 0)
|
||||
if(strncmp(mime, tab[i].typ, strlen(tab[i].typ)) == 0)
|
||||
return tab[i].val;
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
int
|
||||
snooptype(int fd)
|
||||
{
|
||||
char buf[128];
|
||||
int i;
|
||||
|
||||
if(filetype(fd, buf, sizeof(buf)) < 0)
|
||||
return -1;
|
||||
|
||||
return mimetotype(buf);
|
||||
}
|
||||
|
|
|
@ -215,6 +215,9 @@ urlget(Url *url, int body)
|
|||
|
||||
snprint(buf+n, sizeof(buf)-n, "/parsed/fragment");
|
||||
readstr(buf, url->tag, sizeof(url->tag));
|
||||
|
||||
snprint(buf+n, sizeof(buf)-n, "/contenttype");
|
||||
readstr(buf, url->contenttype, sizeof(url->contenttype));
|
||||
|
||||
snprint(buf+n, sizeof(buf)-n, "/contentencoding");
|
||||
readstr(buf, buf, sizeof(buf));
|
||||
|
|
Loading…
Reference in a new issue