add size, access, and mtime to ngx_walk_tree()
Igor Sysoev
15 years ago
444 | 444 |
|
445 | 445 |
prev = ctx->data;
|
446 | 446 |
|
447 | |
if (ctx->size) {
|
448 | |
data = ngx_alloc(ctx->size, ctx->log);
|
|
447 |
if (ctx->alloc) {
|
|
448 |
data = ngx_alloc(ctx->alloc, ctx->log);
|
449 | 449 |
if (data == NULL) {
|
450 | 450 |
goto failed;
|
451 | 451 |
}
|
|
528 | 528 |
ngx_log_debug1(NGX_LOG_DEBUG_CORE, ctx->log, 0,
|
529 | 529 |
"tree file \"%s\"", file.data);
|
530 | 530 |
|
|
531 |
ctx->size = ngx_de_size(&dir);
|
|
532 |
ctx->access = ngx_de_access(&dir);
|
|
533 |
ctx->mtime = ngx_de_mtime(&dir);
|
|
534 |
|
531 | 535 |
if (ctx->file_handler(ctx, &file) == NGX_ABORT) {
|
532 | 536 |
goto failed;
|
533 | 537 |
}
|
|
537 | 541 |
ngx_log_debug1(NGX_LOG_DEBUG_CORE, ctx->log, 0,
|
538 | 542 |
"tree enter dir \"%s\"", file.data);
|
539 | 543 |
|
|
544 |
ctx->access = ngx_de_access(&dir);
|
|
545 |
ctx->mtime = ngx_de_mtime(&dir);
|
|
546 |
|
540 | 547 |
if (ctx->pre_tree_handler(ctx, &file) == NGX_ABORT) {
|
541 | 548 |
goto failed;
|
542 | 549 |
}
|
|
545 | 552 |
goto failed;
|
546 | 553 |
}
|
547 | 554 |
|
|
555 |
ctx->access = ngx_de_access(&dir);
|
|
556 |
ctx->mtime = ngx_de_mtime(&dir);
|
|
557 |
|
548 | 558 |
if (ctx->post_tree_handler(ctx, &file) == NGX_ABORT) {
|
549 | 559 |
goto failed;
|
550 | 560 |
}
|
|
570 | 580 |
ngx_free(buf.data);
|
571 | 581 |
}
|
572 | 582 |
|
573 | |
if (ctx->data) {
|
|
583 |
if (ctx->alloc) {
|
574 | 584 |
ngx_free(ctx->data);
|
575 | 585 |
ctx->data = prev;
|
576 | 586 |
}
|
57 | 57 |
|
58 | 58 |
typedef struct ngx_tree_ctx_s ngx_tree_ctx_t;
|
59 | 59 |
|
60 | |
typedef ngx_int_t (*ngx_tree_init_handler_pt) (ngx_tree_ctx_t *ctx,
|
61 | |
ngx_tree_ctx_t *prev);
|
|
60 |
typedef ngx_int_t (*ngx_tree_init_handler_pt) (void *ctx, void *prev);
|
62 | 61 |
typedef ngx_int_t (*ngx_tree_handler_pt) (ngx_tree_ctx_t *ctx, ngx_str_t *name);
|
63 | 62 |
|
64 | 63 |
struct ngx_tree_ctx_s {
|
|
64 |
off_t size;
|
|
65 |
ngx_uint_t access;
|
|
66 |
time_t mtime;
|
|
67 |
|
65 | 68 |
ngx_tree_init_handler_pt init_handler;
|
66 | 69 |
ngx_tree_handler_pt file_handler;
|
67 | 70 |
ngx_tree_handler_pt pre_tree_handler;
|
68 | 71 |
ngx_tree_handler_pt post_tree_handler;
|
69 | 72 |
ngx_tree_handler_pt spec_handler;
|
|
73 |
|
70 | 74 |
void *data;
|
71 | |
size_t size;
|
|
75 |
size_t alloc;
|
|
76 |
|
72 | 77 |
ngx_log_t *log;
|
73 | 78 |
};
|
74 | 79 |
|
18 | 18 |
|
19 | 19 |
|
20 | 20 |
static ngx_int_t ngx_http_dav_handler(ngx_http_request_t *r);
|
21 | |
static ngx_int_t ngx_http_dav_no_init(ngx_tree_ctx_t *ctx,
|
22 | |
ngx_tree_ctx_t *prev);
|
|
21 |
static ngx_int_t ngx_http_dav_no_init(void *ctx, void *prev);
|
23 | 22 |
static ngx_int_t ngx_http_dav_noop(ngx_tree_ctx_t *ctx, ngx_str_t *path);
|
24 | 23 |
static ngx_int_t ngx_http_dav_delete_dir(ngx_tree_ctx_t *ctx, ngx_str_t *path);
|
25 | 24 |
static ngx_int_t ngx_http_dav_delete_file(ngx_tree_ctx_t *ctx, ngx_str_t *path);
|
|
189 | 188 |
tree.post_tree_handler = ngx_http_dav_delete_dir;
|
190 | 189 |
tree.spec_handler = ngx_http_dav_delete_file;
|
191 | 190 |
tree.data = NULL;
|
192 | |
tree.size = 0;
|
|
191 |
tree.alloc = 0;
|
193 | 192 |
tree.log = r->connection->log;
|
194 | 193 |
|
195 | 194 |
if (ngx_walk_tree(&tree, &path) == NGX_OK) {
|
|
269 | 268 |
|
270 | 269 |
|
271 | 270 |
static ngx_int_t
|
272 | |
ngx_http_dav_no_init(ngx_tree_ctx_t *ctx, ngx_tree_ctx_t *prev)
|
|
271 |
ngx_http_dav_no_init(void *ctx, void *prev)
|
273 | 272 |
{
|
274 | 273 |
return NGX_OK;
|
275 | 274 |
}
|