Yes, everything's fine now. The warnings are gone and the logs are correct.
I build on 32 bit via fakeroot, no chroot or special environment
(however the initial bug was in the binary package). You confused me
whether you use 32 bit or 64.
Please, close the bug then.
Thanks,
Danya.
Index: boa-0.94.14rc21/src/boa.h
===================================================================
--- boa-0.94.14rc21.orig/src/boa.h 2007-11-03 00:51:46.000000000 -0400
+++ boa-0.94.14rc21/src/boa.h 2007-11-03 01:05:20.000000000 -0400
@@ -25,7 +25,9 @@
#ifndef _BOA_H
#define _BOA_H
+/* Important, include before anything else */
#include "config.h"
+
#include <errno.h>
#include <stdlib.h> /* malloc, free, etc. */
#include <stdio.h> /* stdin, stdout, stderr */
@@ -165,7 +167,7 @@
void clean_pathname(char *pathname);
char *get_commonlog_time(void);
void rfc822_time_buf(char *buf, time_t s);
-char *simple_itoa(unsigned int i);
+char *simple_itoa(uint64_t i);
int boa_atoi(const char *s);
int month2int(const char *month);
int modified_since(time_t * mtime, const char *if_modified_since);
Index: boa-0.94.14rc21/src/buffer.c
===================================================================
--- boa-0.94.14rc21.orig/src/buffer.c 2007-11-03 00:51:46.000000000 -0400
+++ boa-0.94.14rc21/src/buffer.c 2007-11-03 01:05:20.000000000 -0400
@@ -212,7 +212,7 @@
return -2;
if (bytes_to_write) {
- int bytes_written;
+ off_t bytes_written;
bytes_written = write(req->fd, req->buffer + req->buffer_start,
bytes_to_write);
Index: boa-0.94.14rc21/src/config.h.in
===================================================================
--- boa-0.94.14rc21.orig/src/config.h.in 2007-11-03 00:51:46.000000000 -0400
+++ boa-0.94.14rc21/src/config.h.in 2007-11-03 01:08:36.000000000 -0400
@@ -205,3 +205,16 @@
/* Define to `int' if <sys/types.h> doesn't define. */
#undef uid_t
+
+/* Those enable the LFS ready structures in the system headers */
+#define _FILE_OFFSET_BITS 64 /* glibc style */
+#define _LARGEFILE_SOURCE 1 /* To make ftello() visible (HP-UX 10.20). */
+#define _LARGE_FILES 1 /* Large file defined on AIX-style hosts. */
+
+#define _LARGEFILE64_SOURCE /* tell kernel headers to provide the O_LARGEFILE value */
+
+#if __WORDSIZE == 64
+#define PRINTF_OFF_T_ARG "%ld"
+#elif __WORDSIZE == 32
+#define PRINTF_OFF_T_ARG "%lld"
+#endif
Index: boa-0.94.14rc21/src/get.c
===================================================================
--- boa-0.94.14rc21.orig/src/get.c 2007-11-03 00:51:46.000000000 -0400
+++ boa-0.94.14rc21/src/get.c 2007-11-03 01:08:20.000000000 -0400
@@ -25,6 +25,10 @@
#include "boa.h"
#include "access.h"
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
#define STR(s) __STR(s)
#define __STR(s) #s
@@ -52,9 +56,9 @@
{
int data_fd, saved_errno;
struct stat statbuf;
- volatile unsigned int bytes_free;
+ volatile off_t bytes_free;
- data_fd = open(req->pathname, O_RDONLY);
+ data_fd = open(req->pathname, O_RDONLY|O_LARGEFILE);
saved_errno = errno; /* might not get used */
#ifdef GUNZIP
@@ -76,7 +80,7 @@
memcpy(gzip_pathname, req->pathname, len);
memcpy(gzip_pathname + len, ".gz", 3);
gzip_pathname[len + 3] = '\0';
- data_fd = open(gzip_pathname, O_RDONLY);
+ data_fd = open(gzip_pathname, O_RDONLY|O_LARGEFILE);
if (data_fd != -1) {
close(data_fd);
@@ -430,8 +434,8 @@
int process_get(request * req)
{
- int bytes_written;
- volatile unsigned int bytes_to_write;
+ off_t bytes_written;
+ volatile off_t bytes_to_write;
if (req->method == M_HEAD) {
return complete_response(req);
@@ -531,7 +535,7 @@
memcpy(pathname_with_index, req->pathname, l1); /* doesn't copy NUL */
memcpy(pathname_with_index + l1, directory_index, l2 + 1); /* does */
- data_fd = open(pathname_with_index, O_RDONLY);
+ data_fd = open(pathname_with_index, O_RDONLY|O_LARGEFILE);
if (data_fd != -1) { /* user's index file */
/* We have to assume that directory_index will fit, because
@@ -555,7 +559,7 @@
* try index.html.gz
*/
strcat(pathname_with_index, ".gz");
- data_fd = open(pathname_with_index, O_RDONLY);
+ data_fd = open(pathname_with_index, O_RDONLY|O_LARGEFILE);
if (data_fd != -1) { /* user's index file */
close(data_fd);
@@ -624,9 +628,9 @@
* include the NUL when calculating if the size is enough
*/
snprintf(pathname_with_index, sizeof(pathname_with_index),
- "%s/dir.%d.%ld", cachedir,
+ "%s/dir.%d." PRINTF_OFF_T_ARG, cachedir,
(int) statbuf->st_dev, statbuf->st_ino);
- data_fd = open(pathname_with_index, O_RDONLY);
+ data_fd = open(pathname_with_index, O_RDONLY|O_LARGEFILE);
if (data_fd != -1) { /* index cache */
@@ -642,7 +646,7 @@
if (index_directory(req, pathname_with_index) == -1)
return -1;
- data_fd = open(pathname_with_index, O_RDONLY); /* Last chance */
+ data_fd = open(pathname_with_index, O_RDONLY|O_LARGEFILE); /* Last chance */
if (data_fd != -1) {
strcpy(req->request_uri, directory_index); /* for mimetype */
fstat(data_fd, statbuf);
@@ -671,7 +675,7 @@
DIR *request_dir;
FILE *fdstream;
struct dirent *dirbuf;
- int bytes = 0;
+ off_t bytes = 0;
char *escname = NULL;
if (chdir(req->pathname) == -1) {
Index: boa-0.94.14rc21/src/globals.h
===================================================================
--- boa-0.94.14rc21.orig/src/globals.h 2007-11-03 00:51:46.000000000 -0400
+++ boa-0.94.14rc21/src/globals.h 2007-11-03 01:05:20.000000000 -0400
@@ -130,9 +130,9 @@
int numranges;
int data_fd; /* fd of data */
- unsigned long filesize; /* filesize */
- unsigned long filepos; /* position in file */
- unsigned long bytes_written; /* total bytes written (sans header) */
+ off_t filesize; /* filesize */
+ off_t filepos; /* position in file */
+ size_t bytes_written; /* total bytes written (sans header) */
char *data_mem; /* mmapped/malloced char array */
char *logline; /* line to log file */
Index: boa-0.94.14rc21/src/index_dir.c
===================================================================
--- boa-0.94.14rc21.orig/src/index_dir.c 2007-11-03 00:51:46.000000000 -0400
+++ boa-0.94.14rc21/src/index_dir.c 2007-11-03 01:08:11.000000000 -0400
@@ -19,6 +19,7 @@
/* $Id: index_dir.c,v 1.32.2.7 2005/02/22 03:00:24 jnelson Exp $*/
+#include "config.h"
#include <stdio.h>
#include <sys/stat.h>
#include <limits.h> /* for PATH_MAX */
@@ -266,10 +267,12 @@
printf("<tr>"
"<td width=\"40%%\"><a href=\"%s/\">%s/</a></td>"
"<td align=right>%s</td>"
- "<td align=right>%ld bytes</td>"
+ "<td align=right>"
+ PRINTF_OFF_T_ARG
+ " bytes</td>"
"</tr>\n",
escaped_filename, html_filename,
- ctime(&statbuf.st_mtime), (long) statbuf.st_size);
+ ctime(&statbuf.st_mtime), (off_t) statbuf.st_size);
}
printf
@@ -312,10 +315,12 @@
"<td width=\"40%%\"><a href=\"%s\">%s</a> "
"<a href=\"%s.gz\">(.gz)</a></td>"
"<td align=right>%s</td>"
- "<td align=right>%ld bytes</td>"
+ "<td align=right>"
+ PRINTF_OFF_T_ARG
+ "bytes</td>"
"</tr>\n",
escaped_filename, html_filename, http_filename,
- ctime(&statbuf.st_mtime), (long) statbuf.st_size);
+ ctime(&statbuf.st_mtime), (off_t) statbuf.st_size);
} else {
#endif
if (html_escape_string(http_filename, escaped_filename,
@@ -326,10 +331,12 @@
printf("<tr>"
"<td width=\"40%%\"><a href=\"%s\">%s</a></td>"
"<td align=right>%s</td>"
- "<td align=right>%ld bytes</td>"
+ "<td align=right>"
+ PRINTF_OFF_T_ARG
+ "bytes</td>"
"</tr>\n",
escaped_filename, html_filename,
- ctime(&statbuf.st_mtime), (long) statbuf.st_size);
+ ctime(&statbuf.st_mtime), (off_t) statbuf.st_size);
#ifdef GUNZIP
}
#endif
Index: boa-0.94.14rc21/src/log.c
===================================================================
--- boa-0.94.14rc21.orig/src/log.c 2007-11-03 00:51:46.000000000 -0400
+++ boa-0.94.14rc21/src/log.c 2007-11-03 01:05:20.000000000 -0400
@@ -146,7 +146,7 @@
} else if (vhost_root) {
printf("%s ", (req->host ? req->host : "(null)"));
}
- printf("%s - - %s\"%s\" %d %ld \"%s\" \"%s\"\n",
+ printf("%s - - %s\"%s\" %d %zu \"%s\" \"%s\"\n",
req->remote_ip_addr,
get_commonlog_time(),
req->logline ? req->logline : "-",
Index: boa-0.94.14rc21/src/mmap_cache.c
===================================================================
--- boa-0.94.14rc21.orig/src/mmap_cache.c 2007-11-03 00:51:46.000000000 -0400
+++ boa-0.94.14rc21/src/mmap_cache.c 2007-11-03 01:05:20.000000000 -0400
@@ -140,7 +140,7 @@
int data_fd;
struct stat statbuf;
struct mmap_entry *e;
- data_fd = open(fname, O_RDONLY);
+ data_fd = open(fname, O_RDONLY|O_LARGEFILE);
if (data_fd == -1) {
perror(fname);
return NULL;
Index: boa-0.94.14rc21/src/pipe.c
===================================================================
--- boa-0.94.14rc21.orig/src/pipe.c 2007-11-03 01:05:20.000000000 -0400
+++ boa-0.94.14rc21/src/pipe.c 2007-11-03 01:05:20.000000000 -0400
@@ -37,8 +37,8 @@
int read_from_pipe(request * req)
{
- int bytes_read; /* signed */
- unsigned int bytes_to_read; /* unsigned */
+ off_t bytes_read; /* signed */
+ off_t bytes_to_read; /* unsigned */ /* XXX really? */
bytes_to_read = BUFFER_SIZE - (req->header_end - req->buffer - 1);
@@ -128,8 +128,8 @@
int write_from_pipe(request * req)
{
- int bytes_written;
- size_t bytes_to_write = req->header_end - req->header_line;
+ off_t bytes_written;
+ off_t bytes_to_write = req->header_end - req->header_line;
if (bytes_to_write == 0) {
if (req->cgi_status == CGI_DONE)
@@ -170,9 +170,9 @@
#ifdef HAVE_SENDFILE
int io_shuffle_sendfile(request * req)
{
- int bytes_written;
- size_t bytes_to_write;
off_t sendfile_offset;
+ off_t bytes_written;
+ off_t bytes_to_write;
if (req->method == M_HEAD) {
return complete_response(req);
@@ -266,8 +266,8 @@
int io_shuffle(request * req)
{
- int bytes_to_read;
- int bytes_written, bytes_to_write;
+ off_t bytes_to_read;
+ off_t bytes_written, bytes_to_write;
if (req->method == M_HEAD) {
return complete_response(req);
@@ -287,7 +287,7 @@
bytes_to_read = bytes_to_write;
if (bytes_to_read > 0 && req->data_fd) {
- int bytes_read;
+ off_t bytes_read;
off_t temp;
temp = lseek(req->data_fd, req->ranges->start, SEEK_SET);
Index: boa-0.94.14rc21/src/range.c
===================================================================
--- boa-0.94.14rc21.orig/src/range.c 2007-11-03 00:51:46.000000000 -0400
+++ boa-0.94.14rc21/src/range.c 2007-11-03 01:05:20.000000000 -0400
@@ -147,7 +147,7 @@
* 5) start > stop && start != -1 :: invalid
*/
DEBUG(DEBUG_RANGE) {
- fprintf(stderr, "range.c: ranges_fixup: %lu-%lu\n", r->start, r->stop);
+ fprintf(stderr, "range.c: ranges_fixup: %lu - %lu\n", r->start, r->stop);
}
/* no stop range specified or stop is too big.
Index: boa-0.94.14rc21/src/read.c
===================================================================
--- boa-0.94.14rc21.orig/src/read.c 2007-11-03 00:51:46.000000000 -0400
+++ boa-0.94.14rc21/src/read.c 2007-11-03 01:05:20.000000000 -0400
@@ -38,7 +38,7 @@
int read_header(request * req)
{
- int bytes;
+ off_t bytes;
char *check, *buffer;
unsigned char uc;
@@ -179,7 +179,7 @@
*/
if (req->content_length) {
- int content_length;
+ off_t content_length;
content_length = boa_atoi(req->content_length);
/* Is a content-length of 0 legal? */
@@ -195,7 +195,7 @@
&& content_length > single_post_limit) {
log_error_doc(req);
fprintf(stderr,
- "Content-Length [%d] > SinglePostLimit [%d] on POST!\n",
+ "Content-Length [" PRINTF_OFF_T_ARG "] > SinglePostLimit [%d] on POST!\n",
content_length, single_post_limit);
send_r_bad_request(req);
return 0;
@@ -224,7 +224,7 @@
if (req->status < BODY_READ) {
/* only reached if request is split across more than one packet */
- unsigned int buf_bytes_left;
+ off_t buf_bytes_left;
buf_bytes_left = CLIENT_STREAM_SIZE - req->client_stream_pos;
if (buf_bytes_left < 1 || buf_bytes_left > CLIENT_STREAM_SIZE) {
@@ -273,7 +273,7 @@
DEBUG(DEBUG_HEADER_READ) {
log_error_time();
req->client_stream[req->client_stream_pos] = '\0';
- fprintf(stderr, "%s:%d -- We read %d bytes: \"%s\"\n",
+ fprintf(stderr, "%s:%d -- We read " PRINTF_OFF_T_ARG " bytes: \"%s\"\n",
__FILE__, __LINE__, bytes,
#ifdef VERY_FASCIST_LOGGING2
req->client_stream + req->client_stream_pos - bytes
@@ -309,8 +309,8 @@
int read_body(request * req)
{
- int bytes_read;
- unsigned int bytes_to_read, bytes_free;
+ off_t bytes_read;
+ off_t bytes_to_read, bytes_free;
bytes_free = BUFFER_SIZE - (req->header_end - req->header_line);
bytes_to_read = req->filesize - req->filepos;
@@ -367,8 +367,8 @@
int write_body(request * req)
{
- int bytes_written;
- unsigned int bytes_to_write = req->header_end - req->header_line;
+ off_t bytes_written;
+ off_t bytes_to_write = req->header_end - req->header_line;
if (req->filepos + bytes_to_write > req->filesize)
bytes_to_write = req->filesize - req->filepos;
@@ -402,7 +402,7 @@
}
DEBUG(DEBUG_HEADER_READ) {
log_error_time();
- fprintf(stderr, "%s:%d - wrote %d bytes of CGI body. %ld of %ld\n",
+ fprintf(stderr, "%s:%d - wrote " PRINTF_OFF_T_ARG " bytes of CGI body. " PRINTF_OFF_T_ARG " of " PRINTF_OFF_T_ARG "\n",
__FILE__, __LINE__,
bytes_written, req->filepos, req->filesize);
}
@@ -417,7 +417,7 @@
req->header_line[bytes_written] = '\0';
fprintf(stderr,
- "%s:%d - wrote %d bytes (%s). %lu of %lu\n",
+ "%s:%d - wrote " PRINTF_OFF_T_ARG " bytes (%s). " PRINTF_OFF_T_ARG " of " PRINTF_OFF_T_ARG "\n",
__FILE__, __LINE__, bytes_written,
req->header_line, req->filepos, req->filesize);
req->header_line[bytes_written] = c;
Index: boa-0.94.14rc21/src/request.c
===================================================================
--- boa-0.94.14rc21.orig/src/request.c 2007-11-03 00:51:46.000000000 -0400
+++ boa-0.94.14rc21/src/request.c 2007-11-03 01:05:20.000000000 -0400
@@ -259,14 +259,14 @@
static void sanitize_request(request * req, int new_req)
{
- static unsigned int bytes_to_zero = offsetof(request, fd);
+ static off_t bytes_to_zero = offsetof(request, fd);
if (new_req) {
req->kacount = ka_max;
req->time_last = current_time;
req->client_stream_pos = 0;
} else {
- unsigned int bytes_to_move =
+ off_t bytes_to_move =
req->client_stream_pos - req->parse_pos;
if (bytes_to_move) {
@@ -282,7 +282,7 @@
DEBUG(DEBUG_REQUEST) {
log_error_time();
- fprintf(stderr, "req: %p, offset: %u\n", (void *) req,
+ fprintf(stderr, "req: %p, offset: " PRINTF_OFF_T_ARG "\n", (void *) req,
bytes_to_zero);
}
Index: boa-0.94.14rc21/src/util.c
===================================================================
--- boa-0.94.14rc21.orig/src/util.c 2007-11-03 01:05:20.000000000 -0400
+++ boa-0.94.14rc21/src/util.c 2007-11-03 01:05:20.000000000 -0400
@@ -497,7 +497,7 @@
memcpy(p, day_tab + t->tm_wday * 4, 4);
}
-char *simple_itoa(unsigned int i)
+char *simple_itoa(uint64_t i)
{
/* 21 digits plus null terminator, good for 64-bit or smaller ints
* for bigger ints, use a bigger buffer!
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
iD8DBQBHLAUIWB6kg6FXdVkRAsRKAJ9xgj382qeGT9PXKBAOJo5BbcbIEACcDLdt
3A9pj3a+NYQxU8UUfd8aTV4=
=TmbL
-----END PGP SIGNATURE-----