. Uncast xmalloc() and xrealloc() returns.

. Changed `#if IDLETIME' to `if (IDLETIME)' - it will be
  optimized away by the compiler.
. Some casts and an int->size_t change to keep splint happy about
  integer types.
This commit is contained in:
Emil Mikulic 2003-11-15 05:16:19 +00:00
parent b1b9432123
commit a4740dfda2

View File

@ -235,9 +235,9 @@ static void *xrealloc(void *original, const size_t size)
*/ */
static char *xstrdup(const char *src) static char *xstrdup(const char *src)
{ {
size_t len = strlen(src); size_t len = strlen(src) + 1;
char *dest = (char*) xmalloc(len + 1); char *dest = xmalloc(len);
memcpy(dest, src, len+1); memcpy(dest, src, len);
return dest; return dest;
} }
@ -276,6 +276,7 @@ static unsigned int xasprintf(char **ret, const char *format, ...)
*/ */
static void nonblock_socket(const int sock) static void nonblock_socket(const int sock)
{ {
assert(sock != -1);
if (fcntl(sock, F_SETFL, O_NONBLOCK) == -1) if (fcntl(sock, F_SETFL, O_NONBLOCK) == -1)
err(1, "fcntl() to set O_NONBLOCK"); err(1, "fcntl() to set O_NONBLOCK");
} }
@ -291,7 +292,7 @@ static char *split_string(const char *src,
char *dest; char *dest;
assert(left <= right); assert(left <= right);
dest = (char*) xmalloc(right - left + 1); dest = xmalloc(right - left + 1);
memcpy(dest, src+left, right-left); memcpy(dest, src+left, right-left);
dest[right-left] = '\0'; dest[right-left] = '\0';
return dest; return dest;
@ -308,6 +309,8 @@ static char *make_safe_uri(const char *uri)
char **elements, **reassembly, *out; char **elements, **reassembly, *out;
unsigned int slashes, elem, reasm, urilen, i, j; unsigned int slashes, elem, reasm, urilen, i, j;
assert(uri != NULL);
if (uri[0] != '/') return NULL; if (uri[0] != '/') return NULL;
urilen = (unsigned int)strlen(uri); urilen = (unsigned int)strlen(uri);
@ -316,7 +319,7 @@ static char *make_safe_uri(const char *uri)
if (uri[i] == '/') slashes++; if (uri[i] == '/') slashes++;
/* make an array for the URI elements */ /* make an array for the URI elements */
elements = (char**) xmalloc(sizeof(char*) * slashes); elements = xmalloc(sizeof(char*) * slashes);
for (i=0; i<slashes; i++) elements[i] = NULL; for (i=0; i<slashes; i++) elements[i] = NULL;
/* split by slash */ /* split by slash */
@ -335,7 +338,7 @@ static char *make_safe_uri(const char *uri)
i = j; /* iterate */ i = j; /* iterate */
} }
reassembly = (char**) xmalloc(sizeof(char*) * slashes); reassembly = xmalloc(sizeof(char*) * slashes);
for (i=0; i<slashes; i++) reassembly[i] = NULL; for (i=0; i<slashes; i++) reassembly[i] = NULL;
reasm = 0; reasm = 0;
@ -368,7 +371,7 @@ static char *make_safe_uri(const char *uri)
} }
/* reassemble */ /* reassemble */
out = (char*) xmalloc(urilen+1); out = xmalloc(urilen+1);
out[0] = '\0'; out[0] = '\0';
for (i=0; i<reasm; i++) for (i=0; i<reasm; i++)
@ -377,7 +380,7 @@ static char *make_safe_uri(const char *uri)
strcat(out, reassembly[i]); strcat(out, reassembly[i]);
} }
out = (char*) xrealloc(out, strlen(out)+1); /* shorten buffer */ out = xrealloc(out, strlen(out)+1); /* shorten buffer */
debugf("`%s' -safe-> `%s'\n", uri, out); debugf("`%s' -safe-> `%s'\n", uri, out);
for (j=0; j<elem; j++) for (j=0; j<elem; j++)
if (elements[j] != NULL) free(elements[j]); if (elements[j] != NULL) free(elements[j]);
@ -415,8 +418,8 @@ static void add_mime_mapping(const char *extension, const char *mimetype)
/* no replacement - add a new entry */ /* no replacement - add a new entry */
mime_map_size++; mime_map_size++;
mime_map = (struct mime_mapping *) mime_map = xrealloc(mime_map,
xrealloc(mime_map, sizeof(struct mime_mapping) * mime_map_size); sizeof(struct mime_mapping) * mime_map_size);
mime_map[mime_map_size-1].extension = xstrdup(extension); mime_map[mime_map_size-1].extension = xstrdup(extension);
mime_map[mime_map_size-1].mimetype = xstrdup(mimetype); mime_map[mime_map_size-1].mimetype = xstrdup(mimetype);
} }
@ -537,7 +540,7 @@ static void parse_extension_map_file(const char *filename)
if (line_len-1 != 0) if (line_len-1 != 0)
{ {
/* alloc and fill up buf */ /* alloc and fill up buf */
buf = (char*) xmalloc(line_len); buf = xmalloc(line_len);
if (fread(buf, 1, line_len-1, fp) != (line_len-1)) if (fread(buf, 1, line_len-1, fp) != (line_len-1))
err(1, "fread()"); err(1, "fread()");
buf[line_len-1] = '\0'; buf[line_len-1] = '\0';
@ -572,8 +575,9 @@ static const char *uri_content_type(const char *uri)
size_t period, urilen = strlen(uri); size_t period, urilen = strlen(uri);
for (period=urilen-1; for (period=urilen-1;
period > 0 && uri[period] != '.' && period > 0 &&
(urilen-period-1) <= longest_ext; uri[period] != '.' &&
(urilen-period-1) <= longest_ext;
period--) period--)
; ;
@ -707,7 +711,7 @@ static void strip_endslash(char **str)
if ((*str)[strlen(*str)-1] != '/') return; if ((*str)[strlen(*str)-1] != '/') return;
(*str)[strlen(*str)-1] = 0; (*str)[strlen(*str)-1] = 0;
*str = (char*) xrealloc(*str, strlen(*str)+1); *str = xrealloc(*str, strlen(*str)+1);
} }
@ -779,8 +783,7 @@ static void parse_commandline(const int argc, char *argv[])
*/ */
static struct connection *new_connection(void) static struct connection *new_connection(void)
{ {
struct connection *conn = (struct connection *) struct connection *conn = xmalloc(sizeof(struct connection));
xmalloc(sizeof(struct connection));
conn->socket = -1; conn->socket = -1;
conn->client = INADDR_ANY; conn->client = INADDR_ANY;
@ -886,13 +889,14 @@ static void strntoupper(char *str, const size_t length)
*/ */
static void poll_check_timeout(struct connection *conn) static void poll_check_timeout(struct connection *conn)
{ {
#if IDLETIME > 0 if (IDLETIME > 0) /* optimised away by compiler */
if (time(NULL) - conn->last_active >= IDLETIME)
{ {
debugf("poll_check_timeout(%d) caused closure\n", conn->socket); if (time(NULL) - conn->last_active >= IDLETIME)
conn->state = DONE; {
debugf("poll_check_timeout(%d) caused closure\n", conn->socket);
conn->state = DONE;
}
} }
#endif
} }
@ -920,7 +924,7 @@ static char *rfc1123_date(char *dest, const time_t when)
static char *urldecode(const char *url) static char *urldecode(const char *url)
{ {
size_t i, len = strlen(url); size_t i, len = strlen(url);
char *out = (char*)xmalloc(len+1); char *out = xmalloc(len+1);
int pos; int pos;
for (i=0, pos=0; i<len; i++) for (i=0, pos=0; i<len; i++)
@ -1252,7 +1256,8 @@ static void process_get(struct connection *conn)
from, to, filestat.st_size, mimetype, lastmod from, to, filestat.st_size, mimetype, lastmod
); );
conn->http_code = 206; conn->http_code = 206;
debugf("sending %d-%d/%d\n", from, to, (int)filestat.st_size); debugf("sending %u-%u/%u\n", (unsigned int)from, (unsigned int)to,
(unsigned int)filestat.st_size);
} }
else /* no range stuff */ else /* no range stuff */
{ {
@ -1449,10 +1454,10 @@ static void poll_send_reply(struct connection *conn)
} }
conn->last_active = time(NULL); conn->last_active = time(NULL);
debugf("poll_send_reply(%d) sent %d: %d+[%d-%d] of %d\n", debugf("poll_send_reply(%d) sent %d: %d+[%d-%d] of %d\n",
conn->socket, (int)sent, conn->reply_start, conn->socket, (int)sent, (int)conn->reply_start,
(int)conn->reply_sent, (int)conn->reply_sent,
(int)(conn->reply_sent + sent - 1), (int)(conn->reply_sent + sent - 1),
conn->reply_length); (int)conn->reply_length);
/* handle any errors (-1) or closure (0) in send() */ /* handle any errors (-1) or closure (0) in send() */
if (sent < 1) if (sent < 1)
@ -1612,7 +1617,7 @@ static void httpd_poll(void)
static void exit_quickly(int sig) static void exit_quickly(int sig)
{ {
struct connection *conn; struct connection *conn;
int i; size_t i;
printf("\ncaught %s, cleaning up...", strsignal(sig)); fflush(stdout); printf("\ncaught %s, cleaning up...", strsignal(sig)); fflush(stdout);
/* close and free connections */ /* close and free connections */
@ -1642,7 +1647,7 @@ static void exit_quickly(int sig)
/* According to: http://www.cons.org/cracauer/sigint.html /* According to: http://www.cons.org/cracauer/sigint.html
* SIGINT and SIGQUIT should be sent to the default handler to ensure the * SIGINT and SIGQUIT should be sent to the default handler to ensure the
* correct exit codes are used: * correct exit codes are used: (FIXME - not appropriate for httpd?)
if (signal(sig, SIG_DFL) == SIG_ERR) err(1, "signal(SIG_DFL)"); if (signal(sig, SIG_DFL) == SIG_ERR) err(1, "signal(SIG_DFL)");
if (raise(sig) == -1) err(1, "raise()"); if (raise(sig) == -1) err(1, "raise()");
@ -1684,7 +1689,7 @@ int main(int argc, char *argv[])
for (;;) httpd_poll(); for (;;) httpd_poll();
return 0; /* unreachable */ return EXIT_FAILURE; /* unreachable */
} }
/* vim:set tabstop=4 shiftwidth=4 expandtab tw=78: */ /* vim:set tabstop=4 shiftwidth=4 expandtab tw=78: */