]>
jfr.im git - solanum.git/blob - src/irc_string.c
2 * ircd-ratbox: A slightly useful ircd.
3 * irc_string.c: IRC string functions.
5 * Copyright (C) 1990 Jarkko Oikarinen and University of Oulu, Co Center
6 * Copyright (C) 1996-2002 Hybrid Development Team
7 * Copyright (C) 2002-2005 ircd-ratbox development team
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
24 * $Id: irc_string.c 678 2006-02-03 20:25:01Z jilles $
28 #include "irc_string.h"
37 * clean_string - clean up a string possibly containing garbage
39 * *sigh* Before the kiddies find this new and exciting way of
40 * annoying opers, lets clean up what is sent to local opers
44 clean_string(char *dest
, const unsigned char *src
, size_t len
)
50 if(dest
== NULL
|| src
== NULL
)
53 len
-= 3; /* allow for worst case, '^A\0' */
55 while(*src
&& (len
> 0))
57 if(*src
& 0x80) /* if high bit is set */
62 else if(!IsPrint(*src
)) /* if NOT printable */
66 *d
++ = 0x40 + *src
; /* turn it into a printable */
78 * strip_tabs(dst, src, length)
80 * Copies src to dst, while converting all \t (tabs) into spaces.
82 * NOTE: jdc: I have a gut feeling there's a faster way to do this.
85 strip_tabs(char *dest
, const unsigned char *src
, size_t len
)
88 /* Sanity check; we don't want anything nasty... */
92 if(dest
== NULL
|| src
== NULL
)
95 while(*src
&& (len
> 0))
99 *d
++ = ' '; /* Translate the tab into a space */
103 *d
++ = *src
; /* Copy src to dst */
108 *d
= '\0'; /* Null terminate, thanks and goodbye */
113 * strtoken - walk through a string of tokens, using a set of separators
118 strtoken(char **save
, char *str
, const char *fs
)
120 char *pos
= *save
; /* keep last position across calls */
124 pos
= str
; /* new string scan */
126 while(pos
&& *pos
&& strchr(fs
, *pos
) != NULL
)
127 ++pos
; /* skip leading separators */
130 return (pos
= *save
= NULL
); /* string contains only sep's */
132 tmp
= pos
; /* now, keep position of the token */
134 while(*pos
&& strchr(fs
, *pos
) == NULL
)
135 ++pos
; /* skip content of the token */
138 *pos
++ = '\0'; /* remove first sep after the token */
140 pos
= NULL
; /* end of string */
147 strip_colour(char *string
)
151 char *last_non_space
= NULL
;
152 /* c is source, c2 is target */
162 if(c
[1] == ',' && isdigit(c
[2]))
188 *last_non_space
= '\0';