Documentation fixes.
[wine] / dlls / msvcrt / string.c
1 /*
2  * MSVCRT string functions
3  *
4  * Copyright 1996,1998 Marcus Meissner
5  * Copyright 1996 Jukka Iivonen
6  * Copyright 1997,2000 Uwe Bonnes
7  * Copyright 2000 Jon Griffiths
8  */
9
10 #include "msvcrt.h"
11 #include "msvcrt/stdlib.h"
12 #include "msvcrt/string.h"
13
14 DEFAULT_DEBUG_CHANNEL(msvcrt);
15
16 /* INTERNAL: MSVCRT_malloc() based strndup */
17 char* msvcrt_strndup(const char* buf, unsigned int size)
18 {
19   char* ret;
20   unsigned int len = strlen(buf), max_len;
21
22   max_len = size <= len? size : len + 1;
23
24   ret = MSVCRT_malloc(max_len);
25   if (ret)
26   {
27     memcpy(ret,buf,max_len);
28     ret[max_len] = 0;
29   }
30   return ret;
31 }
32
33 /*********************************************************************
34  *              _strdec (MSVCRT.@)
35  */
36 char* _strdec(const char* str1, const char* str2)
37 {
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;
43 }
44
45 /*********************************************************************
46  *              _mbsdup (MSVCRT.@)
47  *              _strdup (MSVCRT.@)
48  */
49 char* _strdup(const char* str)
50 {
51     char * ret = MSVCRT_malloc(strlen(str)+1);
52     if (ret) strcpy( ret, str );
53     return ret;
54 }
55
56 /*********************************************************************
57  *              _strinc (MSVCRT.@)
58  */
59 char* _strinc(const char* str)
60 {
61   return (char*)str+1;
62 }
63
64 /*********************************************************************
65  *              _strnextc (MSVCRT.@)
66  */
67 unsigned int _strnextc(const char* str)
68 {
69   return (unsigned int)*str;
70 }
71
72 /*********************************************************************
73  *              _strninc (MSVCRT.@)
74  *
75  * Return a pointer to the 'n'th character in a string
76  */
77 char* _strninc(char* str, unsigned int n)
78 {
79   return str + n;
80 }
81
82 /*********************************************************************
83  *              _strnset (MSVCRT.@)
84  */
85 char* _strnset(char* str, int value, unsigned int len)
86 {
87   if (len > 0 && str)
88     while (*str && len--)
89       *str++ = value;
90   return str;
91 }
92
93 /*********************************************************************
94  *              _strrev (MSVCRT.@)
95  */
96 char* _strrev(char* str)
97 {
98   char * p1;
99   char * p2;
100
101   if (str && *str)
102     for (p1 = str, p2 = str + strlen(str) - 1; p2 > p1; ++p1, --p2)
103     {
104       *p1 ^= *p2;
105       *p2 ^= *p1;
106       *p1 ^= *p2;
107     }
108
109   return str;
110 }
111
112 /*********************************************************************
113  *              _strset (MSVCRT.@)
114  */
115 char* _strset(char* str, int value)
116 {
117   char *ptr = str;
118   while (*ptr)
119     *ptr++ = value;
120
121   return str;
122 }
123
124 /*********************************************************************
125  *              _strncnt (MSVCRT.@)
126  */
127 unsigned int _strncnt(char* str, unsigned int max)
128 {
129   unsigned int len = strlen(str);
130   return (len > max? max : len);
131 }
132
133 /*********************************************************************
134  *              _strspnp (MSVCRT.@)
135  */
136 char* _strspnp(char* str1, char* str2)
137 {
138   str1 += strspn(str1,str2);
139   return *str1? str1 : 0;
140 }
141
142 /*********************************************************************
143  *              _swab (MSVCRT.@)
144  */
145 void _swab(char* src, char* dst, int len)
146 {
147   if (len > 1)
148   {
149     len = (unsigned)len >> 1;
150
151     while (len--) {
152       *dst++ = src[1];
153       *dst++ = *src++;
154       src++;
155     }
156   }
157 }