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