summaryrefslogtreecommitdiff
path: root/www/nginx/files/extra-patch-ngx_http_fancyindex_module.c
blob: 2b7512e39db6a2b68ae9c61a7224b2a44ef61135 (plain) (blame)
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 {