From 80075967797d5ccd098ad496a9f9f963ddd95ce0 Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Mon, 24 Sep 2012 22:50:44 +0200 Subject: [PATCH] mothra: forgot to add snarf.c --- sys/src/cmd/mothra/libpanel/snarf.c | 60 +++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 sys/src/cmd/mothra/libpanel/snarf.c diff --git a/sys/src/cmd/mothra/libpanel/snarf.c b/sys/src/cmd/mothra/libpanel/snarf.c new file mode 100644 index 000000000..4eb56f67f --- /dev/null +++ b/sys/src/cmd/mothra/libpanel/snarf.c @@ -0,0 +1,60 @@ +#include +#include +#include +#include +#include +#include "pldefs.h" + +void plputsnarf(char *s){ + int fd; + + if(s==0 || *s=='\0') + return; + if((fd=open("/dev/snarf", OWRITE|OTRUNC))>=0){ + write(fd, s, strlen(s)); + close(fd); + } +} +char *plgetsnarf(void){ + int fd, n, r; + char *s, *x; + + if((fd=open("/dev/snarf", OREAD))<0) + return nil; + n=0; + s=nil; + for(;;){ + if((x=realloc(s, n+1024))==0) + break; + s=x; + if((r = read(fd, s+n, 1024)) <= 0) + break; + n += r; + } + close(fd); + if(n <= 0){ + free(s); + return nil; + } + s[n] = '\0'; + return s; +} +void plsnarf(Panel *p){ + char *s; + + if(p==0 || p->snarf==0) + return; + s=p->snarf(p); + plputsnarf(s); + free(s); +} +void plpaste(Panel *p){ + char *s; + + if(p==0 || p->paste==0) + return; + if(s=plgetsnarf()){ + p->paste(p, s); + free(s); + } +}