summaryrefslogtreecommitdiffstats
path: root/cgi.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2013-10-11 00:06:48 +0000
committerIngo Schwarze <schwarze@openbsd.org>2013-10-11 00:06:48 +0000
commit89d7a1b6b9c425d2d35be98f9ae96a30365fae92 (patch)
tree0cd907e047f408a7fbe1517604ad6f323595df66 /cgi.c
parent632e15d94953270159a106e565a92a5470e32cdc (diff)
downloadmandoc-89d7a1b6b9c425d2d35be98f9ae96a30365fae92.tar.gz
Thomas Klausner <wiz at NetBSD dot org> finally succeeded to build
on SmartOS and sent these additional patches, thanks!
Diffstat (limited to 'cgi.c')
-rw-r--r--cgi.c39
1 files changed, 35 insertions, 4 deletions
diff --git a/cgi.c b/cgi.c
index 6177eda5..48ca6386 100644
--- a/cgi.c
+++ b/cgi.c
@@ -34,6 +34,13 @@
#include <string.h>
#include <unistd.h>
+#if defined(__sun)
+/* for stat() */
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#endif
+
#include "apropos_db.h"
#include "mandoc.h"
#include "mdoc.h"
@@ -42,7 +49,7 @@
#include "manpath.h"
#include "mandocdb.h"
-#ifdef __linux__
+#if defined(__linux__) || defined(__sun)
# include <db_185.h>
#else
# include <db.h>
@@ -1097,11 +1104,20 @@ static int
pathstop(DIR *dir)
{
struct dirent *d;
+#if defined(__sun)
+ struct stat sb;
+#endif
- while (NULL != (d = readdir(dir)))
+ while (NULL != (d = readdir(dir))) {
+#if defined(__sun)
+ stat(d->d_name, &sb);
+ if (S_IFREG & sb.st_mode)
+#else
if (DT_REG == d->d_type)
+#endif
if (0 == strcmp(d->d_name, "catman.conf"))
return(1);
+ }
return(0);
}
@@ -1118,6 +1134,9 @@ pathgen(DIR *dir, char *path, struct req *req)
DIR *cd;
int rc;
size_t sz, ssz;
+#if defined(__sun)
+ struct stat sb;
+#endif
sz = strlcat(path, "/", PATH_MAX);
if (sz >= PATH_MAX) {
@@ -1133,7 +1152,13 @@ pathgen(DIR *dir, char *path, struct req *req)
rc = 0;
while (0 == rc && NULL != (d = readdir(dir))) {
- if (DT_DIR != d->d_type || strcmp(d->d_name, "etc"))
+#if defined(__sun)
+ stat(d->d_name, &sb);
+ if (!(S_IFDIR & sb.st_mode)
+#else
+ if (DT_DIR != d->d_type
+#endif
+ || strcmp(d->d_name, "etc"))
continue;
path[(int)sz] = '\0';
@@ -1182,7 +1207,13 @@ pathgen(DIR *dir, char *path, struct req *req)
rewinddir(dir);
while (NULL != (d = readdir(dir))) {
- if (DT_DIR != d->d_type || '.' == d->d_name[0])
+#if defined(__sun)
+ stat(d->d_name, &sb);
+ if (!(S_IFDIR & sb.st_mode)
+#else
+ if (DT_DIR != d->d_type
+#endif
+ || '.' == d->d_name[0])
continue;
path[(int)sz] = '\0';