Statistics
| Branch: | Revision:

root / cutils.c @ 2bd7318c

History | View | Annotate | Download (2.7 kB)

1
/*
2
 * Simple C functions to supplement the C library
3
 *
4
 * Copyright (c) 2006 Fabrice Bellard
5
 *
6
 * Permission is hereby granted, free of charge, to any person obtaining a copy
7
 * of this software and associated documentation files (the "Software"), to deal
8
 * in the Software without restriction, including without limitation the rights
9
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
 * copies of the Software, and to permit persons to whom the Software is
11
 * furnished to do so, subject to the following conditions:
12
 *
13
 * The above copyright notice and this permission notice shall be included in
14
 * all copies or substantial portions of the Software.
15
 *
16
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
 * THE SOFTWARE.
23
 */
24
#include "qemu-common.h"
25

    
26
void pstrcpy(char *buf, int buf_size, const char *str)
27
{
28
    int c;
29
    char *q = buf;
30

    
31
    if (buf_size <= 0)
32
        return;
33

    
34
    for(;;) {
35
        c = *str++;
36
        if (c == 0 || q >= buf + buf_size - 1)
37
            break;
38
        *q++ = c;
39
    }
40
    *q = '\0';
41
}
42

    
43
/* strcat and truncate. */
44
char *pstrcat(char *buf, int buf_size, const char *s)
45
{
46
    int len;
47
    len = strlen(buf);
48
    if (len < buf_size)
49
        pstrcpy(buf + len, buf_size - len, s);
50
    return buf;
51
}
52

    
53
/* strdup with a limit */
54
char *pstrdup(const char *str, size_t buf_size)
55
{
56
    size_t len;
57
    char *buf;
58

    
59
    len = MIN(buf_size, strlen(str));
60
    buf = qemu_malloc(len);
61
    pstrcpy(buf, len, str);
62
    return buf;
63
}
64

    
65
int strstart(const char *str, const char *val, const char **ptr)
66
{
67
    const char *p, *q;
68
    p = str;
69
    q = val;
70
    while (*q != '\0') {
71
        if (*p != *q)
72
            return 0;
73
        p++;
74
        q++;
75
    }
76
    if (ptr)
77
        *ptr = p;
78
    return 1;
79
}
80

    
81
int stristart(const char *str, const char *val, const char **ptr)
82
{
83
    const char *p, *q;
84
    p = str;
85
    q = val;
86
    while (*q != '\0') {
87
        if (toupper(*p) != toupper(*q))
88
            return 0;
89
        p++;
90
        q++;
91
    }
92
    if (ptr)
93
        *ptr = p;
94
    return 1;
95
}
96

    
97
time_t mktimegm(struct tm *tm)
98
{
99
    time_t t;
100
    int y = tm->tm_year + 1900, m = tm->tm_mon + 1, d = tm->tm_mday;
101
    if (m < 3) {
102
        m += 12;
103
        y--;
104
    }
105
    t = 86400 * (d + (153 * m - 457) / 5 + 365 * y + y / 4 - y / 100 + 
106
                 y / 400 - 719469);
107
    t += 3600 * tm->tm_hour + 60 * tm->tm_min + tm->tm_sec;
108
    return t;
109
}