]> git.lizzy.rs Git - plan9front.git/commitdiff
mothra: read the content-type header over file(1) to determine type (thanks james...
authorOri Bernstein <ori@eigenstate.org>
Sat, 12 Jun 2021 14:32:16 +0000 (14:32 +0000)
committerOri Bernstein <ori@eigenstate.org>
Sat, 12 Jun 2021 14:32:16 +0000 (14:32 +0000)
this fixes some pages being classified as xml by file(1),
meaning they would be rendered as plain text rather than as html.

sys/src/cmd/mothra/mothra.c
sys/src/cmd/mothra/mothra.h
sys/src/cmd/mothra/snoop.c
sys/src/cmd/mothra/url.c

index 291272c4cf6af42fcc8cfba4c5f1b77b972ff50c..bc8cb9261e09f802bbe4533eab39c4a722260381 100644 (file)
@@ -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){
index 806ab614b4cc4d70bc18dc28540d1bc73cff8f93..200650ab73d75f8126d019efd990f8bf64318509 100644 (file)
@@ -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);
index 7df01acb6b7ef148517af0978fb42a4059e06aed..833141544affb3408a9328615e3ed93b2e8a4fa1 100644 (file)
@@ -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);
 }
index 2e0e659cab4401173c8dd0488f3a6f816d5bdbe7..69e9d9a7fb5f78be9bb1c695d77b504e335a3539 100644 (file)
@@ -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));