File tree Expand file tree Collapse file tree 2 files changed +21
-19
lines changed
branches/incoming/src/libcore Expand file tree Collapse file tree 2 files changed +21
-19
lines changed Original file line number Diff line number Diff line change @@ -6,7 +6,7 @@ refs/heads/try: 3d5418789064fdb463e872a4e651af1c628a3650
6
6
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
7
7
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
8
8
refs/heads/try2: a810c03263670238bccd64cabb12a23a46e3a278
9
- refs/heads/incoming: b71381dcc9c7393dec2f45267c538ff126893120
9
+ refs/heads/incoming: 83675895af7c6af80cc8a4f5cec4e565dc829fca
10
10
refs/heads/dist-snap: 22efa39382d41b084fde1719df7ae8ce5697d8c9
11
11
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
12
12
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503
Original file line number Diff line number Diff line change @@ -106,27 +106,29 @@ pub mod win32 {
106
106
107
107
pub fn fill_utf16_buf_and_decode ( f : fn ( * mut u16 , DWORD ) -> DWORD )
108
108
-> Option < ~str > {
109
- let mut n = tmpbuf_sz as DWORD ;
110
- let mut res = None ;
111
- let mut done = false ;
112
- while !done {
113
- let buf = vec:: to_mut ( vec:: from_elem ( n as uint , 0u16 ) ) ;
114
- do vec:: as_mut_buf ( buf) |b, _sz| {
115
- let k : DWORD = f ( b, tmpbuf_sz as DWORD ) ;
116
- if k == ( 0 as DWORD ) {
117
- done = true ;
118
- } else if ( k == n &&
119
- libc:: GetLastError ( ) ==
120
- libc:: ERROR_INSUFFICIENT_BUFFER as DWORD ) {
121
- n *= ( 2 as DWORD ) ;
122
- } else {
123
- let sub = vec:: slice ( buf, 0 u, k as uint ) ;
124
- res = option:: Some ( str:: from_utf16 ( sub) ) ;
125
- done = true ;
109
+ unsafe {
110
+ let mut n = tmpbuf_sz as DWORD ;
111
+ let mut res = None ;
112
+ let mut done = false ;
113
+ while !done {
114
+ let buf = vec:: to_mut ( vec:: from_elem ( n as uint , 0u16 ) ) ;
115
+ do vec:: as_mut_buf ( buf) |b, _sz| {
116
+ let k : DWORD = f ( b, tmpbuf_sz as DWORD ) ;
117
+ if k == ( 0 as DWORD ) {
118
+ done = true ;
119
+ } else if ( k == n &&
120
+ libc:: GetLastError ( ) ==
121
+ libc:: ERROR_INSUFFICIENT_BUFFER as DWORD ) {
122
+ n *= ( 2 as DWORD ) ;
123
+ } else {
124
+ let sub = vec:: slice ( buf, 0 u, k as uint ) ;
125
+ res = option:: Some ( str:: from_utf16 ( sub) ) ;
126
+ done = true ;
127
+ }
126
128
}
127
129
}
130
+ return res;
128
131
}
129
- return res;
130
132
}
131
133
132
134
pub fn as_utf16_p < T > ( s : & str , f : fn ( * u16 ) -> T ) -> T {
You can’t perform that action at this time.
0 commit comments