Found in chiark:/info
[userv-utils] / www-cgi / ucgicommon.c
CommitLineData
6a580c17 1/**/
2
3#include <stdio.h>
4#include <string.h>
6aaa2ce3 5#include <errno.h>
6a580c17 6
7#include "ucgi.h"
8
9const char *const envok[]= {
10 "CONTENT_LENGTH",
11 "CONTENT_TYPE",
12 "DOCUMENT_ROOT",
13 "GATEWAY_INTERFACE",
14 "HTTP_ACCEPT",
15 "HTTP_ACCEPT_ENCODING",
16 "HTTP_ACCEPT_LANGUAGE",
17 "HTTP_CACHE_CONTROL",
18 "HTTP_HOST",
19 "HTTP_NEGOTIATE",
20 "HTTP_PRAGMA",
21 "HTTP_USER_AGENT",
22 "PATH_INFO",
23 "PATH_TRANSLATED",
24 "QUERY_STRING",
25 "REMOTE_ADDR",
26 "REMOTE_HOST",
27 "REMOTE_USER",
28 "REMOTE_IDENT",
29 "REQUEST_METHOD",
30 "SCRIPT_FILENAME",
31 "SCRIPT_NAME",
32 "SCRIPT_URI",
33 "SCRIPT_URL",
34 "SERVER_ADMIN",
35 "SERVER_NAME",
36 "SERVER_PORT",
37 "SERVER_PROTOCOL",
38 "SERVER_SOFTWARE",
39 0
40};
41const int nenvok= sizeof(envok)/sizeof(envok[0]);
42
43int debugmode= 0;
44
45static void outerror(void) {
46 perror("stdout");
47 exit(debugmode ? 0 : -1);
48}
49
50void syserror(const char *m) {
51 if (printf("Content-Type: text/plain\n\n"
52 "ucgi: system call error:\n"
53 "%s: %s\n",
54 m,strerror(errno))==EOF || fflush(stdout)) outerror();
55 exit(0);
56}
57
58void error(const char *m) {
59 if (printf("Content-Type: text/plain\n\n"
60 "ucgi: error:\n"
61 "%s\n",
62 m)==EOF || fflush(stdout)) outerror();
63 exit(0);
64}
65
66void *xmalloc(size_t sz) {
67 void *r;
68
69 r= malloc(sz);
70 if (!r) syserror("malloc failed");
71 return r;
72}
73
74void xsetenv(const char *en, const char *ev, int overwrite) {
75 if (setenv(en,ev,overwrite)) syserror("setenv");
76}