Introduction
Introduction Statistics Contact Development Disclaimer Help
improvements: - geomyidae - A small C-based gopherd.
git clone git://bitreich.org/geomyidae/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfri…
Log
Files
Refs
Tags
README
LICENSE
---
commit c98811c741255305b3fbff36a7b06bfb263d3ebc
parent 9a2203506973a803e74ffa80a27f2bf1919b68cc
Author: Hiltjo Posthuma <[email protected]>
Date: Sat, 10 Jun 2017 15:49:54 +0200
improvements:
- check all memory allocations, rename them to the common used names:
xmalloc, xrealloc, xstrdup.
- show an error when a CGI program using execl() fails in some way.
- minor style and remove an unused variable (len = -1).
documentation improvements:
- document root directory must be absolute.
- typo fix
Signed-off-by: Christoph Lohmann <[email protected]>
Diffstat:
M CGI | 2 +-
M geomyidae.8 | 3 ++-
M handlr.c | 14 ++++++++------
M ind.c | 73 +++++++++++++++++++----------…
M ind.h | 4 +++-
M main.c | 4 ++--
6 files changed, 62 insertions(+), 38 deletions(-)
---
diff --git a/CGI b/CGI
@@ -51,7 +51,7 @@ is:
-> $host = server host
-> $port = server port
-If borth ways of input are combined, the variables are set as following:
+If both ways of input are combined, the variables are set as following:
C: /test.cgi?hello=world searchterm (Beware! A Tab!)
-> $search = »searchterm«
diff --git a/geomyidae.8 b/geomyidae.8
@@ -108,7 +108,8 @@ Loglevels:
.Ed
.
.It Fl b Ar base
-Root directory to serve (default: /var/gopher)
+Root directory to serve (default: /var/gopher).
+This directory should be specified as an absolute path.
.
.It Fl p Ar port
Port geomyidae should listen on (default: 70)
diff --git a/handlr.c b/handlr.c
@@ -32,12 +32,12 @@ handledir(int sock, char *path, char *port, char *base, cha…
USED(args);
USED(sear);
- pa = gstrdup(path);
+ pa = xstrdup(path);
e = pa + strlen(pa) - 1;
if(e[0] == '/')
*e = '\0';
- par = gstrdup(pa);
+ par = xstrdup(pa);
b = strrchr(par + strlen(base), '/');
if(b != nil) {
*b = '\0';
@@ -107,7 +107,6 @@ handlebin(int sock, char *file, char *port, char *base, cha…
char sendb[1024];
int len, fd, sent;
- len = -1;
USED(port);
USED(base);
USED(args);
@@ -137,7 +136,7 @@ handlecgi(int sock, char *file, char *port, char *base, cha…
USED(base);
USED(port);
- path = gstrdup(file);
+ path = xstrdup(file);
p = strrchr(path, '/');
if (p != nil)
p[1] = '\0';
@@ -165,7 +164,10 @@ handlecgi(int sock, char *file, char *port, char *base, ch…
break;
}
- execl(file, p, sear, args, ohost, port, (char *)nil);
+ if (execl(file, p, sear, args, ohost, port, (char *)nil) == -1…
+ perror(NULL);
+ _exit(1);
+ }
case -1:
break;
default:
@@ -189,7 +191,7 @@ handledcgi(int sock, char *file, char *port, char *base, ch…
if(pipe(outpipe) < 0)
return;
- path = gstrdup(file);
+ path = xstrdup(file);
p = strrchr(path, '/');
if (p != nil)
p[1] = '\0';
diff --git a/ind.c b/ind.c
@@ -38,6 +38,43 @@ filetype type[] = {
{nil, nil, nil},
};
+void *
+xmalloc(size_t size)
+{
+ void *p;
+
+ if (!(p = malloc(size))) {
+ perror("malloc");
+ exit(1);
+ }
+
+ return p;
+}
+
+void *
+xrealloc(void *ptr, size_t size)
+{
+ if (!(ptr = realloc(ptr, size))) {
+ perror("realloc");
+ exit(1);
+ }
+
+ return ptr;
+}
+
+char *
+xstrdup(const char *str)
+{
+ char *ret;
+
+ if (!(ret = strdup(str))) {
+ perror("strdup");
+ exit(1);
+ }
+
+ return ret;
+}
+
filetype *
gettype(char *filename)
{
@@ -61,11 +98,7 @@ gmallocz(int l, int d)
{
char *ret;
- ret = malloc(l);
- if(ret == nil) {
- perror("malloc");
- exit(1);
- }
+ ret = xmalloc(l);
if(d)
memset(ret, 0, l);
@@ -74,20 +107,6 @@ gmallocz(int l, int d)
}
char *
-gstrdup(char *str)
-{
- char *ret;
-
- ret = strdup(str);
- if(ret == nil) {
- perror("strdup");
- exit(1);
- }
-
- return ret;
-}
-
-char *
readln(int fd)
{
char *ret;
@@ -95,9 +114,9 @@ readln(int fd)
len = 1;
- ret = malloc(2);
+ ret = xmalloc(2);
while(read(fd, &ret[len - 1], 1) > 0 && ret[len - 1] != '\n')
- ret = realloc(ret, ++len + 1);
+ ret = xrealloc(ret, ++len + 1);
if(ret[len - 1] != '\n') {
free(ret);
return nil;
@@ -148,7 +167,7 @@ addelem(Elems *e, char *s)
slen = strlen(s) + 1;
e->num++;
- e->e = realloc(e->e, sizeof(char *) * e->num);
+ e->e = xrealloc(e->e, sizeof(char *) * e->num);
e->e[e->num - 1] = gmallocz(slen, 2);
strncpy(e->e[e->num - 1], s, slen - 1);
@@ -201,7 +220,7 @@ addindexs(Indexs *idx, Elems *el)
{
idx->num++;
- idx->n = realloc(idx->n, sizeof(Elems) * idx->num);
+ idx->n = xrealloc(idx->n, sizeof(Elems) * idx->num);
idx->n[idx->num - 1] = el;
return;
@@ -246,11 +265,11 @@ printelem(int fd, Elems *el, char *addr, char *port)
if(!strncmp(el->e[3], "server", 6)) {
free(el->e[3]);
- el->e[3] = gstrdup(addr);
+ el->e[3] = xstrdup(addr);
}
if(!strncmp(el->e[4], "port", 4)) {
free(el->e[4]);
- el->e[4] = gstrdup(port);
+ el->e[4] = xstrdup(port);
}
tprintf(fd, "%.1s%s\t%s\t%s\t%s\r\n", el->e[0], el->e[1], el->e[2],
el->e[3], el->e[4]);
@@ -332,11 +351,11 @@ reverselookup(char *host)
client = gethostbyaddr((const void *)&hoststr,
sizeof(hoststr), AF_INET);
if(client != NULL)
- rethost = strdup(client->h_name);
+ rethost = xstrdup(client->h_name);
}
if(rethost == NULL)
- rethost = gstrdup(host);
+ rethost = xstrdup(host);
return rethost;
}
diff --git a/ind.h b/ind.h
@@ -32,7 +32,9 @@ struct filetype {
filetype *gettype(char *filename);
void *gmallocz(int l, int d);
-char *gstrdup(char *str);
+void *xmalloc(size_t);
+void *xrealloc(void *, size_t);
+char *xstrdup(const char *str);
Indexs *scanfile(char *fname);
Elems *getadv(char *str);
void printelem(int fd, Elems *el, char *addr, char *port);
diff --git a/main.c b/main.c
@@ -32,7 +32,7 @@ enum {
FILES = 1,
DIRS = 2,
HTTP = 4,
- ERRORS = 8,
+ ERRORS = 8
};
int glfd = -1;
@@ -381,7 +381,7 @@ main(int argc, char *argv[])
return 1;
}
} else {
- ohost = gstrdup(ohost);
+ ohost = xstrdup(ohost);
}
if(group != nil) {
You are viewing proxied material from bitreich.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.