Artifact
7ec2f0ae2dcd5c6434cea01fccd70665ca1f6272:
Ticket change
[7ec2f0ae2d]
- Ticket
[d17d6e5b17] Handle file names containing brackets, interrogation mark or asterisk status still Open with 1 other change
by
anonymous
2012-11-20 15:23:31.
0000: 44 20 32 30 31 32 2d 31 31 2d 32 30 54 31 35 3a D 2012-11-20T15:
0010: 32 33 3a 33 31 2e 35 33 33 0a 4a 20 2b 63 6f 6d 23:31.533.J +com
0020: 6d 65 6e 74 20 5c 6e 5c 6e 3c 68 72 5c 73 2f 3e ment \n\n<hr\s/>
0030: 3c 69 3e 61 6e 6f 6e 79 6d 6f 75 73 5c 73 61 64 <i>anonymous\sad
0040: 64 65 64 5c 73 6f 6e 5c 73 32 30 31 32 2d 31 31 ded\son\s2012-11
0050: 2d 32 30 5c 73 31 35 3a 32 33 3a 33 31 5c 73 55 -20\s15:23:31\sU
0060: 54 43 3a 3c 2f 69 3e 3c 62 72 5c 73 2f 3e 5c 6e TC:</i><br\s/>\n
0070: 3c 70 72 65 3e 5c 72 5c 6e 63 68 61 72 5c 73 2a <pre>\r\nchar\s*
0080: 66 6f 73 73 69 6c 5f 75 6e 69 63 6f 64 65 5f 74 fossil_unicode_t
0090: 6f 5f 75 74 66 38 28 76 6f 69 64 5c 73 2a 7a 55 o_utf8(void\s*zU
00a0: 6e 69 63 6f 64 65 29 7b 5c 72 5c 6e 23 69 66 64 nicode){\r\n#ifd
00b0: 65 66 5c 73 5f 57 49 4e 33 32 5c 72 5c 6e 5c 73 ef\s_WIN32\r\n\s
00c0: 5c 73 69 6e 74 5c 73 6e 42 79 74 65 5c 73 3d 5c \sint\snByte\s=\
00d0: 73 30 3b 5c 72 5c 6e 5c 73 5c 73 63 68 61 72 5c s0;\r\n\s\schar\
00e0: 73 2a 7a 55 74 66 3b 5c 72 5c 6e 5c 73 5c 73 57 s*zUtf;\r\n\s\sW
00f0: 43 48 41 52 5c 73 2a 77 55 6e 69 63 6f 64 65 5c CHAR\s*wUnicode\
0100: 73 3d 5c 73 7a 55 6e 69 63 6f 64 65 3b 5c 72 5c s=\szUnicode;\r\
0110: 6e 2f 2a 5c 72 5c 6e 54 68 69 73 5c 73 6d 79 5c n/*\r\nThis\smy\
0120: 73 68 61 76 65 5c 73 70 72 6f 62 6c 65 6d 5c 73 shave\sproblem\s
0130: 77 68 65 6e 5c 73 7a 55 6e 69 63 6f 64 65 5c 73 when\szUnicode\s
0140: 69 73 5c 73 72 65 61 64 6f 6e 6c 79 2e 5c 72 5c is\sreadonly.\r\
0150: 6e 41 6e 64 5c 73 69 74 27 73 5c 73 77 69 6c 6c nAnd\sit's\swill
0160: 5c 73 6d 6f 64 69 66 79 5c 73 7a 55 6e 69 63 6f \smodify\szUnico
0170: 64 65 5c 73 77 68 65 6e 5c 73 73 6f 6d 65 74 69 de\swhen\ssometi
0180: 6d 65 73 5c 73 77 65 5c 73 64 69 64 5c 73 6e 6f mes\swe\sdid\sno
0190: 74 5c 73 77 61 6e 74 5c 73 74 6f 5c 73 6d 6f 64 t\swant\sto\smod
01a0: 69 66 79 5c 73 69 74 2e 5c 72 5c 6e 2a 2f 5c 72 ify\sit.\r\n*/\r
01b0: 5c 6e 5c 73 5c 73 77 68 69 6c 65 28 5c 73 2a 77 \n\s\swhile(\s*w
01c0: 55 6e 69 63 6f 64 65 5c 73 21 3d 5c 73 30 5c 73 Unicode\s!=\s0\s
01d0: 29 7b 5c 72 5c 6e 5c 73 5c 73 5c 73 5c 73 69 66 ){\r\n\s\s\s\sif
01e0: 5c 73 28 5c 73 28 2a 77 55 6e 69 63 6f 64 65 5c \s(\s(*wUnicode\
01f0: 73 3e 5c 73 30 78 46 30 30 30 29 5c 73 26 26 5c s>\s0xF000)\s&&\
0200: 73 28 2a 77 55 6e 69 63 6f 64 65 5c 73 3c 3d 5c s(*wUnicode\s<=\
0210: 73 30 78 46 30 37 46 29 5c 73 29 7b 5c 72 5c 6e s0xF07F)\s){\r\n
0220: 5c 73 5c 73 5c 73 5c 73 5c 73 5c 73 2a 77 55 6e \s\s\s\s\s\s*wUn
0230: 69 63 6f 64 65 5c 73 26 3d 5c 73 30 78 37 46 3b icode\s&=\s0x7F;
0240: 5c 72 5c 6e 5c 73 5c 73 5c 73 5c 73 7d 5c 72 5c \r\n\s\s\s\s}\r\
0250: 6e 5c 73 5c 73 5c 73 5c 73 2b 2b 77 55 6e 69 63 n\s\s\s\s++wUnic
0260: 6f 64 65 3b 5c 72 5c 6e 5c 73 5c 73 7d 5c 72 5c ode;\r\n\s\s}\r\
0270: 6e 5c 73 5c 73 6e 42 79 74 65 5c 73 3d 5c 73 57 n\s\snByte\s=\sW
0280: 69 64 65 43 68 61 72 54 6f 4d 75 6c 74 69 42 79 ideCharToMultiBy
0290: 74 65 28 43 50 5f 55 54 46 38 2c 5c 73 30 2c 5c te(CP_UTF8,\s0,\
02a0: 73 7a 55 6e 69 63 6f 64 65 2c 5c 73 2d 31 2c 5c szUnicode,\s-1,\
02b0: 73 30 2c 5c 73 30 2c 5c 73 30 2c 5c 73 30 29 3b s0,\s0,\s0,\s0);
02c0: 5c 72 5c 6e 5c 73 5c 73 7a 55 74 66 5c 73 3d 5c \r\n\s\szUtf\s=\
02d0: 73 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 ssqlite3_malloc(
02e0: 5c 73 6e 42 79 74 65 5c 73 29 3b 5c 72 5c 6e 5c \snByte\s);\r\n\
02f0: 73 5c 73 69 66 28 5c 73 7a 55 74 66 3d 3d 30 5c s\sif(\szUtf==0\
0300: 73 29 7b 5c 72 5c 6e 5c 73 5c 73 5c 73 5c 73 72 s){\r\n\s\s\s\sr
0310: 65 74 75 72 6e 5c 73 30 3b 5c 72 5c 6e 5c 73 5c eturn\s0;\r\n\s\
0320: 73 7d 5c 72 5c 6e 5c 73 5c 73 57 69 64 65 43 68 s}\r\n\s\sWideCh
0330: 61 72 54 6f 4d 75 6c 74 69 42 79 74 65 28 43 50 arToMultiByte(CP
0340: 5f 55 54 46 38 2c 5c 73 30 2c 5c 73 7a 55 6e 69 _UTF8,\s0,\szUni
0350: 63 6f 64 65 2c 5c 73 2d 31 2c 5c 73 7a 55 74 66 code,\s-1,\szUtf
0360: 2c 5c 73 6e 42 79 74 65 2c 5c 73 30 2c 5c 73 30 ,\snByte,\s0,\s0
0370: 29 3b 5c 72 5c 6e 5c 73 5c 73 72 65 74 75 72 6e );\r\n\s\sreturn
0380: 5c 73 7a 55 74 66 3b 5c 72 5c 6e 23 65 6c 73 65 \szUtf;\r\n#else
0390: 5c 72 5c 6e 5c 73 5c 73 72 65 74 75 72 6e 5c 73 \r\n\s\sreturn\s
03a0: 28 63 68 61 72 5c 73 2a 29 7a 55 6e 69 63 6f 64 (char\s*)zUnicod
03b0: 65 3b 5c 73 5c 73 2f 2a 5c 73 4e 6f 2d 6f 70 5c e;\s\s/*\sNo-op\
03c0: 73 6f 6e 5c 73 75 6e 69 78 5c 73 2a 2f 5c 72 5c son\sunix\s*/\r\
03d0: 6e 23 65 6e 64 69 66 5c 72 5c 6e 7d 5c 72 5c 6e n#endif\r\n}\r\n
03e0: 3c 2f 70 72 65 3e 5c 72 5c 6e 5c 72 5c 6e 5c 72 </pre>\r\n\r\n\r
03f0: 5c 6e 5c 72 5c 6e 5c 72 5c 6e 5c 72 5c 6e 5c 72 \n\r\n\r\n\r\n\r
0400: 5c 6e 5c 72 5c 6e 5c 72 5c 6e 5c 72 5c 6e 3c 70 \n\r\n\r\n\r\n<p
0410: 72 65 3e 5c 72 5c 6e 76 6f 69 64 5c 73 2a 66 6f re>\r\nvoid\s*fo
0420: 73 73 69 6c 5f 75 74 66 38 5f 74 6f 5f 75 6e 69 ssil_utf8_to_uni
0430: 63 6f 64 65 28 63 6f 6e 73 74 5c 73 63 68 61 72 code(const\schar
0440: 5c 73 2a 7a 55 74 66 38 29 7b 5c 72 5c 6e 23 69 \s*zUtf8){\r\n#i
0450: 66 64 65 66 5c 73 5f 57 49 4e 33 32 5c 72 5c 6e fdef\s_WIN32\r\n
0460: 2f 2a 5c 73 6e 57 6f 72 64 5c 73 73 68 6f 75 6c /*\snWord\sshoul
0470: 64 5c 73 62 65 5c 73 6d 65 61 6e 69 6e 67 66 75 d\sbe\smeaningfu
0480: 6c 5c 73 74 68 61 6e 5c 73 6e 42 79 74 65 5c 73 l\sthan\snByte\s
0490: 68 65 72 65 2a 2f 5c 72 5c 6e 5c 73 5c 73 69 6e here*/\r\n\s\sin
04a0: 74 5c 73 6e 42 79 74 65 5c 73 3d 5c 73 4d 75 6c t\snByte\s=\sMul
04b0: 74 69 42 79 74 65 54 6f 57 69 64 65 43 68 61 72 tiByteToWideChar
04c0: 28 43 50 5f 55 54 46 38 2c 5c 73 30 2c 5c 73 7a (CP_UTF8,\s0,\sz
04d0: 55 74 66 38 2c 5c 73 2d 31 2c 5c 73 30 2c 5c 73 Utf8,\s-1,\s0,\s
04e0: 30 29 3b 5c 72 5c 6e 5c 73 5c 73 77 63 68 61 72 0);\r\n\s\swchar
04f0: 5f 74 5c 73 2a 7a 55 6e 69 63 6f 64 65 5c 73 3d _t\s*zUnicode\s=
0500: 5c 73 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 \ssqlite3_malloc
0510: 28 5c 73 6e 42 79 74 65 5c 73 2a 5c 73 32 5c 73 (\snByte\s*\s2\s
0520: 29 3b 5c 72 5c 6e 5c 73 5c 73 77 63 68 61 72 5f );\r\n\s\swchar_
0530: 74 5c 73 2a 77 55 6e 69 63 6f 64 65 3b 5c 72 5c t\s*wUnicode;\r\
0540: 6e 5c 73 5c 73 69 66 28 5c 73 7a 55 6e 69 63 6f n\s\sif(\szUnico
0550: 64 65 3d 3d 30 5c 73 29 7b 5c 72 5c 6e 5c 73 5c de==0\s){\r\n\s\
0560: 73 5c 73 5c 73 72 65 74 75 72 6e 5c 73 30 3b 5c s\s\sreturn\s0;\
0570: 72 5c 6e 5c 73 5c 73 7d 5c 72 5c 6e 5c 73 5c 73 r\n\s\s}\r\n\s\s
0580: 4d 75 6c 74 69 42 79 74 65 54 6f 57 69 64 65 43 MultiByteToWideC
0590: 68 61 72 28 43 50 5f 55 54 46 38 2c 5c 73 30 2c har(CP_UTF8,\s0,
05a0: 5c 73 7a 55 74 66 38 2c 5c 73 2d 31 2c 5c 73 7a \szUtf8,\s-1,\sz
05b0: 55 6e 69 63 6f 64 65 2c 5c 73 6e 42 79 74 65 29 Unicode,\snByte)
05c0: 3b 5c 72 5c 6e 5c 73 5c 73 77 55 6e 69 63 6f 64 ;\r\n\s\swUnicod
05d0: 65 5c 73 3d 5c 73 7a 55 6e 69 63 6f 64 65 3b 5c e\s=\szUnicode;\
05e0: 72 5c 6e 5c 73 5c 73 77 68 69 6c 65 28 5c 73 2d r\n\s\swhile(\s-
05f0: 2d 6e 42 79 74 65 5c 73 3e 5c 73 30 29 7b 5c 72 -nByte\s>\s0){\r
0600: 5c 6e 5c 73 5c 73 5c 73 5c 73 69 66 5c 73 28 5c \n\s\s\s\sif\s(\
0610: 73 28 2a 77 55 6e 69 63 6f 64 65 5c 73 3c 5c 73 s(*wUnicode\s<\s
0620: 33 32 29 5c 73 7c 7c 5c 73 77 63 73 63 68 72 28 32)\s||\swcschr(
0630: 4c 22 5c 5c 22 2a 3c 3e 3f 7c 22 2c 5c 73 2a 77 L"\\"*<>?|",\s*w
0640: 55 6e 69 63 6f 64 65 29 5c 73 29 7b 5c 72 5c 6e Unicode)\s){\r\n
0650: 5c 73 5c 73 5c 73 5c 73 5c 73 5c 73 2a 77 55 6e \s\s\s\s\s\s*wUn
0660: 69 63 6f 64 65 5c 73 7c 3d 5c 73 30 78 46 30 30 icode\s|=\s0xF00
0670: 30 3b 5c 72 5c 6e 5c 73 5c 73 5c 73 5c 73 7d 5c 0;\r\n\s\s\s\s}\
0680: 72 5c 6e 5c 73 5c 73 5c 73 5c 73 2b 2b 77 55 6e r\n\s\s\s\s++wUn
0690: 69 63 6f 64 65 3b 5c 72 5c 6e 5c 73 5c 73 7d 5c icode;\r\n\s\s}\
06a0: 72 5c 6e 5c 72 5c 6e 5c 73 5c 73 72 65 74 75 72 r\n\r\n\s\sretur
06b0: 6e 5c 73 7a 55 6e 69 63 6f 64 65 3b 5c 72 5c 6e n\szUnicode;\r\n
06c0: 23 65 6c 73 65 5c 72 5c 6e 5c 73 5c 73 72 65 74 #else\r\n\s\sret
06d0: 75 72 6e 5c 73 28 76 6f 69 64 5c 73 2a 29 7a 55 urn\s(void\s*)zU
06e0: 74 66 38 3b 5c 73 5c 73 2f 2a 5c 73 4e 6f 2d 6f tf8;\s\s/*\sNo-o
06f0: 70 5c 73 6f 6e 5c 73 75 6e 69 78 5c 73 2a 2f 5c p\son\sunix\s*/\
0700: 72 5c 6e 23 65 6e 64 69 66 5c 72 5c 6e 7d 5c 72 r\n#endif\r\n}\r
0710: 5c 6e 3c 2f 70 72 65 3e 0a 4b 20 64 31 37 64 36 \n</pre>.K d17d6
0720: 65 35 62 31 37 34 62 64 36 66 38 62 62 65 38 62 e5b174bd6f8bbe8b
0730: 65 36 66 38 35 31 64 65 33 64 37 32 31 31 39 30 e6f851de3d721190
0740: 61 66 38 0a 55 20 61 6e 6f 6e 79 6d 6f 75 73 0a af8.U anonymous.
0750: 5a 20 63 61 64 36 35 35 34 30 35 33 63 36 34 64 Z cad6554053c64d
0760: 61 38 30 34 61 64 66 66 38 39 61 34 65 34 62 32 a804adff89a4e4b2
0770: 32 63 0a 2c.