1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
--- ../nginx-fancyindex-0.1_beta5/ngx_http_fancyindex_module.c.orig 2007-09-29 01:02:05.000000000 +0400
+++ ../nginx-fancyindex-0.1_beta5/ngx_http_fancyindex_module.c 2009-06-03 16:41:36.000000000 +0400
@@ -290,12 +290,12 @@
ngx_http_fancyindex_entry_t *entry;
off_t length;
- size_t len, root, copy, allocated;
+ size_t len, root, utf_len, allocated;
u_char *filename, *last, scale;
ngx_tm_t tm;
ngx_array_t entries;
ngx_time_t *tp;
- ngx_uint_t i;
+ ngx_uint_t i, utf8;
ngx_int_t size;
ngx_str_t path;
ngx_str_t readme_path;
@@ -355,6 +355,15 @@
filename = path.data;
filename[path.len] = '/';
+ if (r->headers_out.charset.len == 5
+ && ngx_strncasecmp(r->headers_out.charset.data, (u_char *) "utf-8", 5)
+ == 0)
+ {
+ utf8 = 1;
+ } else {
+ utf8 = 0;
+ }
+
/* Read directory entries and their associated information. */
for (;;) {
ngx_set_errno(0);
@@ -425,8 +434,8 @@
entry->dir = ngx_de_is_dir(&dir);
entry->mtime = ngx_de_mtime(&dir);
entry->size = ngx_de_size(&dir);
- entry->utf_len = (r->utf8)
- ? ngx_utf_length(entry->name.data, entry->name.len)
+ entry->utf_len = utf8
+ ? ngx_utf8_length(entry->name.data, entry->name.len)
: len;
}
@@ -563,12 +572,13 @@
if (entry[i].name.len - len) {
if (len > NGX_HTTP_FANCYINDEX_NAME_LEN) {
- copy = NGX_HTTP_FANCYINDEX_NAME_LEN - 3 + 1;
+ utf_len = NGX_HTTP_FANCYINDEX_NAME_LEN - 3 + 1;
} else {
- copy = NGX_HTTP_FANCYINDEX_NAME_LEN + 1;
+ utf_len = NGX_HTTP_FANCYINDEX_NAME_LEN + 1;
}
- b->last = ngx_utf_cpystrn(b->last, entry[i].name.data, copy);
+ b->last = ngx_utf8_cpystrn(b->last, entry[i].name.data,
+ utf_len, entry[i].name.len + 1);
last = b->last;
} else {
|