File tree Expand file tree Collapse file tree 1 file changed +20
-18
lines changed Expand file tree Collapse file tree 1 file changed +20
-18
lines changed 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