annotate mcabber/libjabber/str.c @ 430:d03663d2e7d9

Display error messages as specified in RFC3920 (9.3) If possible, we display the child element corresponding to the stanza error conditions defined in RFC3920. Error code and error text will be displayed if available.
author Mikael Berthe <mikael@lilotux.net>
date Sun, 11 Sep 2005 22:01:57 +0200
parents c3ae9251c197
children 5f43b532cc37
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
1 /*
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
2 * This program is free software; you can redistribute it and/or modify
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
3 * it under the terms of the GNU General Public License as published by
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
4 * the Free Software Foundation; either version 2 of the License, or
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
5 * (at your option) any later version.
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
6 *
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
7 * This program is distributed in the hope that it will be useful,
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
10 * GNU General Public License for more details.
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
11 *
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
12 * You should have received a copy of the GNU General Public License
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
13 * along with this program; if not, write to the Free Software
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
14 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
15 *
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
16 * Copyrights
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
17 *
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
18 * Portions created by or assigned to Jabber.com, Inc. are
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
19 * Copyright (c) 1999-2002 Jabber.com, Inc. All Rights Reserved. Contact
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
20 * information for Jabber.com, Inc. is available at http://www.jabber.com/.
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
21 *
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
22 * Portions Copyright (c) 1998-1999 Jeremie Miller.
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
23 *
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
24 * Acknowledgements
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
25 *
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
26 * Special thanks to the Jabber Open Source Contributors for their
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
27 * suggestions and support of Jabber.
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
28 *
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
29 */
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
30
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
31 /**
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
32 * @file str.c
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
33 * @brief utilities for string handling
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
34 *
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
35 * This file contains utility functions for string handling:
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
36 * - NULL pointer save versions of many functions in string.c
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
37 * - string spools
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
38 * - functions to (un)escape strings for XML usage
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
39 *
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
40 * String spools allow to create a string by concatenating several smaller strings
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
41 * and the spool implementation is allocating the neccessary memory using memory pools.
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
42 */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
43
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
44 #include "libxode.h"
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
45
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
46 /**
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
47 * NULL pointer save version of strdup()
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
48 *
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
49 * @param str the string the should be duplicated
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
50 * @return the duplicated string
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
51 */
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
52 char *j_strdup(const char *str)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
53 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
54 if(str == NULL)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
55 return NULL;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
56 else
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
57 return strdup(str);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
58 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
59
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
60 /**
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
61 * NULL pointer save version of strcat()
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
62 *
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
63 * @note the return value of j_strcat() is not compatible with the return value of strcat()
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
64 *
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
65 * @todo check if the behaviour of the return value is intended
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
66 *
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
67 * @param dest where to append the string
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
68 * @param txt what to append
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
69 * @return dest if txt contains a NULL pointer, pointer to the terminating zero byte of the result else
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
70 */
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
71 char *j_strcat(char *dest, char *txt)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
72 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
73 if(!txt) return(dest);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
74
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
75 while(*txt)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
76 *dest++ = *txt++;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
77 *dest = '\0';
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
78
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
79 return(dest);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
80 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
81
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
82 /**
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
83 * NULL pointer save version of strcmp
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
84 *
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
85 * If one of the parameters contains a NULL pointer, the string is considered to be unequal.
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
86 *
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
87 * @note the return value is not compatible with strcmp()
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
88 *
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
89 * @param a the one string
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
90 * @param b the other string
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
91 * @return 0 if the strings are equal, -1 if the strings are not equal
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
92 */
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
93 int j_strcmp(const char *a, const char *b)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
94 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
95 if(a == NULL || b == NULL)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
96 return -1;
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
97
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
98 while(*a == *b && *a != '\0' && *b != '\0'){ a++; b++; }
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
99
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
100 if(*a == *b) return 0;
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
101
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
102 return -1;
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
103 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
104
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
105 /**
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
106 * NULL pointer save version of strcasecmp()
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
107 *
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
108 * If one of the parameters contains a NULL pointer, the string is considered to be unequal
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
109 *
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
110 * @param a the one string
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
111 * @param b the other string
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
112 * @return 0 if the strings are equal, non zero else
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
113 */
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
114 int j_strcasecmp(const char *a, const char *b)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
115 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
116 if(a == NULL || b == NULL)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
117 return -1;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
118 else
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
119 return strcasecmp(a, b);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
120 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
121
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
122 /**
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
123 * NULL pointer save version of strncmp()
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
124 *
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
125 * If one of the parameters contains a NULL pointer, the string is considered to be unequal
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
126 *
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
127 * @param a the first string
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
128 * @param b the second string
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
129 * @param i how many characters to compare at most
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
130 * @return 0 if the strings are equal (within the given length limitation), non zero else
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
131 */
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
132 int j_strncmp(const char *a, const char *b, int i)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
133 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
134 if(a == NULL || b == NULL)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
135 return -1;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
136 else
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
137 return strncmp(a, b, i);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
138 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
139
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
140 /**
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
141 * NULL pointer save version of strncasecmp()
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
142 *
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
143 * If one of the parameters contains a NULL pointer, the string is considered to be unequal
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
144 *
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
145 * @param a the first string
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
146 * @param b the second string
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
147 * @param i how many characters to compare at most
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
148 * @return 0 if the strings are equal (within the given length limitation), non zero else
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
149 */
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
150 int j_strncasecmp(const char *a, const char *b, int i)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
151 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
152 if(a == NULL || b == NULL)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
153 return -1;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
154 else
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
155 return strncasecmp(a, b, i);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
156 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
157
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
158 /**
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
159 * NULL pointer save version of strlen
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
160 *
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
161 * If the parameter contains a NULL pointer, 0 is returned
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
162 *
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
163 * @param a the string for which the length should be calculated
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
164 * @return 0 if a==NULL, length of the string else
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
165 */
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
166 int j_strlen(const char *a)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
167 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
168 if(a == NULL)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
169 return 0;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
170 else
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
171 return strlen(a);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
172 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
173
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
174 int j_atoi(const char *a, int def)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
175 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
176 if(a == NULL)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
177 return def;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
178 else
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
179 return atoi(a);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
180 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
181
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
182 spool spool_new(pool p)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
183 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
184 spool s;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
185
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
186 s = pmalloc(p, sizeof(struct spool_struct));
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
187 s->p = p;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
188 s->len = 0;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
189 s->last = NULL;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
190 s->first = NULL;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
191 return s;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
192 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
193
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
194 void spool_add(spool s, char *str)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
195 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
196 struct spool_node *sn;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
197 int len;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
198
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
199 if(str == NULL)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
200 return;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
201
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
202 len = strlen(str);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
203 if(len == 0)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
204 return;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
205
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
206 sn = pmalloc(s->p, sizeof(struct spool_node));
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
207 sn->c = pstrdup(s->p, str);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
208 sn->next = NULL;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
209
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
210 s->len += len;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
211 if(s->last != NULL)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
212 s->last->next = sn;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
213 s->last = sn;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
214 if(s->first == NULL)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
215 s->first = sn;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
216 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
217
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
218 void spooler(spool s, ...)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
219 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
220 va_list ap;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
221 char *arg = NULL;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
222
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
223 if(s == NULL)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
224 return;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
225
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
226 va_start(ap, s);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
227
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
228 /* loop till we hit our end flag, the first arg */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
229 while(1)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
230 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
231 arg = va_arg(ap,char *);
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
232 if((spool)arg == s)
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
233 break;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
234 else
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
235 spool_add(s, arg);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
236 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
237
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
238 va_end(ap);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
239 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
240
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
241 char *spool_print(spool s)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
242 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
243 char *ret,*tmp;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
244 struct spool_node *next;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
245
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
246 if(s == NULL || s->len == 0 || s->first == NULL)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
247 return NULL;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
248
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
249 ret = pmalloc(s->p, s->len + 1);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
250 *ret = '\0';
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
251
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
252 next = s->first;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
253 tmp = ret;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
254 while(next != NULL)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
255 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
256 tmp = j_strcat(tmp,next->c);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
257 next = next->next;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
258 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
259
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
260 return ret;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
261 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
262
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
263 /* convenience :) */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
264 char *spools(pool p, ...)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
265 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
266 va_list ap;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
267 spool s;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
268 char *arg = NULL;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
269
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
270 if(p == NULL)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
271 return NULL;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
272
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
273 s = spool_new(p);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
274
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
275 va_start(ap, p);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
276
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
277 /* loop till we hit our end flag, the first arg */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
278 while(1)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
279 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
280 arg = va_arg(ap,char *);
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 401
diff changeset
281 if((pool)arg == p)
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
282 break;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
283 else
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
284 spool_add(s, arg);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
285 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
286
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
287 va_end(ap);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
288
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
289 return spool_print(s);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
290 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
291
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
292
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
293 char *strunescape(pool p, char *buf)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
294 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
295 int i,j=0;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
296 char *temp;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
297
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
298 if (p == NULL || buf == NULL) return(NULL);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
299
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
300 if (strchr(buf,'&') == NULL) return(buf);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
301
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
302 temp = pmalloc(p,strlen(buf)+1);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
303
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
304 if (temp == NULL) return(NULL);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
305
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
306 for(i=0;i<strlen(buf);i++)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
307 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
308 if (buf[i]=='&')
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
309 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
310 if (strncmp(&buf[i],"&amp;",5)==0)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
311 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
312 temp[j] = '&';
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
313 i += 4;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
314 } else if (strncmp(&buf[i],"&quot;",6)==0) {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
315 temp[j] = '\"';
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
316 i += 5;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
317 } else if (strncmp(&buf[i],"&apos;",6)==0) {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
318 temp[j] = '\'';
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
319 i += 5;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
320 } else if (strncmp(&buf[i],"&lt;",4)==0) {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
321 temp[j] = '<';
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
322 i += 3;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
323 } else if (strncmp(&buf[i],"&gt;",4)==0) {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
324 temp[j] = '>';
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
325 i += 3;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
326 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
327 } else {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
328 temp[j]=buf[i];
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
329 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
330 j++;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
331 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
332 temp[j]='\0';
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
333 return(temp);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
334 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
335
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
336
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
337 char *strescape(pool p, char *buf)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
338 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
339 int i,j,oldlen,newlen;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
340 char *temp;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
341
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
342 if (p == NULL || buf == NULL) return(NULL);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
343
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
344 oldlen = newlen = strlen(buf);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
345 for(i=0;i<oldlen;i++)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
346 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
347 switch(buf[i])
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
348 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
349 case '&':
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
350 newlen+=5;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
351 break;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
352 case '\'':
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
353 newlen+=6;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
354 break;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
355 case '\"':
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
356 newlen+=6;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
357 break;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
358 case '<':
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
359 newlen+=4;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
360 break;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
361 case '>':
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
362 newlen+=4;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
363 break;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
364 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
365 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
366
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
367 if(oldlen == newlen) return buf;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
368
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
369 temp = pmalloc(p,newlen+1);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
370
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
371 if (temp==NULL) return(NULL);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
372
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
373 for(i=j=0;i<oldlen;i++)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
374 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
375 switch(buf[i])
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
376 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
377 case '&':
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
378 memcpy(&temp[j],"&amp;",5);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
379 j += 5;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
380 break;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
381 case '\'':
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
382 memcpy(&temp[j],"&apos;",6);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
383 j += 6;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
384 break;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
385 case '\"':
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
386 memcpy(&temp[j],"&quot;",6);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
387 j += 6;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
388 break;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
389 case '<':
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
390 memcpy(&temp[j],"&lt;",4);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
391 j += 4;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
392 break;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
393 case '>':
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
394 memcpy(&temp[j],"&gt;",4);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
395 j += 4;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
396 break;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
397 default:
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
398 temp[j++] = buf[i];
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
399 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
400 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
401 temp[j] = '\0';
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
402 return temp;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
403 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
404
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
405 char *zonestr(char *file, int line)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
406 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
407 static char buff[64];
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
408 int i;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
409
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
410 i = snprintf(buff,63,"%s:%d",file,line);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
411 buff[i] = '\0';
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
412
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
413 return buff;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
414 }