2 * MSVCRT string functions
4 * Copyright 1996,1998 Marcus Meissner
5 * Copyright 1996 Jukka Iivonen
6 * Copyright 1997,2000 Uwe Bonnes
7 * Copyright 2000 Jon Griffiths
11 #include "msvcrt/stdlib.h"
12 #include "msvcrt/string.h"
14 #include "wine/debug.h"
16 WINE_DEFAULT_DEBUG_CHANNEL(msvcrt);
18 /* INTERNAL: MSVCRT_malloc() based strndup */
19 char* msvcrt_strndup(const char* buf, unsigned int size)
22 unsigned int len = strlen(buf), max_len;
24 max_len = size <= len? size : len + 1;
26 ret = MSVCRT_malloc(max_len);
29 memcpy(ret,buf,max_len);
35 /*********************************************************************
38 char* _strdec(const char* str1, const char* str2)
40 /* Hmm. While the docs suggest that the following should work... */
41 /* return (str2<=str1?0:str2-1); */
42 /* ...Version 2.50.4170 (NT) from win98 constantly decrements! */
43 str1 = str1; /* remove warning */
44 return (char *)str2-1;
47 /*********************************************************************
51 char* _strdup(const char* str)
53 char * ret = MSVCRT_malloc(strlen(str)+1);
54 if (ret) strcpy( ret, str );
58 /*********************************************************************
61 char* _strinc(const char* str)
66 /*********************************************************************
67 * _strnextc (MSVCRT.@)
69 unsigned int _strnextc(const char* str)
71 return (unsigned int)*str;
74 /*********************************************************************
77 * Return a pointer to the 'n'th character in a string
79 char* _strninc(char* str, unsigned int n)
84 /*********************************************************************
87 char* _strnset(char* str, int value, unsigned int len)
95 /*********************************************************************
98 char* _strrev(char* str)
104 for (p1 = str, p2 = str + strlen(str) - 1; p2 > p1; ++p1, --p2)
114 /*********************************************************************
117 char* _strset(char* str, int value)
126 /*********************************************************************
127 * _strncnt (MSVCRT.@)
129 unsigned int _strncnt(char* str, unsigned int max)
131 unsigned int len = strlen(str);
132 return (len > max? max : len);
135 /*********************************************************************
136 * _strspnp (MSVCRT.@)
138 char* _strspnp(char* str1, char* str2)
140 str1 += strspn(str1,str2);
141 return *str1? str1 : 0;
144 /*********************************************************************
147 void _swab(char* src, char* dst, int len)
151 len = (unsigned)len >> 1;