summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/src/cmd/mothra/mothra.c3
-rw-r--r--sys/src/cmd/mothra/mothra.h2
-rw-r--r--sys/src/cmd/mothra/snoop.c23
-rw-r--r--sys/src/cmd/mothra/url.c3
4 files changed, 24 insertions, 7 deletions
diff --git a/sys/src/cmd/mothra/mothra.c b/sys/src/cmd/mothra/mothra.c
index 291272c4c..bc8cb9261 100644
--- a/sys/src/cmd/mothra/mothra.c
+++ b/sys/src/cmd/mothra/mothra.c
@@ -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){
diff --git a/sys/src/cmd/mothra/mothra.h b/sys/src/cmd/mothra/mothra.h
index 806ab614b..200650ab7 100644
--- a/sys/src/cmd/mothra/mothra.h
+++ b/sys/src/cmd/mothra/mothra.h
@@ -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);
diff --git a/sys/src/cmd/mothra/snoop.c b/sys/src/cmd/mothra/snoop.c
index 7df01acb6..833141544 100644
--- a/sys/src/cmd/mothra/snoop.c
+++ b/sys/src/cmd/mothra/snoop.c
@@ -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,
- };
+ };
+
+ for(i=0; i<nelem(tab); i++)
+ 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;
- for(i=0; i<nelem(tab); i++)
- if(strncmp(buf, tab[i].typ, strlen(tab[i].typ)) == 0)
- return tab[i].val;
- return -1;
+
+ return mimetotype(buf);
}
diff --git a/sys/src/cmd/mothra/url.c b/sys/src/cmd/mothra/url.c
index 2e0e659ca..69e9d9a7f 100644
--- a/sys/src/cmd/mothra/url.c
+++ b/sys/src/cmd/mothra/url.c
@@ -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));