Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/usb/src/debug.c

    ra9d85df r11e00c8  
    3838#include <stdlib.h>
    3939#include <stdio.h>
    40 #include <ddf/log.h>
    4140#include <usb/debug.h>
    4241
     
    6867                if (rc > 0) {
    6968                        log_stream = fopen(fname, "w");
    70                         if (log_stream != NULL)
    71                                 setvbuf(log_stream, NULL, _IOFBF, BUFSIZ);
    72                        
    7369                        free(fname);
    7470                }
     
    197193        bzero(buffer_dump[buffer_dump_index], BUFFER_DUMP_LEN);
    198194
    199         /* Do the actual dump. */
    200         ddf_dump_buffer(buffer_dump[buffer_dump_index], BUFFER_DUMP_LEN,
    201             buffer, 1, size, dumped_size);
     195        if (buffer == NULL) {
     196                return "(null)";
     197        }
     198        if (size == 0) {
     199                return "(empty)";
     200        }
     201        if ((dumped_size == 0) || (dumped_size > size)) {
     202                dumped_size = size;
     203        }
     204
     205        /* How many bytes are available in the output buffer. */
     206        size_t buffer_remaining_size = BUFFER_DUMP_LEN - 1 - REMAINDER_STR_LEN;
     207        char *it = buffer_dump[buffer_dump_index];
     208
     209        size_t index = 0;
     210
     211        while (index < size) {
     212                /* Determine space before the number. */
     213                const char *space_before;
     214                if (index == 0) {
     215                        space_before = "";
     216                } else if ((index % BUFFER_DUMP_GROUP_SIZE) == 0) {
     217                        space_before = "  ";
     218                } else {
     219                        space_before = " ";
     220                }
     221
     222                /*
     223                 * Add the byte as a hexadecimal number plus the space.
     224                 * We do it into temporary buffer to ensure that always
     225                 * the whole byte is printed.
     226                 */
     227                int val = buffer[index];
     228                char current_byte[16];
     229                int printed = snprintf(current_byte, 16,
     230                    "%s%02x", space_before, val);
     231                if (printed < 0) {
     232                        break;
     233                }
     234
     235                if ((size_t) printed > buffer_remaining_size) {
     236                        break;
     237                }
     238
     239                /* We can safely add 1, because space for end 0 is reserved. */
     240                str_append(it, buffer_remaining_size + 1, current_byte);
     241
     242                buffer_remaining_size -= printed;
     243                /* Point at the terminator 0. */
     244                it += printed;
     245                index++;
     246
     247                if (index >= dumped_size) {
     248                        break;
     249                }
     250        }
     251
     252        /* Add how many bytes were not printed. */
     253        if (index < size) {
     254                snprintf(it, REMAINDER_STR_LEN,
     255                    REMAINDER_STR_FMT, size - index);
     256        }
    202257
    203258        /* Next time, use the other buffer. */
Note: See TracChangeset for help on using the changeset viewer.