Include the msvcrt headers, remove duplicate definitions.
[wine.git] / dlls / msvcrt / string.c
blob0beb83e0950edde766c4e013ddc47d13ea909a6f
1 /*
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
8 */
9 #include "msvcrt.h"
11 #include "msvcrt/stdlib.h"
12 #include "msvcrt/string.h"
14 DEFAULT_DEBUG_CHANNEL(msvcrt);
16 /* INTERNAL: MSVCRT_malloc() based strndup */
17 char* msvcrt_strndup(const char* buf, unsigned int size)
19 char* ret;
20 unsigned int len = strlen(buf), max_len;
22 max_len = size <= len? size : len + 1;
24 ret = MSVCRT_malloc(max_len);
25 if (ret)
27 memcpy(ret,buf,max_len);
28 ret[max_len] = 0;
30 return ret;
33 /*********************************************************************
34 * _strdec (MSVCRT.@)
36 char* _strdec(const char* str1, const char* str2)
38 /* Hmm. While the docs suggest that the following should work... */
39 /* return (str2<=str1?0:str2-1); */
40 /* ...Version 2.50.4170 (NT) from win98 constantly decrements! */
41 str1 = str1; /* remove warning */
42 return (char *)str2-1;
45 /*********************************************************************
46 * _strdup (MSVCRT.@)
48 char* _strdup(const char* str)
50 char * ret = MSVCRT_malloc(strlen(str)+1);
51 if (ret) strcpy( ret, str );
52 return ret;
55 /*********************************************************************
56 * _strinc (MSVCRT.@)
58 char* _strinc(const char* str)
60 return (char*)str+1;
63 /*********************************************************************
64 * _strnextc (MSVCRT.@)
66 unsigned int _strnextc(const char* str)
68 return (unsigned int)*str;
71 /*********************************************************************
72 * _strninc (MSVCRT.@)
74 * Return a pointer to the 'n'th character in a string
76 char* _strninc(char* str, unsigned int n)
78 return str + n;
81 /*********************************************************************
82 * _strnset (MSVCRT.@)
84 char* _strnset(char* str, int value, unsigned int len)
86 if (len > 0 && str)
87 while (*str && len--)
88 *str++ = value;
89 return str;
92 /*********************************************************************
93 * _strrev (MSVCRT.@)
95 char* _strrev(char* str)
97 char * p1;
98 char * p2;
100 if (str && *str)
101 for (p1 = str, p2 = str + strlen(str) - 1; p2 > p1; ++p1, --p2)
103 *p1 ^= *p2;
104 *p2 ^= *p1;
105 *p1 ^= *p2;
108 return str;
111 /*********************************************************************
112 * _strset (MSVCRT.@)
114 char* _strset(char* str, int value)
116 char *ptr = str;
117 while (*ptr)
118 *ptr++ = value;
120 return str;
123 /*********************************************************************
124 * _strncnt (MSVCRT.@)
126 unsigned int _strncnt(char* str, unsigned int max)
128 unsigned int len = strlen(str);
129 return (len > max? max : len);
132 /*********************************************************************
133 * _strspnp (MSVCRT.@)
135 char* _strspnp(char* str1, char* str2)
137 str1 += strspn(str1,str2);
138 return *str1? str1 : 0;
141 /*********************************************************************
142 * _swab (MSVCRT.@)
144 void _swab(char* src, char* dst, int len)
146 if (len > 1)
148 len = (unsigned)len >> 1;
150 while (len--) {
151 *dst++ = src[1];
152 *dst++ = *src++;
153 src++;