ref: 456b709807fdeb7c725731fd1469f7181b342893
parent: 11e93db76eefebd94f03bace14526c5218a3cfc6
author: Sigrid Solveig Haflínudóttir <[email protected]>
date: Wed May 19 06:48:47 EDT 2021
dump raw to stdout if not /dev/cons
--- a/main.c
+++ b/main.c
@@ -5,7 +5,7 @@
#include <ctype.h>
#include "gemnine.h"
-void
+static void
page(Response *r)
{
if(rfork(RFPROC|RFFDG|RFNOTEG|RFNOWAIT) == 0){
@@ -21,7 +21,7 @@
}
}
-void
+static void
play(Response *r)
{
if(rfork(RFPROC|RFFDG|RFNOTEG|RFNOWAIT) == 0){
@@ -42,6 +42,13 @@
}
}
+static void
+usage(void)
+{
+ fprint(2, "usage: %s [-w] [URL]\n", argv0);
+ exits("usage");
+}
+
void
main(int argc, char **argv)
{
@@ -48,9 +55,10 @@
Response *r;
char *s, *t, *u, *tmp;
Url *url, *x;
- int len, wait, pl, fd;
+ int len, raw, wait, pl, fd;
Plumbmsg *m;
Biobuf out, body;
+ char buf[8192];
wait = 0;
ARGBEGIN{
@@ -57,13 +65,15 @@
case 'w':
wait = 1;
break;
+ default:
+ usage();
}ARGEND;
- if(!wait && argc < 1){
- fprint(2, "usage: gemnine [-w] [URL]\n");
- exits("usage");
- }
+ if(!wait && argc < 1)
+ usage();
+ raw = fd2path(1, buf, sizeof(buf)) == 0 && strcmp(buf, "/dev/cons") != 0;
+
quotefmtinstall();
fmtinstall('U', Ufmt);
fmtinstall('N', Nfmt);
@@ -94,7 +104,7 @@
nextreq:
if((r = request(url)) != nil){
- if(r->mime != nil && strncmp(r->mime, "text/", 5) != 0){
+ if(!raw && r->mime != nil && strncmp(r->mime, "text/", 5) != 0){
if(strncmp(r->mime, "image/", 6) == 0 || strcmp(r->mime, "application/pdf") == 0)
page(r);
else if(strncmp(r->mime, "audio/", 6) == 0)
@@ -136,6 +146,15 @@
fprint(2, "%U: %r\n", url);
if(!wait)
exits("failed");
+ }else if(raw){
+ for(;;){
+ if((len = read(r->fd, buf, sizeof(buf))) == 0)
+ break;
+ if(len < 0)
+ goto err;
+ if(write(1, buf, len) <= 0)
+ break;
+ }
}else{
Binit(&body, r->fd, OREAD);
while((s = Brdstr(&body, '\n', 1)) != nil){
@@ -169,6 +188,7 @@
freeresponse(r);
freeurl(url);
}else{
+err:
fprint(2, "%U: %r\n", url);
if(!wait)
exits("failed");