Blame


1 24c02865 2005-01-04 devnull #include <u.h>
2 24c02865 2005-01-04 devnull #include <libc.h>
3 24c02865 2005-01-04 devnull #include <draw.h>
4 24c02865 2005-01-04 devnull #include <event.h>
5 24c02865 2005-01-04 devnull #include <bio.h>
6 24c02865 2005-01-04 devnull #include "page.h"
7 24c02865 2005-01-04 devnull
8 24c02865 2005-01-04 devnull void*
9 24c02865 2005-01-04 devnull emalloc(int sz)
10 24c02865 2005-01-04 devnull {
11 24c02865 2005-01-04 devnull void *v;
12 24c02865 2005-01-04 devnull v = malloc(sz);
13 24c02865 2005-01-04 devnull if(v == nil) {
14 24c02865 2005-01-04 devnull fprint(2, "out of memory allocating %d\n", sz);
15 24c02865 2005-01-04 devnull wexits("mem");
16 24c02865 2005-01-04 devnull }
17 24c02865 2005-01-04 devnull memset(v, 0, sz);
18 24c02865 2005-01-04 devnull return v;
19 24c02865 2005-01-04 devnull }
20 24c02865 2005-01-04 devnull
21 24c02865 2005-01-04 devnull void*
22 24c02865 2005-01-04 devnull erealloc(void *v, int sz)
23 24c02865 2005-01-04 devnull {
24 24c02865 2005-01-04 devnull v = realloc(v, sz);
25 24c02865 2005-01-04 devnull if(v == nil) {
26 24c02865 2005-01-04 devnull fprint(2, "out of memory allocating %d\n", sz);
27 24c02865 2005-01-04 devnull wexits("mem");
28 24c02865 2005-01-04 devnull }
29 24c02865 2005-01-04 devnull return v;
30 24c02865 2005-01-04 devnull }
31 24c02865 2005-01-04 devnull
32 24c02865 2005-01-04 devnull char*
33 24c02865 2005-01-04 devnull estrdup(char *s)
34 24c02865 2005-01-04 devnull {
35 24c02865 2005-01-04 devnull char *t;
36 24c02865 2005-01-04 devnull if((t = strdup(s)) == nil) {
37 24c02865 2005-01-04 devnull fprint(2, "out of memory in strdup(%.10s)\n", s);
38 24c02865 2005-01-04 devnull wexits("mem");
39 24c02865 2005-01-04 devnull }
40 24c02865 2005-01-04 devnull return t;
41 24c02865 2005-01-04 devnull }
42 24c02865 2005-01-04 devnull
43 24c02865 2005-01-04 devnull int
44 24c02865 2005-01-04 devnull opentemp(char *template)
45 24c02865 2005-01-04 devnull {
46 24c02865 2005-01-04 devnull int fd, i;
47 24c02865 2005-01-04 devnull char *p;
48 24c02865 2005-01-04 devnull
49 24c02865 2005-01-04 devnull p = estrdup(template);
50 24c02865 2005-01-04 devnull fd = -1;
51 24c02865 2005-01-04 devnull for(i=0; i<10; i++){
52 24c02865 2005-01-04 devnull mktemp(p);
53 24c02865 2005-01-04 devnull if(access(p, 0) < 0 && (fd=create(p, ORDWR|ORCLOSE, 0400)) >= 0)
54 24c02865 2005-01-04 devnull break;
55 24c02865 2005-01-04 devnull strcpy(p, template);
56 24c02865 2005-01-04 devnull }
57 24c02865 2005-01-04 devnull if(fd < 0){
58 24c02865 2005-01-04 devnull fprint(2, "couldn't make temporary file\n");
59 24c02865 2005-01-04 devnull wexits("Ecreat");
60 24c02865 2005-01-04 devnull }
61 24c02865 2005-01-04 devnull strcpy(template, p);
62 24c02865 2005-01-04 devnull free(p);
63 24c02865 2005-01-04 devnull
64 24c02865 2005-01-04 devnull return fd;
65 24c02865 2005-01-04 devnull }
66 24c02865 2005-01-04 devnull
67 24c02865 2005-01-04 devnull /*
68 24c02865 2005-01-04 devnull * spool standard input to /tmp.
69 24c02865 2005-01-04 devnull * we've already read the initial in bytes into ibuf.
70 24c02865 2005-01-04 devnull */
71 24c02865 2005-01-04 devnull int
72 24c02865 2005-01-04 devnull spooltodisk(uchar *ibuf, int in, char **name)
73 24c02865 2005-01-04 devnull {
74 24c02865 2005-01-04 devnull uchar buf[8192];
75 24c02865 2005-01-04 devnull int fd, n;
76 24c02865 2005-01-04 devnull char temp[40];
77 24c02865 2005-01-04 devnull
78 24c02865 2005-01-04 devnull strcpy(temp, "/tmp/pagespoolXXXXXXXXX");
79 24c02865 2005-01-04 devnull fd = opentemp(temp);
80 24c02865 2005-01-04 devnull if(name)
81 24c02865 2005-01-04 devnull *name = estrdup(temp);
82 24c02865 2005-01-04 devnull
83 24c02865 2005-01-04 devnull if(write(fd, ibuf, in) != in){
84 24c02865 2005-01-04 devnull fprint(2, "error writing temporary file\n");
85 24c02865 2005-01-04 devnull wexits("write temp");
86 24c02865 2005-01-04 devnull }
87 24c02865 2005-01-04 devnull
88 24c02865 2005-01-04 devnull while((n = read(stdinfd, buf, sizeof buf)) > 0){
89 24c02865 2005-01-04 devnull if(write(fd, buf, n) != n){
90 24c02865 2005-01-04 devnull fprint(2, "error writing temporary file\n");
91 24c02865 2005-01-04 devnull wexits("write temp0");
92 24c02865 2005-01-04 devnull }
93 24c02865 2005-01-04 devnull }
94 24c02865 2005-01-04 devnull seek(fd, 0, 0);
95 24c02865 2005-01-04 devnull return fd;
96 24c02865 2005-01-04 devnull }
97 24c02865 2005-01-04 devnull
98 24c02865 2005-01-04 devnull /*
99 24c02865 2005-01-04 devnull * spool standard input into a pipe.
100 24c02865 2005-01-04 devnull * we've already ready the first in bytes into ibuf
101 24c02865 2005-01-04 devnull */
102 24c02865 2005-01-04 devnull int
103 24c02865 2005-01-04 devnull stdinpipe(uchar *ibuf, int in)
104 24c02865 2005-01-04 devnull {
105 24c02865 2005-01-04 devnull uchar buf[8192];
106 24c02865 2005-01-04 devnull int n;
107 24c02865 2005-01-04 devnull int p[2];
108 24c02865 2005-01-04 devnull if(pipe(p) < 0){
109 24c02865 2005-01-04 devnull fprint(2, "pipe fails: %r\n");
110 24c02865 2005-01-04 devnull wexits("pipe");
111 24c02865 2005-01-04 devnull }
112 24c02865 2005-01-04 devnull
113 24c02865 2005-01-04 devnull switch(rfork(RFPROC|RFFDG)){
114 24c02865 2005-01-04 devnull case -1:
115 24c02865 2005-01-04 devnull fprint(2, "fork fails: %r\n");
116 24c02865 2005-01-04 devnull wexits("fork");
117 24c02865 2005-01-04 devnull default:
118 24c02865 2005-01-04 devnull close(p[1]);
119 24c02865 2005-01-04 devnull return p[0];
120 24c02865 2005-01-04 devnull case 0:
121 24c02865 2005-01-04 devnull break;
122 24c02865 2005-01-04 devnull }
123 24c02865 2005-01-04 devnull
124 24c02865 2005-01-04 devnull close(p[0]);
125 24c02865 2005-01-04 devnull write(p[1], ibuf, in);
126 24c02865 2005-01-04 devnull while((n = read(stdinfd, buf, sizeof buf)) > 0)
127 24c02865 2005-01-04 devnull write(p[1], buf, n);
128 24c02865 2005-01-04 devnull
129 24c02865 2005-01-04 devnull _exits(0);
130 24c02865 2005-01-04 devnull return -1; /* not reached */
131 24c02865 2005-01-04 devnull }