(linenum→info "unix/slp.c:2238")

qemu/0.9.1/cutils.c

    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: int strstart(const char *str, const char *val, const char **ptr)
   54: {
   55:     const char *p, *q;
   56:     p = str;
   57:     q = val;
   58:     while (*q != '\0') {
   59:         if (*p != *q)
   60:             return 0;
   61:         p++;
   62:         q++;
   63:     }
   64:     if (ptr)
   65:         *ptr = p;
   66:     return 1;
   67: }
   68: 
   69: int stristart(const char *str, const char *val, const char **ptr)
   70: {
   71:     const char *p, *q;
   72:     p = str;
   73:     q = val;
   74:     while (*q != '\0') {
   75:         if (toupper(*p) != toupper(*q))
   76:             return 0;
   77:         p++;
   78:         q++;
   79:     }
   80:     if (ptr)
   81:         *ptr = p;
   82:     return 1;
   83: }
   84: 
   85: time_t mktimegm(struct tm *tm)
   86: {
   87:     time_t t;
   88:     int y = tm->tm_year + 1900, m = tm->tm_mon + 1, d = tm->tm_mday;
   89:     if (m < 3) {
   90:         m += 12;
   91:         y--;
   92:     }
   93:     t = 86400 * (d + (153 * m - 457) / 5 + 365 * y + y / 4 - y / 100 + 
   94:                  y / 400 - 719469);
   95:     t += 3600 * tm->tm_hour + 60 * tm->tm_min + tm->tm_sec;
   96:     return t;
   97: }
Syntax (Markdown)