~ubuntu-branches/ubuntu/trusty/sflphone/trusty

« back to all changes in this revision

Viewing changes to daemon/libs/pjproject-2.1.0/pjlib/src/pj/string.c

  • Committer: Package Import Robot
  • Author(s): Mark Purcell
  • Date: 2014-01-28 18:23:36 UTC
  • mfrom: (4.3.4 sid)
  • Revision ID: package-import@ubuntu.com-20140128182336-jrsv0k9u6cawc068
Tags: 1.3.0-1
* New upstream release 
  - Fixes "New Upstream Release" (Closes: #735846)
  - Fixes "Ringtone does not stop" (Closes: #727164)
  - Fixes "[sflphone-kde] crash on startup" (Closes: #718178)
  - Fixes "sflphone GUI crashes when call is hung up" (Closes: #736583)
* Build-Depends: ensure GnuTLS 2.6
  - libucommon-dev (>= 6.0.7-1.1), libccrtp-dev (>= 2.0.6-3)
  - Fixes "FTBFS Build-Depends libgnutls{26,28}-dev" (Closes: #722040)
* Fix "boost 1.49 is going away" unversioned Build-Depends: (Closes: #736746)
* Add Build-Depends: libsndfile-dev, nepomuk-core-dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* $Id: string.c 3553 2011-05-05 06:14:19Z nanang $ */
 
2
/* 
 
3
 * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com)
 
4
 * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
 
5
 *
 
6
 * This program is free software; you can redistribute it and/or modify
 
7
 * it under the terms of the GNU General Public License as published by
 
8
 * the Free Software Foundation; either version 2 of the License, or
 
9
 * (at your option) any later version.
 
10
 *
 
11
 * This program is distributed in the hope that it will be useful,
 
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
14
 * GNU General Public License for more details.
 
15
 *
 
16
 * You should have received a copy of the GNU General Public License
 
17
 * along with this program; if not, write to the Free Software
 
18
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
 
19
 */
 
20
#include <pj/string.h>
 
21
#include <pj/assert.h>
 
22
#include <pj/pool.h>
 
23
#include <pj/ctype.h>
 
24
#include <pj/rand.h>
 
25
#include <pj/os.h>
 
26
 
 
27
#if PJ_FUNCTIONS_ARE_INLINED==0
 
28
#  include <pj/string_i.h>
 
29
#endif
 
30
 
 
31
 
 
32
PJ_DEF(char*) pj_strstr(const pj_str_t *str, const pj_str_t *substr)
 
33
{
 
34
    const char *s, *ends;
 
35
 
 
36
    /* Special case when substr is zero */
 
37
    if (substr->slen == 0) {
 
38
        return (char*)str->ptr;
 
39
    }
 
40
 
 
41
    s = str->ptr;
 
42
    ends = str->ptr + str->slen - substr->slen;
 
43
    for (; s<=ends; ++s) {
 
44
        if (pj_ansi_strncmp(s, substr->ptr, substr->slen)==0)
 
45
            return (char*)s;
 
46
    }
 
47
    return NULL;
 
48
}
 
49
 
 
50
 
 
51
PJ_DEF(char*) pj_stristr(const pj_str_t *str, const pj_str_t *substr)
 
52
{
 
53
    const char *s, *ends;
 
54
 
 
55
    /* Special case when substr is zero */
 
56
    if (substr->slen == 0) {
 
57
        return (char*)str->ptr;
 
58
    }
 
59
 
 
60
    s = str->ptr;
 
61
    ends = str->ptr + str->slen - substr->slen;
 
62
    for (; s<=ends; ++s) {
 
63
        if (pj_ansi_strnicmp(s, substr->ptr, substr->slen)==0)
 
64
            return (char*)s;
 
65
    }
 
66
    return NULL;
 
67
}
 
68
 
 
69
 
 
70
PJ_DEF(pj_str_t*) pj_strltrim( pj_str_t *str )
 
71
{
 
72
    char *end = str->ptr + str->slen;
 
73
    register char *p = str->ptr;
 
74
    while (p < end && pj_isspace(*p))
 
75
        ++p;
 
76
    str->slen -= (p - str->ptr);
 
77
    str->ptr = p;
 
78
    return str;
 
79
}
 
80
 
 
81
PJ_DEF(pj_str_t*) pj_strrtrim( pj_str_t *str )
 
82
{
 
83
    char *end = str->ptr + str->slen;
 
84
    register char *p = end - 1;
 
85
    while (p >= str->ptr && pj_isspace(*p))
 
86
        --p;
 
87
    str->slen -= ((end - p) - 1);
 
88
    return str;
 
89
}
 
90
 
 
91
PJ_DEF(char*) pj_create_random_string(char *str, pj_size_t len)
 
92
{
 
93
    unsigned i;
 
94
    char *p = str;
 
95
 
 
96
    PJ_CHECK_STACK();
 
97
 
 
98
    for (i=0; i<len/8; ++i) {
 
99
        pj_uint32_t val = pj_rand();
 
100
        pj_val_to_hex_digit( (val & 0xFF000000) >> 24, p+0 );
 
101
        pj_val_to_hex_digit( (val & 0x00FF0000) >> 16, p+2 );
 
102
        pj_val_to_hex_digit( (val & 0x0000FF00) >>  8, p+4 );
 
103
        pj_val_to_hex_digit( (val & 0x000000FF) >>  0, p+6 );
 
104
        p += 8;
 
105
    }
 
106
    for (i=i * 8; i<len; ++i) {
 
107
        *p++ = pj_hex_digits[ pj_rand() & 0x0F ];
 
108
    }
 
109
    return str;
 
110
}
 
111
 
 
112
 
 
113
PJ_DEF(unsigned long) pj_strtoul(const pj_str_t *str)
 
114
{
 
115
    unsigned long value;
 
116
    unsigned i;
 
117
 
 
118
    PJ_CHECK_STACK();
 
119
 
 
120
    value = 0;
 
121
    for (i=0; i<(unsigned)str->slen; ++i) {
 
122
        if (!pj_isdigit(str->ptr[i]))
 
123
            break;
 
124
        value = value * 10 + (str->ptr[i] - '0');
 
125
    }
 
126
    return value;
 
127
}
 
128
 
 
129
PJ_DEF(unsigned long) pj_strtoul2(const pj_str_t *str, pj_str_t *endptr,
 
130
                                  unsigned base)
 
131
{
 
132
    unsigned long value;
 
133
    unsigned i;
 
134
 
 
135
    PJ_CHECK_STACK();
 
136
 
 
137
    value = 0;
 
138
    if (base <= 10) {
 
139
        for (i=0; i<(unsigned)str->slen; ++i) {
 
140
            unsigned c = (str->ptr[i] - '0');
 
141
            if (c >= base)
 
142
                break;
 
143
            value = value * base + c;
 
144
        }
 
145
    } else if (base == 16) {
 
146
        for (i=0; i<(unsigned)str->slen; ++i) {
 
147
            if (!pj_isxdigit(str->ptr[i]))
 
148
                break;
 
149
            value = value * 16 + pj_hex_digit_to_val(str->ptr[i]);
 
150
        }
 
151
    } else {
 
152
        pj_assert(!"Unsupported base");
 
153
        i = 0;
 
154
        value = 0xFFFFFFFFUL;
 
155
    }
 
156
 
 
157
    if (endptr) {
 
158
        endptr->ptr = str->ptr + i;
 
159
        endptr->slen = str->slen - i;
 
160
    }
 
161
 
 
162
    return value;
 
163
}
 
164
 
 
165
PJ_DEF(int) pj_utoa(unsigned long val, char *buf)
 
166
{
 
167
    return pj_utoa_pad(val, buf, 0, 0);
 
168
}
 
169
 
 
170
PJ_DEF(int) pj_utoa_pad( unsigned long val, char *buf, int min_dig, int pad)
 
171
{
 
172
    char *p;
 
173
    int len;
 
174
 
 
175
    PJ_CHECK_STACK();
 
176
 
 
177
    p = buf;
 
178
    do {
 
179
        unsigned long digval = (unsigned long) (val % 10);
 
180
        val /= 10;
 
181
        *p++ = (char) (digval + '0');
 
182
    } while (val > 0);
 
183
 
 
184
    len = p-buf;
 
185
    while (len < min_dig) {
 
186
        *p++ = (char)pad;
 
187
        ++len;
 
188
    }
 
189
    *p-- = '\0';
 
190
 
 
191
    do {
 
192
        char temp = *p;
 
193
        *p = *buf;
 
194
        *buf = temp;
 
195
        --p;
 
196
        ++buf;
 
197
    } while (buf < p);
 
198
 
 
199
    return len;
 
200
}
 
201
 
 
202