Introduction
Introduction Statistics Contact Development Disclaimer Help
Add preliminary relative path support for gph files. - geomyidae - A small C-ba…
git clone git://bitreich.org/geomyidae/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfri…
Log
Files
Refs
Tags
README
LICENSE
---
commit 4d89b560595076c8994896195fbcd196460987dc
parent a8e69abfa2b38ef12bad79516bf02da7701d549c
Author: Christoph Lohmann <[email protected]>
Date: Thu, 30 Aug 2018 21:27:57 +0200
Add preliminary relative path support for gph files.
Diffstat:
M handlr.c | 7 ++-----
M ind.c | 24 +++++++++++++++++++++++-
M ind.h | 2 +-
3 files changed, 26 insertions(+), 7 deletions(-)
---
diff --git a/handlr.c b/handlr.c
@@ -83,14 +83,13 @@ handlegph(int sock, char *file, char *port, char *base, cha…
Indexs *act;
int i, ret = 0;
- USED(base);
USED(args);
USED(sear);
act = scanfile(file);
if (act != NULL) {
for (i = 0; i < act->num && ret >= 0; i++) {
- ret = printelem(sock, act->n[i], ohost, port);
+ ret = printelem(sock, act->n[i], file, base, ohost, po…
freeelem(act->n[i]);
act->n[i] = NULL;
}
@@ -185,8 +184,6 @@ handledcgi(int sock, char *file, char *port, char *base, ch…
int outpipe[2], ret = 0;
Elems *el;
- USED(base);
-
if (pipe(outpipe) < 0)
return;
@@ -246,7 +243,7 @@ handledcgi(int sock, char *file, char *port, char *base, ch…
if (el == NULL)
continue;
- ret = printelem(sock, el, ohost, port);
+ ret = printelem(sock, el, file, base, ohost, port);
freeelem(el);
}
if (ferror(fp))
diff --git a/ind.c b/ind.c
@@ -17,6 +17,7 @@
#include <netinet/tcp.h>
#include <arpa/inet.h>
#include <sys/ioctl.h>
+#include <limits.h>
/* for sendfile(2) */
#ifdef __linux__
@@ -413,8 +414,11 @@ scanfile(char *fname)
}
int
-printelem(int fd, Elems *el, char *addr, char *port)
+printelem(int fd, Elems *el, char *file, char *base, char *addr, char *port)
{
+ char *path, *p, buf[PATH_MAX+1];
+ int len;
+
if (!strcmp(el->e[3], "server")) {
free(el->e[3]);
el->e[3] = xstrdup(addr);
@@ -423,6 +427,24 @@ printelem(int fd, Elems *el, char *addr, char *port)
free(el->e[4]);
el->e[4] = xstrdup(port);
}
+ if (el->e[2][0] != '/' && !strncmp(el->e[2], "URL:", 4)) {
+ path = file + strlen(base);
+ if ((p = strrchr(path, '/')))
+ len = p - path;
+ else
+ len = strlen(path);
+ snprintf(buf, sizeof(buf), "%s%.*s/%s", base, len, path, el->e…
+
+ if ((path = realpath(buf, NULL)) &&
+ !strncmp(base, path, strlen(base))) {
+ p = path + strlen(base);
+ free(el->e[2]);
+ el->e[2] = xstrdup(p[0]? p : "/");
+ }
+ if (path != NULL)
+ free(path);
+ }
+
if (dprintf(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]) < 0) {
perror("printelem: dprintf");
diff --git a/ind.h b/ind.h
@@ -40,7 +40,7 @@ Indexs *scanfile(char *fname);
Elems *getadv(char *str);
int pendingbytes(int sock);
void waitforpendingbytes(int sock);
-int printelem(int fd, Elems *el, char *addr, char *port);
+int printelem(int fd, Elems *el, char *file, char *base, char *addr, char *por…
void addindexs(Indexs *idx, Elems *el);
void addelem(Elems *e, char *s);
void freeindex(Indexs *i);
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.