]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - src/inspstring.cpp
FindNick, FindChan, ChanModes, UserList, CountInvisible, PurgeEmptyChannels, GetClass...
[user/henk/code/inspircd.git] / src / inspstring.cpp
1 #include "inspircd_config.h"
2 #include "inspstring.h"
3 #include <cstddef>
4 #include <string.h>
5 #include <stdio.h>
6
7 /*
8  * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
9  * All rights reserved.
10  *
11  * Redistribution and use in source and binary forms, with or without
12  * modification, are permitted provided that the following conditions
13  * are met:
14  * 1. Redistributions of source code must retain the above copyright
15  *    notice, this list of conditions and the following disclaimer.
16  * 2. Redistributions in binary form must reproduce the above copyright    
17  *    notice, this list of conditions and the following disclaimer in the  
18  *    documentation and/or other materials provided with the distribution. 
19  * 3. The name of the author may not be used to endorse or promote products
20  *    derived from this software without specific prior written permission.
21  *
22  * THIS SOFTWARE IS PROVIDED `AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
23  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
24  * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
25  * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
26  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
27  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
28  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
29  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
30  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
31  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32  */
33  
34 #ifndef HAS_STRLCPY
35 size_t strlcat(char *dst, const char *src, size_t siz)
36 {
37   char *d = dst;
38   const char *s = src;
39   size_t n = siz, dlen;
40
41   while (n-- != 0 && *d != '\0')
42     d++;
43
44   dlen = d - dst;
45   n    = siz - dlen;
46
47   if (n == 0)
48     return(dlen + strlen(s));
49
50   while (*s != '\0')
51   {
52     if (n != 1)
53     {
54       *d++ = *s;
55       n--;
56     }
57
58     s++;
59   }
60
61   *d = '\0';
62   return(dlen + (s - src)); /* count does not include NUL */
63 }
64
65 size_t strlcpy(char *dst, const char *src, size_t siz)
66 {
67   char *d = dst;
68   const char *s = src;
69   size_t n = siz;
70
71   /* Copy as many bytes as will fit */
72   if (n != 0 && --n != 0)
73   {
74     do
75     {
76       if ((*d++ = *s++) == 0)
77         break;
78     } while (--n != 0);
79   }
80
81   /* Not enough room in dst, add NUL and traverse rest of src */
82   if (n == 0)
83   {
84     if (siz != 0)
85       *d = '\0'; /* NUL-terminate dst */
86     while (*s++)
87       ;
88   }
89
90   return(s - src - 1); /* count does not include NUL */
91 }
92 #endif
93
94 int charlcat(char* x,char y,int z)
95 {
96         char* x__n = x;
97         int v = 0;
98
99         while(*x__n++)
100                 v++;
101
102         if (v < z - 1)
103         {
104                 *--x__n = y;
105                 *++x__n = 0;
106         }
107
108         return v;
109 }
110
111 bool charremove(char* mp, char remove)
112 {
113         char* mptr = mp;
114         bool shift_down = false;
115
116         while (*mptr)
117         {
118                 if (*mptr == remove)
119                 shift_down = true;
120
121                 if (shift_down)
122                         *mptr = *(mptr+1);
123
124                 mptr++;
125         }
126
127         return shift_down;
128 }
129