static ssize_t ptb_read_string(struct ptbf *f, char **dest) { uint8_t shortlength; uint16_t length; char *data; ptb_data(f, &shortlength, 1); /* If length is 0xff, this is followed by a uint16_t length */ if(shortlength == 0xff) { if(ptb_data(f, &length, 2) < 2) return -1; } else { length = shortlength; } if(length) { data = malloc_p(char, length+1); if(ptb_data(f, data, length) < length) return -1; ptb_debug("Read string: %s", data); *dest = data; } else { ptb_debug("Empty string"); *dest = NULL; } return length; }