diff options
author | cinap_lenrek <cinap_lenrek@gmx.de> | 2012-09-24 22:50:44 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@gmx.de> | 2012-09-24 22:50:44 +0200 |
commit | 80075967797d5ccd098ad496a9f9f963ddd95ce0 (patch) | |
tree | 1589735838538d45a02dbfa0688cf75004bbf648 /sys/src/cmd/mothra/libpanel | |
parent | 948d0a1180a57f61285abd4a59c7351b6197d3d5 (diff) |
mothra: forgot to add snarf.c
Diffstat (limited to 'sys/src/cmd/mothra/libpanel')
-rw-r--r-- | sys/src/cmd/mothra/libpanel/snarf.c | 60 |
1 files changed, 60 insertions, 0 deletions
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 <u.h> +#include <libc.h> +#include <draw.h> +#include <event.h> +#include <panel.h> +#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); + } +} |