Changeset ff4185e6 in mainline
- Timestamp:
- 2011-03-04T21:54:07Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 03f7952, f43c4d2
- Parents:
- 019cff6
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/usb/src/debug.c
r019cff6 rff4185e6 253 253 254 254 255 #define BUFFER_DUMP_LEN 512 255 #define REMAINDER_STR_FMT " (%zu)..." 256 /* string + terminator + number width (enough for 4GB)*/ 257 #define REMAINDER_STR_LEN (5 + 1 + 10) 258 #define BUFFER_DUMP_GROUP_SIZE 4 259 #define BUFFER_DUMP_LEN 240 /* Ought to be enough for everybody ;-). */ 256 260 static fibril_local char buffer_dump[BUFFER_DUMP_LEN]; 257 261 … … 280 284 size_t dumped_size) 281 285 { 286 /* 287 * Remove previous string (that might also reveal double usage of 288 * this function). 289 */ 290 bzero(buffer_dump, BUFFER_DUMP_LEN); 291 282 292 if (buffer == NULL) { 283 293 return "(null)"; … … 290 300 } 291 301 302 /* How many bytes are available in the output buffer. */ 303 size_t buffer_remaining_size = BUFFER_DUMP_LEN - 1 - REMAINDER_STR_LEN; 292 304 char *it = buffer_dump; 293 305 294 306 size_t index = 0; 295 307 296 while (1) { 297 /* FIXME: add range checking of the buffer size. */ 298 snprintf(it, 4, "%02X ", (int) buffer[index]); 299 it += 3; 308 while (index < size) { 309 /* Determine space before the number. */ 310 const char *space_before; 311 if (index == 0) { 312 space_before = ""; 313 } else if ((index % BUFFER_DUMP_GROUP_SIZE) == 0) { 314 space_before = " "; 315 } else { 316 space_before = " "; 317 } 318 319 /* 320 * Add the byte as a hexadecimal number plus the space. 321 * We do it into temporary buffer to ensure that always 322 * the whole byte is printed. 323 */ 324 int val = buffer[index]; 325 char current_byte[16]; 326 int printed = snprintf(current_byte, 16, 327 "%s%02x", space_before, val); 328 if (printed < 0) { 329 break; 330 } 331 332 if ((size_t) printed > buffer_remaining_size) { 333 break; 334 } 335 336 /* We can safely add 1, because space for end 0 is reserved. */ 337 str_append(it, buffer_remaining_size + 1, current_byte); 338 339 buffer_remaining_size -= printed; 340 /* Point at the terminator 0. */ 341 it += printed; 300 342 index++; 343 301 344 if (index >= dumped_size) { 302 345 break; … … 304 347 } 305 348 306 /* Remove the last space */ 307 it--; 308 *it = 0; 349 /* Add how many bytes were not printed. */ 350 if (index < size) { 351 snprintf(it, REMAINDER_STR_LEN, 352 REMAINDER_STR_FMT, size - index); 353 } 309 354 310 355 return buffer_dump;
Note:
See TracChangeset
for help on using the changeset viewer.