mcabber/libjabber/str.c
author Mikael Berthe <mikael@lilotux.net>
Sun, 21 Jan 2007 15:13:36 +0100
changeset 1130 b2040a7fb7fc
parent 879 5f43b532cc37
permissions -rw-r--r--
Refresh chat buffer when sending a message in non-chatmode When chat mode is off and we send a message, chat mode is enabled but the contact buffer isn't displayed.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
879
5f43b532cc37 Remove a few libjabber warnings
Mikael Berthe <mikael@lilotux.net>
parents: 417
diff changeset
   306
    for(i=0;i<(int)strlen(buf);i++)
25
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
}