chiark / gitweb /
Some documentation.
[userv-utils.git] / www-cgi / ucgicommon.c
1 /**/
2
3 #include <stdio.h>
4 #include <string.h>
5 #include <errno.h>
6
7 #include "ucgi.h"
8
9 const 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 };
41 const int nenvok= sizeof(envok)/sizeof(envok[0]);
42
43 int debugmode= 0;
44
45 static void outerror(void) {
46   perror("stdout");
47   exit(debugmode ? 0 : -1);
48 }
49
50 void 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
58 void 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
66 void *xmalloc(size_t sz) {
67   void *r;
68
69   r= malloc(sz);
70   if (!r) syserror("malloc failed");
71   return r;
72 }
73
74 void xsetenv(const char *en, const char *ev, int overwrite) {
75   if (setenv(en,ev,overwrite)) syserror("setenv");
76 }