#include <stdlib.h>
#include <stdio.h>
#include <time.h>
-#include "data.h"
#ifdef _WIN32
#include <windows.h>
sprintf(fnameptr, "%s", ext);
}
+void hex_to_buffer(const uint8_t *buf, const uint8_t *hex_data, const size_t hex_len, const size_t hex_max_len,
+ const size_t min_str_len, const size_t spaces_between, bool uppercase) {
+
+ char *tmp = (char *)buf;
+ size_t i;
+ memset(tmp, 0x00, hex_max_len);
+
+ int maxLen = ( hex_len > hex_max_len) ? hex_max_len : hex_len;
+
+ for (i = 0; i < maxLen; ++i, tmp += 2 + spaces_between) {
+ sprintf(tmp, (uppercase) ? "%02X" : "%02x", (unsigned int) hex_data[i]);
+
+ for (int j = 0; j < spaces_between; j++)
+ sprintf(tmp + 2 + j, " ");
+ }
+
+ i *= (2 + spaces_between);
+ int minStrLen = min_str_len > i ? min_str_len : 0;
+ if (minStrLen > hex_max_len)
+ minStrLen = hex_max_len;
+ for(; i < minStrLen; i++, tmp += 1)
+ sprintf(tmp, " ");
+
+ return;
+}
+
// printing and converting functions
void print_hex(const uint8_t * data, const size_t len)
}
char *sprint_hex(const uint8_t *data, const size_t len) {
+ static char buf[1025] = {0};
- int maxLen = ( len > 1024/3) ? 1024/3 : len;
- static char buf[1024];
- memset(buf, 0x00, 1024);
- char *tmp = buf;
- size_t i;
+ hex_to_buffer((uint8_t *)buf, data, len, sizeof(buf) - 1, 0, 1, false);
+
+ return buf;
+}
- for (i=0; i < maxLen; ++i, tmp += 3)
- sprintf(tmp, "%02x ", (unsigned int) data[i]);
+char *sprint_hex_inrow_ex(const uint8_t *data, const size_t len, const size_t min_str_len) {
+ static char buf[1025] = {0};
+
+ hex_to_buffer((uint8_t *)buf, data, len, sizeof(buf) - 1, min_str_len, 0, false);
return buf;
}
+char *sprint_hex_inrow(const uint8_t *data, const size_t len) {
+ return sprint_hex_inrow_ex(data, len, 0);
+}
+
char *sprint_bin_break(const uint8_t *data, const size_t len, const uint8_t breaks) {
// make sure we don't go beyond our char array memory
int max_len;
memset(buf, 0x00, 1024);
size_t max_len = (len > 255) ? 255 : len;
// max 255 bytes * 3 + 2 characters = 767 in buffer
- sprintf(tmp, "%s| ", sprint_hex(data, max_len) );
+ sprintf(tmp, "%.765s| ", sprint_hex(data, max_len) );
size_t i = 0;
size_t pos = (max_len * 3)+2;
return buf;
}
-char *sprint_ascii(const uint8_t *data, const size_t len) {
+char *sprint_ascii_ex(const uint8_t *data, const size_t len, const size_t min_str_len) {
static char buf[1024];
char *tmp = buf;
memset(buf, 0x00, 1024);
tmp[i] = ((c < 32) || (c == 127)) ? '.' : c;
++i;
}
+
+ int minStrLen = min_str_len > i ? min_str_len : 0;
+ for(; i < minStrLen; ++i)
+ tmp[i] = ' ';
+
return buf;
}
+char *sprint_ascii(const uint8_t *data, const size_t len) {
+ return sprint_ascii_ex(data, len, 0);
+}
+
void num_to_bytes(uint64_t n, size_t len, uint8_t* dest)
{
while (len--) {
return buf;
}
+char * printBitsPar(const uint8_t *b, size_t len) {
+ static char buf1[512] = {0};
+ static char buf2[512] = {0};
+ static char *buf;
+ if (buf != buf1)
+ buf = buf1;
+ else
+ buf = buf2;
+ memset(buf, 0x00, 512);
+
+ for (int i = 0; i < len; i++) {
+ buf[i] = ((b[i / 8] << (i % 8)) & 0x80) ? '1':'0';
+ }
+ return buf;
+}
+
+
// -------------------------------------------------------------------------
// string parameters lib
// -------------------------------------------------------------------------
return 1;
for(i = 0; i < hexcnt; i += 2) {
- if (!(isxdigit(line[bg + i]) && isxdigit(line[bg + i + 1])) ) return 1;
+ if (!(isxdigit((unsigned char)line[bg + i]) && isxdigit((unsigned char)line[bg + i + 1])) ) return 1;
sscanf((char[]){line[bg + i], line[bg + i + 1], 0}, "%X", &temp);
data[i / 2] = temp & 0xff;
return 1;
for(i = 0; i < *hexcnt; i += 2) {
- if (!(isxdigit(line[bg + i]) && isxdigit(line[bg + i + 1])) ) return 1;
+ if (!(isxdigit((unsigned char)line[bg + i]) && isxdigit((unsigned char)line[bg + i + 1])) ) return 1;
sscanf((char[]){line[bg + i], line[bg + i + 1], 0}, "%X", &temp);
data[i / 2] = temp & 0xff;
int indx = bg;
while (line[indx]) {
- if (line[indx] == '\t' || line[indx] == ' ')
+ if (line[indx] == '\t' || line[indx] == ' ') {
+ indx++;
continue;
+ }
- if (isxdigit(line[indx])) {
+ if (isxdigit((unsigned char)line[indx])) {
buf[strlen(buf) + 1] = 0x00;
buf[strlen(buf)] = line[indx];
} else {
else if (x >= 'A' && x <= 'F')
x -= 'A' - 10;
else {
- printf("Discovered unknown character %c %d at idx %d of %s\n", x, x, source - start, start);
+ printf("Discovered unknown character %c %d at idx %tu of %s\n", x, x, source - start, start);
return 0;
}
// output