diff --git a/templates/linux/main.c b/templates/linux/main.c index d914386..9f3ec4d 100644 --- a/templates/linux/main.c +++ b/templates/linux/main.c @@ -34,7 +34,7 @@ unsigned long long nplen = NPUB_LENGTH; unsigned char *k = NULL; unsigned long long klen = KEY_LENGTH; -static void read_variable(unsigned char **target, unsigned long long *lenp) { +static void recv_variable(unsigned char **target, unsigned long long *lenp) { if (*target != NULL) { free(*target); } @@ -46,26 +46,25 @@ static void read_variable(unsigned char **target, unsigned long long *lenp) { } *lenp = len; - if (*lenp == 0) { - *target = NULL; - return; - } - - *target = malloc(*lenp); + *target = malloc(len); if (NULL == *target) { - fprintf(stderr, "ERROR: couldn't malloc %llu bytes\r\n", *lenp); + fprintf(stderr, "ERROR: couldn't malloc %u bytes\r\n", len); exit(2); } + if (*lenp == 0) { + return; + } + if (1 != fread(*target, *lenp, 1, stdin)) { - fprintf(stderr, "ERROR: didn't read %llu bytes of data\r\n", *lenp); + fprintf(stderr, "ERROR: didn't read %u bytes of data\r\n", len); exit(1); } } -static void write_variable(unsigned char *target, unsigned long long len) { +static void send_variable(unsigned char *target, unsigned long long len) { uint32_t olen = len; if (1 != fwrite(&olen, sizeof(olen), 1, stdout)) { fprintf(stderr, "ERROR: didn't write length\r\n"); @@ -92,22 +91,23 @@ int main() { while (1) { if (1 != fread(&action, sizeof(action), 1, stdin)) return 1; + fprintf(stderr, "DEBUG: received action 0x%02x\r\n", action); switch (action) { - case 'c': read_variable(&c, &clen); break; - case 'm': read_variable(&m, &mlen); break; - case 'a': read_variable(&ad, &adlen); break; - case 'k': read_variable(&k, &klen); break; + case 'c': recv_variable(&c, &clen); break; + case 'm': recv_variable(&m, &mlen); break; + case 'a': recv_variable(&ad, &adlen); break; + case 'k': recv_variable(&k, &klen); break; - case 's': read_variable(&nsec, &nslen); break; - case 'p': read_variable(&npub, &nplen); break; + case 's': recv_variable(&nsec, &nslen); break; + case 'p': recv_variable(&npub, &nplen); break; - case 'C': write_variable(c, clen); break; - case 'M': write_variable(m, mlen); break; - case 'A': write_variable(ad, adlen); break; - case 'K': write_variable(k, klen); break; - case 'S': write_variable(nsec, nslen); break; - case 'P': write_variable(npub, nplen); break; + case 'C': send_variable(c, clen); break; + case 'M': send_variable(m, mlen); break; + case 'A': send_variable(ad, adlen); break; + case 'K': send_variable(k, klen); break; + case 'S': send_variable(nsec, nslen); break; + case 'P': send_variable(npub, nplen); break; case 'e': @@ -124,6 +124,7 @@ int main() { fprintf(stderr, "klen = %llu\r\n", klen); fprintf(stderr, "k = "); FPRINTF_HEX(stderr, k, klen); fprintf(stderr, "\r\n"); */ + if (k == NULL) { fprintf(stderr, "Missing key\r\n"); return 3;