mirror of
https://github.com/emikulic/darkhttpd.git
synced 2023-08-10 21:13:08 +03:00
Solaris compatibility fixes.
. INADDR_NONE is -1 . Change bindport to an unsigned short (ntohs implies short). . Conditionally implement our own errx() and err(). . Conditionally use a custom vasprintf() that depends on vsnprintf().
This commit is contained in:
parent
466de20e2e
commit
41d2f5867a
@ -24,6 +24,8 @@
|
|||||||
* x Ensure URIs requested are safe.
|
* x Ensure URIs requested are safe.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* Note: Solaris users: link with -lxnet */
|
||||||
|
|
||||||
#ifdef __linux
|
#ifdef __linux
|
||||||
#define _GNU_SOURCE /* for strsignal() and vasprintf() */
|
#define _GNU_SOURCE /* for strsignal() and vasprintf() */
|
||||||
#endif
|
#endif
|
||||||
@ -35,7 +37,6 @@
|
|||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <err.h>
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <pwd.h>
|
#include <pwd.h>
|
||||||
@ -54,6 +55,54 @@
|
|||||||
#define min(a,b) ( ((a)<(b)) ? (a) : (b) )
|
#define min(a,b) ( ((a)<(b)) ? (a) : (b) )
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef INADDR_NONE
|
||||||
|
#define INADDR_NONE -1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(__FreeBSD__) || defined(__linux)
|
||||||
|
#include <err.h>
|
||||||
|
#else
|
||||||
|
/* ---------------------------------------------------------------------------
|
||||||
|
* errx - prints "error: [...]\n" to stderr and exit()s with [code]
|
||||||
|
*
|
||||||
|
* Replacement for the BSD errx() which is usually in <err.h>
|
||||||
|
*/
|
||||||
|
static void errx(const int code, const char *format, ...)
|
||||||
|
{
|
||||||
|
va_list va;
|
||||||
|
|
||||||
|
va_start(va, format);
|
||||||
|
fprintf(stderr, "error: ");
|
||||||
|
vfprintf(stderr, format, va);
|
||||||
|
fprintf(stderr, "\n");
|
||||||
|
va_end(va);
|
||||||
|
|
||||||
|
exit(code);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------------
|
||||||
|
* err - prints "error: [...]: strerror\n" to stderr and exit()s with [code]
|
||||||
|
*
|
||||||
|
* Replacement for the BSD err() which is usually in <err.h>
|
||||||
|
*/
|
||||||
|
void err(const int code, const char *format, ...)
|
||||||
|
{
|
||||||
|
va_list va;
|
||||||
|
|
||||||
|
va_start(va, format);
|
||||||
|
fprintf(stderr, "error: ");
|
||||||
|
vfprintf(stderr, format, va);
|
||||||
|
fprintf(stderr, ": %s\n", strerror(errno));
|
||||||
|
va_end(va);
|
||||||
|
|
||||||
|
exit(code);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------------
|
/* ---------------------------------------------------------------------------
|
||||||
@ -185,7 +234,7 @@ static char *keep_alive_field = NULL;
|
|||||||
|
|
||||||
/* Defaults can be overridden on the command-line */
|
/* Defaults can be overridden on the command-line */
|
||||||
static in_addr_t bindaddr = INADDR_ANY;
|
static in_addr_t bindaddr = INADDR_ANY;
|
||||||
static u_int16_t bindport = 80;
|
static unsigned short bindport = 80;
|
||||||
static int max_connections = -1; /* kern.ipc.somaxconn */
|
static int max_connections = -1; /* kern.ipc.somaxconn */
|
||||||
static const char *index_name = "index.html";
|
static const char *index_name = "index.html";
|
||||||
|
|
||||||
@ -262,6 +311,19 @@ static char *xstrdup(const char *src)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __sun__ /* unimpressed by Solaris */
|
||||||
|
static int vasprintf(char **strp, const char *fmt, va_list ap)
|
||||||
|
{
|
||||||
|
char tmp;
|
||||||
|
int result = vsnprintf(&tmp, 1, fmt, ap);
|
||||||
|
*strp = xmalloc(result+1);
|
||||||
|
result = vsnprintf(*strp, result+1, fmt, ap);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------------
|
/* ---------------------------------------------------------------------------
|
||||||
* asprintf() that errx()s if it fails.
|
* asprintf() that errx()s if it fails.
|
||||||
*/
|
*/
|
||||||
@ -846,7 +908,7 @@ static void parse_commandline(const int argc, char *argv[])
|
|||||||
if (strcmp(argv[i], "--port") == 0)
|
if (strcmp(argv[i], "--port") == 0)
|
||||||
{
|
{
|
||||||
if (++i >= argc) errx(1, "missing number after --port");
|
if (++i >= argc) errx(1, "missing number after --port");
|
||||||
bindport = (u_int16_t)atoi(argv[i]);
|
bindport = (unsigned short)atoi(argv[i]);
|
||||||
}
|
}
|
||||||
else if (strcmp(argv[i], "--addr") == 0)
|
else if (strcmp(argv[i], "--addr") == 0)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user