APACHE 2.0 STATUS: -*-text-*-
-Last modified at [$Date: 2004/05/14 11:30:42 $]
+Last modified at [$Date: 2004/05/17 14:13:49 $]
Release:
http://cvs.apache.org/viewcvs.cgi/httpd-2.0/modules/aaa/mod_auth_digest.c?r1=1.86&r2=1.87
+1: geoff, nd
- *) mod_dav: Fix a 2617 compliance issue
- http://cvs.apache.org/viewcvs.cgi/httpd-2.0/modules/dav/main/util.c?r1=1.53&r2=1.54
- +1: jorton, nd, trawick
-
*) mod_dav: Send an EOS at the end of the multistatus brigade.
http://cvs.apache.org/viewcvs.cgi/httpd-2.0/modules/dav/main/mod_dav.c?r1=1.105&r2=1.106
+1: jorton
nd asks: Sure, you want to drop the return code of ap_pass_brigade?
- *) mod_dav_fs: Better ENOSPC handling and a remove a write(,,0) call:
- http://cvs.apache.org/viewcvs.cgi/httpd-2.0/modules/dav/fs/repos.c?r1=1.77&r2=1.79
- +1: jorton, nd, trawick
-
*) Allow Satisfy directives to be influenced by <Limit>.
PR: 14726
include/http_core.h: r1.81
const char *pathname; /* we may need to remove it at close time */
};
+/* returns an appropriate HTTP status code given an APR status code for a
+ * failed I/O operation. ### use something besides 500? */
+#define MAP_IO2HTTP(e) (APR_STATUS_IS_ENOSPC(e) ? HTTP_INSUFFICIENT_STORAGE : \
+ HTTP_INTERNAL_SERVER_ERROR)
+
/* forward declaration for internal treewalkers */
static dav_error * dav_fs_walk(const dav_walk_params *params, int depth,
dav_response **response);
dav_buffer work_buf = { 0 };
apr_file_t *inf = NULL;
apr_file_t *outf = NULL;
+ apr_status_t status;
if (pbuf == NULL)
pbuf = &work_buf;
}
/* ### do we need to deal with the umask? */
- if ((apr_file_open(&outf, dst, APR_WRITE | APR_CREATE | APR_TRUNCATE | APR_BINARY,
- APR_OS_DEFAULT, p)) != APR_SUCCESS) {
+ status = apr_file_open(&outf, dst, APR_WRITE | APR_CREATE | APR_TRUNCATE
+ | APR_BINARY, APR_OS_DEFAULT, p);
+ if (status != APR_SUCCESS) {
apr_file_close(inf);
- /* ### use something besides 500? */
- return dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
+ return dav_new_error(p, MAP_IO2HTTP(status), 0,
"Could not open file for writing");
}
while (1) {
apr_size_t len = DAV_FS_COPY_BLOCKSIZE;
- apr_status_t status;
status = apr_file_read(inf, pbuf->buf, &len);
if (status != APR_SUCCESS && status != APR_EOF) {
"Could not read input file");
}
- /* write any bytes that were read (applies to APR_EOF, too) */
- if (apr_file_write_full(outf, pbuf->buf, len, NULL) != APR_SUCCESS) {
- int save_errno = errno;
+ if (status == APR_EOF)
+ break;
+ /* write any bytes that were read */
+ status = apr_file_write_full(outf, pbuf->buf, len, NULL);
+ if (status != APR_SUCCESS) {
apr_file_close(inf);
apr_file_close(outf);
"inconsistent state.");
}
- if (save_errno == ENOSPC) {
- return dav_new_error(p, HTTP_INSUFFICIENT_STORAGE, 0,
- "There is not enough storage to write to "
- "this resource.");
- }
-
- /* ### use something besides 500? */
- return dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
+ return dav_new_error(p, MAP_IO2HTTP(status), 0,
"Could not write output file");
}
-
- if (status == APR_EOF)
- break;
}
apr_file_close(inf);
apr_pool_t *p = resource->info->pool;
dav_stream *ds = apr_pcalloc(p, sizeof(*ds));
apr_int32_t flags;
+ apr_status_t rv;
switch (mode) {
default:
ds->p = p;
ds->pathname = resource->info->pathname;
- if (apr_file_open(&ds->f, ds->pathname, flags, APR_OS_DEFAULT,
- ds->p) != APR_SUCCESS) {
- /* ### use something besides 500? */
- return dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
+ rv = apr_file_open(&ds->f, ds->pathname, flags, APR_OS_DEFAULT, ds->p);
+ if (rv != APR_SUCCESS) {
+ return dav_new_error(p, MAP_IO2HTTP(rv), 0,
"An error occurred while opening a resource.");
}
apr_status_t status;
status = apr_dir_make(ctx->pathname, APR_OS_DEFAULT, ctx->pool);
- if (status == ENOSPC) {
+ if (APR_STATUS_IS_ENOSPC(status)) {
return dav_new_error(ctx->pool, HTTP_INSUFFICIENT_STORAGE, 0,
"There is not enough storage to create "
"this collection.");