4 * Copyright 1993 Yngvi Sigurjonsson
5 * Copyright 1996 Alexandre Julliard
14 /***********************************************************************
15 * hmemcpy (KERNEL.348)
17 void hmemcpy( LPVOID dst
, LPCVOID src
, LONG count
)
19 memcpy( dst
, src
, count
);
23 /***********************************************************************
24 * lstrcat16 (KERNEL.89)
26 SEGPTR
lstrcat16( SEGPTR dst
, SEGPTR src
)
28 lstrcat32A( (LPSTR
)PTR_SEG_TO_LIN(dst
), (LPCSTR
)PTR_SEG_TO_LIN(src
) );
33 /***********************************************************************
34 * lstrcat32A (KERNEL32.599)
36 LPSTR
lstrcat32A( LPSTR dst
, LPCSTR src
)
43 /***********************************************************************
44 * lstrcat32W (KERNEL32.600)
46 LPWSTR
lstrcat32W( LPWSTR dst
, LPCWSTR src
)
48 register LPWSTR p
= dst
;
50 while ((*p
++ = *src
++));
55 /***********************************************************************
56 * lstrcatn16 (KERNEL.352)
58 SEGPTR
lstrcatn16( SEGPTR dst
, SEGPTR src
, INT16 n
)
60 lstrcatn32A( (LPSTR
)PTR_SEG_TO_LIN(dst
), (LPCSTR
)PTR_SEG_TO_LIN(src
), n
);
65 /***********************************************************************
66 * lstrcatn32A (Not a Windows API)
68 LPSTR
lstrcatn32A( LPSTR dst
, LPCSTR src
, INT32 n
)
70 register LPSTR p
= dst
;
72 if ((n
-= (INT32
)(p
- dst
)) <= 0) return dst
;
73 lstrcpyn32A( p
, src
, n
);
78 /***********************************************************************
79 * lstrcatn32W (Not a Windows API)
81 LPWSTR
lstrcatn32W( LPWSTR dst
, LPCWSTR src
, INT32 n
)
83 register LPWSTR p
= dst
;
85 if ((n
-= (INT32
)(p
- dst
)) <= 0) return dst
;
86 lstrcpyn32W( p
, src
, n
);
91 /***********************************************************************
92 * lstrcmp16 (USER.430)
94 INT16
lstrcmp16( LPCSTR str1
, LPCSTR str2
)
96 return (INT16
)lstrcmp32A( str1
, str2
);
100 /***********************************************************************
101 * lstrcmp32A (KERNEL.602)
103 INT32
lstrcmp32A( LPCSTR str1
, LPCSTR str2
)
105 return (INT32
)strcmp( str1
, str2
);
109 /***********************************************************************
110 * lstrcmp32W (KERNEL.603)
112 INT32
lstrcmp32W( LPCWSTR str1
, LPCWSTR str2
)
114 while (*str1
&& (*str1
== *str2
)) { str1
++; str2
++; }
115 return (INT32
)(*str1
- *str2
);
119 /***********************************************************************
120 * lstrcmpi16 (USER.471)
122 INT16
lstrcmpi16( LPCSTR str1
, LPCSTR str2
)
124 return (INT16
)lstrcmpi32A( str1
, str2
);
128 /***********************************************************************
129 * lstrcmpi32A (KERNEL32.605)
131 INT32
lstrcmpi32A( LPCSTR str1
, LPCSTR str2
)
137 if ((res
= toupper(*str1
) - toupper(*str2
)) != 0) return res
;
141 return toupper(*str1
) - toupper(*str2
);
145 /***********************************************************************
146 * lstrcmpi32W (KERNEL32.606)
148 INT32
lstrcmpi32W( LPCWSTR str1
, LPCWSTR str2
)
155 if ((res
= toupper(*str1
) - toupper(*str2
)) != 0) return res
;
159 return toupper(*str1
) - toupper(*str2
);
163 /***********************************************************************
164 * lstrcpy16 (KERNEL.88)
166 SEGPTR
lstrcpy16( SEGPTR dst
, SEGPTR src
)
168 lstrcpy32A( (LPSTR
)PTR_SEG_TO_LIN(dst
), (LPCSTR
)PTR_SEG_TO_LIN(src
) );
173 /***********************************************************************
174 * lstrcpy32A (KERNEL32.608)
176 LPSTR
lstrcpy32A( LPSTR dst
, LPCSTR src
)
178 if (!src
|| !dst
) return NULL
;
184 /***********************************************************************
185 * lstrcpy32W (KERNEL32.609)
187 LPWSTR
lstrcpy32W( LPWSTR dst
, LPCWSTR src
)
189 register LPWSTR p
= dst
;
190 while ((*p
++ = *src
++));
195 /***********************************************************************
196 * lstrcpyn16 (KERNEL.353)
198 SEGPTR
lstrcpyn16( SEGPTR dst
, SEGPTR src
, INT16 n
)
200 lstrcpyn32A( (LPSTR
)PTR_SEG_TO_LIN(dst
), (LPCSTR
)PTR_SEG_TO_LIN(src
), n
);
205 /***********************************************************************
206 * lstrcpyn32A (KERNEL32.611)
208 LPSTR
lstrcpyn32A( LPSTR dst
, LPCSTR src
, INT32 n
)
211 while ((n
-- > 1) && *src
) *p
++ = *src
++;
217 /***********************************************************************
218 * lstrcpyn32W (KERNEL32.612)
220 LPWSTR
lstrcpyn32W( LPWSTR dst
, LPCWSTR src
, INT32 n
)
223 while ((n
-- > 1) && *src
) *p
++ = *src
++;
229 /***********************************************************************
230 * lstrlen16 (KERNEL.90)
232 INT16
lstrlen16( LPCSTR str
)
234 return (INT16
)lstrlen32A( str
);
238 /***********************************************************************
239 * lstrlen32A (KERNEL32.614)
241 INT32
lstrlen32A( LPCSTR str
)
243 /* looks weird, but win3.1 KERNEL got a GeneralProtection handler
244 * in lstrlen() ... we check only for NULL pointer reference.
248 return (INT32
)strlen(str
);
252 /***********************************************************************
253 * lstrlen32W (KERNEL32.615)
255 INT32
lstrlen32W( LPCWSTR str
)
259 while (*str
++) len
++;
264 /***********************************************************************
265 * lstrncmp32A (Not a Windows API)
267 INT32
lstrncmp32A( LPCSTR str1
, LPCSTR str2
, INT32 n
)
269 return (INT32
)strncmp( str1
, str2
, n
);
273 /***********************************************************************
274 * lstrncmp32W (Not a Windows API)
276 INT32
lstrncmp32W( LPCWSTR str1
, LPCWSTR str2
, INT32 n
)
279 while ((--n
> 0) && *str1
&& (*str1
== *str2
)) { str1
++; str2
++; }
280 return (INT32
)(*str1
- *str2
);
284 /***********************************************************************
285 * lstrncmpi32A (Not a Windows API)
287 INT32
lstrncmpi32A( LPCSTR str1
, LPCSTR str2
, INT32 n
)
292 while ((--n
> 0) && *str1
)
293 if ( (res
= toupper(*str1
++) - toupper(*str2
++)) ) return res
;
295 return toupper(*str1
) - toupper(*str2
);
299 /***********************************************************************
300 * lstrncmpi32W (Not a Windows API)
302 INT32
lstrncmpi32W( LPCWSTR str1
, LPCWSTR str2
, INT32 n
)
307 while ((--n
> 0) && *str1
)
310 if ((res
= toupper(*str1
) - toupper(*str2
)) != 0) return res
;
314 return toupper(*str1
) - toupper(*str2
);
318 /***********************************************************************
319 * lstrcpynAtoW (Not a Windows API)
321 LPWSTR
lstrcpynAtoW( LPWSTR dst
, LPCSTR src
, INT32 n
)
324 while ((n
-- > 1) && *src
) *p
++ = (WCHAR
)(unsigned char)*src
++;
330 /***********************************************************************
331 * lstrcpynWtoA (Not a Windows API)
333 LPSTR
lstrcpynWtoA( LPSTR dst
, LPCWSTR src
, INT32 n
)
336 while ((n
-- > 1) && *src
) *p
++ = (CHAR
)*src
++;
342 /***********************************************************************
343 * RtlFillMemory (KERNEL32.441)
345 VOID
RtlFillMemory( LPVOID ptr
, UINT32 len
, UINT32 fill
)
347 memset( ptr
, fill
, len
);
351 /***********************************************************************
352 * RtlMoveMemory (KERNEL32.442)
354 VOID
RtlMoveMemory( LPVOID dst
, LPCVOID src
, UINT32 len
)
356 memmove( dst
, src
, len
);
360 /***********************************************************************
361 * RtlZeroMemory (KERNEL32.444)
363 VOID
RtlZeroMemory( LPVOID ptr
, UINT32 len
)
365 memset( ptr
, 0, len
);