Changeset 62


Ignore:
Timestamp:
Nov 20, 2005 7:55:42 PM (17 years ago)
Author:
bennylp
Message:

Added hex character conversion utility in ctype

Location:
pjproject/trunk/pjlib
Files:
1 added
10 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjlib/build/pjlib.dsp

    r36 r62  
    179179# Begin Source File 
    180180 
     181SOURCE=..\src\pj\ctype.c 
     182# End Source File 
     183# Begin Source File 
     184 
    181185SOURCE=..\src\pj\equeue_winnt.c 
    182186# End Source File 
     
    235239 
    236240SOURCE=..\src\pj\ioqueue_winnt.c 
    237  
    238 !IF  "$(CFG)" == "pjlib - Win32 Release" 
    239  
    240 !ELSEIF  "$(CFG)" == "pjlib - Win32 Debug" 
    241  
    242 !ENDIF  
    243  
    244241# End Source File 
    245242# Begin Source File 
  • pjproject/trunk/pjlib/include/pj/compat/string.h

    r51 r62  
    4545 
    4646#define pj_native_strcmp        strcmp 
     47#define pj_native_strncmp       strncmp 
    4748#define pj_native_strlen        strlen 
    4849#define pj_native_strcpy        strcpy 
     
    5051#define pj_native_strchr        strchr 
    5152#define pj_native_strcasecmp    strcasecmp 
     53#define pj_native_stricmp       strcasecmp 
    5254#define pj_native_strncasecmp   strncasecmp 
    53  
     55#define pj_native_strnicmp      strncasecmp 
    5456 
    5557#endif  /* __PJ_COMPAT_STRING_H__ */ 
  • pjproject/trunk/pjlib/include/pj/ctype.h

    r51 r62  
    2525 */ 
    2626 
     27#include <pj/types.h> 
    2728#include <pj/compat/ctype.h> 
     29 
     30PJ_BEGIN_DECL 
    2831 
    2932/** 
     
    100103 
    101104/** 
    102  * Returns a non-zero value if c is a particular representation of  
    103  * an hexadecimal digit character. 
    104  * @param c     The integer character to test. 
    105  * @return      Non-zero value if c is a particular representation of  
    106  *              an hexadecimal digit character. 
    107  */ 
    108 PJ_INLINE(int) pj_isxdigit(int c){ return isxdigit(c); } 
    109  
    110 /** 
    111105 * Returns a non-zero value if c is a either a space (' ') or horizontal 
    112106 * tab ('\\t') character. 
     
    131125PJ_INLINE(int) pj_toupper(int c) { return toupper(c); } 
    132126 
     127/** 
     128 * Returns a non-zero value if c is a particular representation of  
     129 * an hexadecimal digit character. 
     130 * @param c     The integer character to test. 
     131 * @return      Non-zero value if c is a particular representation of  
     132 *              an hexadecimal digit character. 
     133 */ 
     134PJ_INLINE(int) pj_isxdigit(int c){ return isxdigit(c); } 
     135 
     136/** 
     137 * Array of hex digits, in lowerspace. 
     138 */ 
     139extern char pj_hex_digits[]; 
     140 
     141/** 
     142 * Convert a value to hex representation. 
     143 * @param value     Integral value to convert. 
     144 * @param p         Buffer to hold the hex representation, which must be 
     145 *                  at least two bytes length. 
     146 */ 
     147PJ_INLINE(void) pj_val_to_hex_digit(unsigned value, char *p) 
     148{ 
     149    *p++ = pj_hex_digits[ (value & 0xF0) >> 4 ]; 
     150    *p   = pj_hex_digits[ (value & 0x0F) ]; 
     151} 
     152 
     153/** 
     154 * Convert hex digit c to integral value. 
     155 * @param c     The hex digit character. 
     156 * @return      The integral value between 0 and 15. 
     157 */ 
     158PJ_INLINE(unsigned) pj_hex_digit_to_val(unsigned c) 
     159{ 
     160    if (c <= '9') 
     161        return (c-'0') & 0x0F; 
     162    else if (c <= 'F') 
     163        return  (c-'A'+10) & 0x0F; 
     164    else 
     165        return (c-'a'+10) & 0x0F; 
     166} 
     167 
    133168/** @} */ 
     169 
     170PJ_END_DECL 
    134171 
    135172#endif  /* __PJ_CTYPE_H__ */ 
  • pjproject/trunk/pjlib/include/pj/errno.h

    r51 r62  
    165165 * Unknown error has been reported. 
    166166 */ 
    167 #define PJ_EUNKNOWN         (PJ_ERRNO_START_STATUS + 1) 
     167#define PJ_EUNKNOWN         (PJ_ERRNO_START_STATUS + 1) /* 70001 */ 
    168168/** 
    169169 * @hideinitializer 
    170170 * The operation is pending and will be completed later. 
    171171 */ 
    172 #define PJ_EPENDING         (PJ_ERRNO_START_STATUS + 2) 
     172#define PJ_EPENDING         (PJ_ERRNO_START_STATUS + 2) /* 70002 */ 
    173173/** 
    174174 * @hideinitializer 
    175175 * Too many connecting sockets. 
    176176 */ 
    177 #define PJ_ETOOMANYCONN     (PJ_ERRNO_START_STATUS + 3) 
     177#define PJ_ETOOMANYCONN     (PJ_ERRNO_START_STATUS + 3) /* 70003 */ 
    178178/** 
    179179 * @hideinitializer 
    180180 * Invalid argument. 
    181181 */ 
    182 #define PJ_EINVAL           (PJ_ERRNO_START_STATUS + 4) 
     182#define PJ_EINVAL           (PJ_ERRNO_START_STATUS + 4) /* 70004 */ 
    183183/** 
    184184 * @hideinitializer 
    185185 * Name too long (eg. hostname too long). 
    186186 */ 
    187 #define PJ_ENAMETOOLONG     (PJ_ERRNO_START_STATUS + 5) 
     187#define PJ_ENAMETOOLONG     (PJ_ERRNO_START_STATUS + 5) /* 70005 */ 
    188188/** 
    189189 * @hideinitializer 
    190190 * Not found. 
    191191 */ 
    192 #define PJ_ENOTFOUND        (PJ_ERRNO_START_STATUS + 6) 
     192#define PJ_ENOTFOUND        (PJ_ERRNO_START_STATUS + 6) /* 70006 */ 
    193193/** 
    194194 * @hideinitializer 
    195195 * Not enough memory. 
    196196 */ 
    197 #define PJ_ENOMEM           (PJ_ERRNO_START_STATUS + 7) 
     197#define PJ_ENOMEM           (PJ_ERRNO_START_STATUS + 7) /* 70007 */ 
    198198/** 
    199199 * @hideinitializer 
    200200 * Bug detected! 
    201201 */ 
    202 #define PJ_EBUG             (PJ_ERRNO_START_STATUS + 8) 
     202#define PJ_EBUG             (PJ_ERRNO_START_STATUS + 8) /* 70008 */ 
    203203/** 
    204204 * @hideinitializer 
    205205 * Operation timed out. 
    206206 */ 
    207 #define PJ_ETIMEDOUT        (PJ_ERRNO_START_STATUS + 9) 
     207#define PJ_ETIMEDOUT        (PJ_ERRNO_START_STATUS + 9) /* 70009 */ 
    208208/** 
    209209 * @hideinitializer 
    210210 * Too many objects. 
    211211 */ 
    212 #define PJ_ETOOMANY         (PJ_ERRNO_START_STATUS + 10) 
     212#define PJ_ETOOMANY         (PJ_ERRNO_START_STATUS + 10)/* 70010 */ 
    213213/** 
    214214 * @hideinitializer 
    215215 * Object is busy. 
    216216 */ 
    217 #define PJ_EBUSY            (PJ_ERRNO_START_STATUS + 11) 
     217#define PJ_EBUSY            (PJ_ERRNO_START_STATUS + 11)/* 70011 */ 
    218218/** 
    219219 * @hideinitializer 
    220220 * The specified option is not supported. 
    221221 */ 
    222 #define PJ_ENOTSUP          (PJ_ERRNO_START_STATUS + 12) 
     222#define PJ_ENOTSUP          (PJ_ERRNO_START_STATUS + 12)/* 70012 */ 
    223223/** 
    224224 * @hideinitializer 
    225225 * Invalid operation. 
    226226 */ 
    227 #define PJ_EINVALIDOP       (PJ_ERRNO_START_STATUS + 13) 
     227#define PJ_EINVALIDOP       (PJ_ERRNO_START_STATUS + 13)/* 70013 */ 
    228228/** 
    229229 * @hideinitializer 
    230230 * Operation is cancelled. 
    231231 */ 
    232 #define PJ_ECANCELLED       (PJ_ERRNO_START_STATUS + 14) 
     232#define PJ_ECANCELLED       (PJ_ERRNO_START_STATUS + 14)/* 70014 */ 
    233233/** 
    234234 * @hideinitializer 
    235235 * Object already exists. 
    236236 */ 
    237 #define PJ_EEXISTS          (PJ_ERRNO_START_STATUS + 14) 
     237#define PJ_EEXISTS          (PJ_ERRNO_START_STATUS + 15)/* 70015 */ 
    238238 
    239239/** @} */   /* pj_errnum */ 
     
    255255/** 
    256256 * PJ_ERRNO_START_STATUS is where PJLIB specific status codes start. 
     257 * Effectively the error in this class would be 70000 - 119000. 
    257258 */ 
    258259#define PJ_ERRNO_START_STATUS   (PJ_ERRNO_START + PJ_ERRNO_SPACE_SIZE) 
     
    261262 * PJ_ERRNO_START_SYS converts platform specific error codes into 
    262263 * pj_status_t values. 
     264 * Effectively the error in this class would be 120000 - 169000. 
    263265 */ 
    264266#define PJ_ERRNO_START_SYS      (PJ_ERRNO_START_STATUS + PJ_ERRNO_SPACE_SIZE) 
     
    267269 * PJ_ERRNO_START_USER are reserved for applications that use error 
    268270 * codes along with PJLIB codes. 
     271 * Effectively the error in this class would be 170000 - 219000. 
    269272 */ 
    270273#define PJ_ERRNO_START_USER     (PJ_ERRNO_START_SYS + PJ_ERRNO_SPACE_SIZE) 
  • pjproject/trunk/pjlib/include/pj/log.h

    r51 r62  
    2626 
    2727#include <pj/types.h> 
    28  
     28#include <stdarg.h> 
    2929 
    3030PJ_BEGIN_DECL 
     
    125125 
    126126/** 
     127 * Write to log. 
     128 * 
     129 * @param sender    Source of the message. 
     130 * @param level     Verbosity level. 
     131 * @param format    Format. 
     132 * @param marker    Marker. 
     133 */ 
     134PJ_DECL(void) pj_log(const char *sender, int level,  
     135                     const char *format, va_list marker); 
     136 
     137/** 
    127138 * Change log output function. The front-end logging functions will call 
    128139 * this function to write the actual message to the desired device.  
  • pjproject/trunk/pjlib/include/pj/string.h

    r51 r62  
    175175 
    176176/** 
     177 * Copy source string to destination up to the specified max length. 
     178 * 
     179 * @param dst       The target string. 
     180 * @param src       The source string. 
     181 * @param max       Maximum characters to copy. 
     182 * 
     183 * @return the target string. 
     184 */ 
     185PJ_IDECL(pj_str_t*) pj_strncpy(pj_str_t *dst, const pj_str_t *src,  
     186                               pj_ssize_t max); 
     187 
     188/** 
     189 * Copy source string to destination up to the specified max length, 
     190 * and NULL terminate the destination. If source string length is 
     191 * greater than or equal to max, then max-1 will be copied. 
     192 * 
     193 * @param dst       The target string. 
     194 * @param src       The source string. 
     195 * @param max       Maximum characters to copy. 
     196 * 
     197 * @return the target string. 
     198 */ 
     199PJ_IDECL(pj_str_t*) pj_strncpy_with_null(pj_str_t *dst, const pj_str_t *src, 
     200                                         pj_ssize_t max); 
     201 
     202/** 
    177203 * Duplicate string. 
    178204 * 
     
    521547} 
    522548 
     549 
    523550/** 
    524551 * @} 
  • pjproject/trunk/pjlib/include/pj/string_i.h

    r51 r62  
    2222    pj_str_t dst; 
    2323    dst.ptr = str; 
    24     dst.slen = str ? strlen(str) : 0; 
     24    dst.slen = str ? pj_native_strlen(str) : 0; 
    2525    return dst; 
    2626} 
     
    5757                              const char *src) 
    5858{ 
    59     dst->slen = src ? strlen(src) : 0; 
     59    dst->slen = src ? pj_native_strlen(src) : 0; 
    6060    if (dst->slen) { 
    6161        dst->ptr = (char*)pj_pool_alloc(pool, dst->slen); 
     
    9292PJ_IDEF(pj_str_t*) pj_strcpy2(pj_str_t *dst, const char *src) 
    9393{ 
    94     dst->slen = src ? strlen(src) : 0; 
     94    dst->slen = src ? pj_native_strlen(src) : 0; 
    9595    if (dst->slen > 0) 
    9696        pj_memcpy(dst->ptr, src, dst->slen); 
    9797    return dst; 
    9898} 
     99 
     100PJ_IDEF(pj_str_t*) pj_strncpy( pj_str_t *dst, const pj_str_t *src,  
     101                               pj_ssize_t max) 
     102{ 
     103    if (max > src->slen) max = src->slen; 
     104    pj_memcpy(dst->ptr, src->ptr, max); 
     105    dst->slen = max; 
     106    return dst; 
     107} 
     108 
     109PJ_IDEF(pj_str_t*) pj_strncpy_with_null( pj_str_t *dst, const pj_str_t *src, 
     110                                         pj_ssize_t max) 
     111{ 
     112    if (max <= src->slen) 
     113        max = max-1; 
     114    else 
     115        max = src->slen; 
     116 
     117    pj_memcpy(dst->ptr, src->ptr, max); 
     118    dst->ptr[max] = '\0'; 
     119    dst->slen = max; 
     120    return dst; 
     121} 
     122 
    99123 
    100124PJ_IDEF(int) pj_strcmp( const pj_str_t *str1, const pj_str_t *str2) 
     
    105129    if (diff) { 
    106130        return (int)diff; 
    107     } else if (str1->ptr) { 
    108         return strncmp(str1->ptr, str2->ptr, str1->slen); 
     131    } else if (str1->ptr && str1->slen) { 
     132        return pj_native_strncmp(str1->ptr, str2->ptr, str1->slen); 
    109133    } else { 
    110134        return 0; 
     
    115139                         pj_size_t len) 
    116140{ 
    117     return (str1->ptr && str2->ptr) ? strncmp(str1->ptr, str2->ptr, len) : 
    118            (str1->ptr == str2->ptr ? 0 : 1); 
     141    return (str1->ptr && str2->ptr) ?  
     142            pj_native_strncmp(str1->ptr, str2->ptr, len) : 
     143            (str1->ptr == str2->ptr ? 0 : 1); 
    119144} 
    120145 
     
    122147                          pj_size_t len) 
    123148{ 
    124     return (str1->ptr && str2) ? strncmp(str1->ptr, str2, len) : 
     149    return (str1->ptr && str2) ? pj_native_strncmp(str1->ptr, str2, len) : 
    125150           (str1->ptr==str2 ? 0 : 1); 
    126151} 
     
    139164        return (int)diff; 
    140165    } else { 
    141         return strnicmp(str1->ptr, str2->ptr, str1->slen); 
     166        return pj_native_strnicmp(str1->ptr, str2->ptr, str1->slen); 
    142167    } 
    143168} 
     
    145170PJ_IDEF(int) pj_stricmp2( const pj_str_t *str1, const char *str2) 
    146171{ 
    147     return (str1->ptr && str2) ? strnicmp(str1->ptr, str2, str1->slen) : 
    148            (str1->ptr==str2 ? 0 : 1); 
     172    return (str1->ptr && str2) ?  
     173            pj_native_strnicmp(str1->ptr, str2, str1->slen) : 
     174            (str1->ptr==str2 ? 0 : 1); 
    149175} 
    150176 
     
    152178                          pj_size_t len) 
    153179{ 
    154     return (str1->ptr && str2->ptr) ? strnicmp(str1->ptr, str2->ptr, len) : 
    155            (str1->ptr == str2->ptr ? 0 : 1); 
     180    return (str1->ptr && str2->ptr) ?  
     181            pj_native_strnicmp(str1->ptr, str2->ptr, len) : 
     182            (str1->ptr == str2->ptr ? 0 : 1); 
    156183} 
    157184 
     
    159186                           pj_size_t len) 
    160187{ 
    161     return (str1->ptr && str2) ? strnicmp(str1->ptr, str2, len) : 
    162            (str1->ptr == str2 ? 0 : 1); 
     188    return (str1->ptr && str2) ?  
     189            pj_native_strnicmp(str1->ptr, str2, len) : 
     190            (str1->ptr == str2 ? 0 : 1); 
    163191} 
    164192 
  • pjproject/trunk/pjlib/src/pj/log.c

    r51 r62  
    6565} 
    6666 
    67 static void pj_log(const char *sender, int level,  
    68                    const char *format, va_list marker) 
     67PJ_DEF(void) pj_log( const char *sender, int level,  
     68                     const char *format, va_list marker) 
    6969{ 
    7070    pj_time_val now; 
  • pjproject/trunk/pjlib/src/pj/os_core_win32.c

    r51 r62  
    130130    pj_status_t rc; 
    131131 
    132     PJ_LOG(5, ("pj_init", "Initializing PJ Library..")); 
    133  
    134132    /* Init Winsock.. */ 
    135133    if (WSAStartup(MAKEWORD(2,0), &wsa) != 0) { 
    136         PJ_LOG(1, ("pj_init", "Winsock initialization has returned an error")); 
    137134        return PJ_RETURN_OS_ERROR(WSAGetLastError()); 
    138135    } 
     
    140137    /* Init this thread's TLS. */ 
    141138    if ((rc=pj_thread_init()) != PJ_SUCCESS) { 
    142         PJ_LOG(1, ("pj_init", "Thread initialization has returned an error")); 
    143139        return rc; 
    144140    } 
  • pjproject/trunk/pjlib/src/pj/string.c

    r51 r62  
    2828 
    2929 
    30 static char hex[] = {'0', '1', '2', '3', '4', '5', '6', '7', 
    31                      '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; 
    32  
    3330PJ_DEF(pj_str_t*) pj_strltrim( pj_str_t *str ) 
    3431{ 
     
    5148} 
    5249 
    53 PJ_INLINE(void) pj_val_to_hex_digit(unsigned value, char *p) 
    54 { 
    55     *p++ = hex[ (value & 0xF0) >> 4 ]; 
    56     *p++ = hex[ (value & 0x0F) ]; 
    57 } 
    58  
    5950PJ_DEF(char*) pj_create_random_string(char *str, pj_size_t len) 
    6051{ 
     
    7364    } 
    7465    for (i=i * 8; i<len; ++i) { 
    75         *p++ = hex[ pj_rand() & 0x0F ]; 
     66        *p++ = pj_hex_digits[ pj_rand() & 0x0F ]; 
    7667    } 
    7768    return str; 
     
    130121} 
    131122 
     123 
Note: See TracChangeset for help on using the changeset viewer.