comparison src/http/modules/ngx_http_autoindex_module.c @ 74:77969b24f355 NGINX_0_1_37

nginx 0.1.37 *) Change: now the "\n" is added to the end of the "nginx.pid" file. *) Bugfix: the responses may be transferred not completely, if many parts or the big parts were included by SSI. *) Bugfix: if all backends had returned the 404 reponse and the "http_404" parameter of the "proxy_next_upstream" or "fastcgi_next_upstream" directives was used, then nginx started to request all backends again.
author Igor Sysoev <http://sysoev.ru>
date Thu, 23 Jun 2005 00:00:00 +0400
parents b31656313b59
children da9a3b14312d
comparison
equal deleted inserted replaced
73:05310cdbd906 74:77969b24f355
22 #endif 22 #endif
23 23
24 24
25 typedef struct { 25 typedef struct {
26 ngx_str_t name; 26 ngx_str_t name;
27 size_t utf_len;
27 ngx_uint_t escape; 28 ngx_uint_t escape;
28 ngx_uint_t dir; 29 ngx_uint_t dir;
29 time_t mtime; 30 time_t mtime;
30 off_t size; 31 off_t size;
31 } ngx_http_autoindex_entry_t; 32 } ngx_http_autoindex_entry_t;
210 /* MSVC thinks 'entries' may be used without having been initialized */ 211 /* MSVC thinks 'entries' may be used without having been initialized */
211 ngx_memzero(&entries, sizeof(ngx_array_t)); 212 ngx_memzero(&entries, sizeof(ngx_array_t));
212 #endif 213 #endif
213 214
214 if (ngx_array_init(&entries, pool, 50, sizeof(ngx_http_autoindex_entry_t)) 215 if (ngx_array_init(&entries, pool, 50, sizeof(ngx_http_autoindex_entry_t))
215 == NGX_ERROR) 216 == NGX_ERROR)
216 { 217 {
217 return ngx_http_autoindex_error(r, &dir, dname.data); 218 return ngx_http_autoindex_error(r, &dir, dname.data);
218 } 219 }
219 220
220 r->headers_out.status = NGX_HTTP_OK; 221 r->headers_out.status = NGX_HTTP_OK;
302 if (entry == NULL) { 303 if (entry == NULL) {
303 return ngx_http_autoindex_error(r, &dir, dname.data); 304 return ngx_http_autoindex_error(r, &dir, dname.data);
304 } 305 }
305 306
306 entry->name.len = len; 307 entry->name.len = len;
308
307 entry->escape = 2 * ngx_escape_uri(NULL, ngx_de_name(&dir), len, 309 entry->escape = 2 * ngx_escape_uri(NULL, ngx_de_name(&dir), len,
308 NGX_ESCAPE_HTML); 310 NGX_ESCAPE_HTML);
309 311
310 entry->name.data = ngx_palloc(pool, len + entry->escape + 1); 312 entry->name.data = ngx_palloc(pool, len + entry->escape + 1);
311 if (entry->name.data == NULL) { 313 if (entry->name.data == NULL) {
312 return ngx_http_autoindex_error(r, &dir, dname.data); 314 return ngx_http_autoindex_error(r, &dir, dname.data);
313 } 315 }
314 316
315 ngx_cpystrn(entry->name.data, ngx_de_name(&dir), len + 1); 317 ngx_cpystrn(entry->name.data, ngx_de_name(&dir), len + 1);
318
319 if (r->utf8) {
320 entry->utf_len = ngx_utf_length(&entry->name);
321 } else {
322 entry->utf_len = len;
323 }
316 324
317 entry->dir = ngx_de_is_dir(&dir); 325 entry->dir = ngx_de_is_dir(&dir);
318 entry->mtime = ngx_de_mtime(&dir); 326 entry->mtime = ngx_de_mtime(&dir);
319 entry->size = ngx_de_size(&dir); 327 entry->size = ngx_de_size(&dir);
320 } 328 }
334 + sizeof(tail) - 1; 342 + sizeof(tail) - 1;
335 343
336 entry = entries.elts; 344 entry = entries.elts;
337 for (i = 0; i < entries.nelts; i++) { 345 for (i = 0; i < entries.nelts; i++) {
338 len += sizeof("<a href=\"") - 1 346 len += sizeof("<a href=\"") - 1
339 + 1 /* 1 is for "/" */ 347 + 1 /* 1 is for "/" */
340 + entry[i].name.len + entry[i].escape 348 + entry[i].name.len + entry[i].escape
341 + sizeof("\">") - 1 349 + sizeof("\">") - 1
342 + NGX_HTTP_AUTOINDEX_NAME_LEN + sizeof("&gt;") - 2 350 + entry[i].name.len - entry[i].utf_len
343 + sizeof("</a>") - 1 351 + NGX_HTTP_AUTOINDEX_NAME_LEN + sizeof("&gt;") - 2
344 + sizeof(" 28-Sep-1970 12:00 ") - 1 352 + sizeof("</a>") - 1
345 + 19 353 + sizeof(" 28-Sep-1970 12:00 ") - 1
346 + 2; 354 + 19
347 355 + 2;
348 if (r->utf8) {
349 len += entry[i].name.len - ngx_utf_length(&entry[i].name);
350 }
351 } 356 }
352 357
353 b = ngx_create_temp_buf(r->pool, len); 358 b = ngx_create_temp_buf(r->pool, len);
354 if (b == NULL) { 359 if (b == NULL) {
355 return NGX_HTTP_INTERNAL_SERVER_ERROR; 360 return NGX_HTTP_INTERNAL_SERVER_ERROR;
392 *b->last++ = '>'; 397 *b->last++ = '>';
393 398
394 b->last = ngx_cpystrn(b->last, entry[i].name.data, 399 b->last = ngx_cpystrn(b->last, entry[i].name.data,
395 NGX_HTTP_AUTOINDEX_NAME_LEN + 1); 400 NGX_HTTP_AUTOINDEX_NAME_LEN + 1);
396 401
397 if (r->utf8) { 402 len = entry[i].utf_len;
398 len = ngx_utf_length(&entry[i].name);
399 } else {
400 len = entry[i].name.len;
401 }
402 403
403 if (len > NGX_HTTP_AUTOINDEX_NAME_LEN) { 404 if (len > NGX_HTTP_AUTOINDEX_NAME_LEN) {
404 b->last = ngx_cpymem(b->last - 3, "..&gt;</a>", 405 b->last = ngx_cpymem(b->last - 3, "..&gt;</a>",
405 sizeof("..&gt;</a>") - 1); 406 sizeof("..&gt;</a>") - 1);
406 407