Changeset 96 in libcf for trunk/src/cf_codec.c
- Timestamp:
- 05/27/13 09:37:51 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/cf_codec.c
r92 r96 73 73 * 74 74 * @param bin 바이너리 데이터 75 * @param len 바이너리 데이터 길이75 * @param len 바이너리 데이터의 길이 76 76 * @param hex 16진수 문자열을 저장할 주소 77 77 * … … 114 114 * @param hex 16진수 문자열 115 115 * @param bin 바이너리 데이터를 저장할 주소 116 * @param len 바이너리 데이터의 길이를 저장할 주소 116 117 * 117 118 * @remark … … 120 121 int 121 122 CF_Codec_Hex_Decode (const char * hex, 122 unsigned char * bin) 123 { 124 size_t length = strlen (hex); /* absolutely even-number */ 123 unsigned char * bin, 124 size_t * len) 125 { 126 size_t length = 0; /* absolutely even-number */ 125 127 size_t iter = 0; 126 int binlen = (int)length / 2;128 size_t binlen = 0; 127 129 128 130 const char * ptr = hex; … … 133 135 ASSERT_ARGS (hex == NULL); 134 136 ASSERT_ARGS (bin == NULL); 135 136 for (iter = 0 ; iter < binlen ; iter++) 137 ASSERT_ARGS (len == NULL); 138 139 *len = 0; 140 141 for ( ; g_ascii_HexDecode[(int)*ptr] && *ptr ; ptr++, length++); 142 143 if (*ptr) 144 return CF_ERROR_CODEC_NOT_HEXSTRING; 145 146 binlen = length / 2; 147 148 for (iter = 0, ptr = hex ; *ptr ; iter++) 137 149 { 138 150 val = 0; /* init/re-init docoding-buffer */ … … 145 157 asciiHex = g_ascii_HexDecode[(int)buf]; \ 146 158 \ 147 if (buf) \ 148 val |= (unsigned char) \ 149 (buf - asciiHex + (asciiHex == '0' ? 0 : 10)); \ 150 else \ 151 return CF_ERROR_CODEC_NOT_HEXSTRING; \ 159 val |= (unsigned char) \ 160 (buf - asciiHex + (asciiHex == '0' ? 0 : 10)); \ 152 161 } while (0) 153 162 … … 159 168 } 160 169 161 return binlen; 170 * len = binlen; 171 172 return CF_OK; 162 173 } 163 174 … … 232 243 * @param base64 base64 문자열 233 244 * @param bin 바이너리 데이터를 저장할 주소 245 * @param len 바이너리 데이터의 길이를 저장할 주소 234 246 * 235 247 * @remark … … 238 250 int 239 251 CF_Codec_Base64_Decode (const char * base64, 240 unsigned char * bin) 252 unsigned char * bin, 253 size_t * len) 241 254 { 242 255 const char * src = base64; … … 247 260 ASSERT_ARGS (src == NULL); 248 261 ASSERT_ARGS (dst == NULL); 262 ASSERT_ARGS (len == NULL); 263 264 *len = 0; 249 265 250 266 while (g_ascii_Base64Decode[(int)*src] < BASE64_PADDING_CHAR_INDEX) src++;
Note:
See TracChangeset
for help on using the changeset viewer.