X-Git-Url: http://git.cascardo.eti.br/?p=cascardo%2Flibreceita.git;a=blobdiff_plain;f=decfile.c;h=100d4d33af337eb304f4c2027a01ae8dc883ebf2;hp=33062d318f37d4fdbf030c630ba168b51f410a76;hb=6829681fd0c77efa1da391637cd4d53e93ed8d65;hpb=bbddc76d90166eb4990253a41afe754d1b9785de diff --git a/decfile.c b/decfile.c index 33062d3..100d4d3 100644 --- a/decfile.c +++ b/decfile.c @@ -176,6 +176,7 @@ static int parse_header_2014(struct pmhash *hash, char *buffer) char *p = buffer; char *key; char *val; + char *tail; #define parse(field, sz) \ r = -ENOMEM; \ @@ -207,6 +208,12 @@ static int parse_header_2014(struct pmhash *hash, char *buffer) parse("nome", 60); parse("uf", 2); parse("hash", 10); + + if (p - buffer != RNET_HEADER_HEAD_2014) { + fprintf(stderr, "RNET_HEADER_HEAD_2014 in decfile.h needs to be adjusted to %i\n", p - buffer); + goto out_val; + } + parse("in_cert", 1); parse("dt_nasc", 8); parse("in_comp", 1); @@ -279,9 +286,35 @@ static int parse_header_2014(struct pmhash *hash, char *buffer) parse("nr_conta", 13); parse("nr_dv_conta", 2); parse("in_dv_conta", 1); + + tail = p; + parse("versaotestpgd", 3); parse("controle", 10); + if (*p++ != '\r') { + fprintf(stderr, + "missing CR at the %ith header character\n", + p - buffer); + goto out_val; + } else if (*p++ != '\n') { + fprintf(stderr, + "missing LF at the %ith header character\n", + p - buffer); + goto out_val; + } else if (*p != 0) { + fprintf(stderr, + "missing NUL at the %ith header character\n", + p - buffer); + goto out_val; + } else if (p - buffer != RNET_HEADER_SIZE_2014) { + fprintf(stderr, "RNET_HEADER_SIZE_2014 in decfile.h needs to be adjusted to %i,\nor parse_header in decfile.c needs updating\n", p - buffer); + goto out_val; + } else if (p - tail != RNET_HEADER_TAIL_2014) { + fprintf(stderr, "RNET_HEADER_TAIL_2014 in decfile.h needs to be adjusted to %i\n", p - tail); + goto out_val; + } + return 0; out_add: free(key); @@ -297,6 +330,7 @@ static int parse_header_2013(struct pmhash *hash, char *buffer) char *p = buffer; char *key; char *val; + char *tail; #define parse(field, sz) \ r = -ENOMEM; \ @@ -328,6 +362,12 @@ static int parse_header_2013(struct pmhash *hash, char *buffer) parse("nome", 60); parse("uf", 2); parse("hash", 10); + + if (p - buffer != RNET_HEADER_HEAD_2013) { + fprintf(stderr, "RNET_HEADER_HEAD_2013 in decfile.h needs to be adjusted to %i\n", p - buffer); + goto out_val; + } + parse("in_cert", 1); parse("dt_nasc", 8); parse("in_comp", 1); @@ -395,9 +435,35 @@ static int parse_header_2013(struct pmhash *hash, char *buffer) parse("vr_totisentos", 13); parse("vr_totexclusivo", 13); parse("vr_totpagamentos", 13); + + tail = p; + parse("versaotestpgd", 3); parse("controle", 10); + if (*p++ != '\r') { + fprintf(stderr, + "missing CR at the %ith header character\n", + p - buffer); + goto out_val; + } else if (*p++ != '\n') { + fprintf(stderr, + "missing LF at the %ith header character\n", + p - buffer); + goto out_val; + } else if (*p != 0) { + fprintf(stderr, + "missing NUL at the %ith header character\n", + p - buffer); + goto out_val; + } else if (p - buffer != RNET_HEADER_SIZE_2013) { + fprintf(stderr, "RNET_HEADER_SIZE_2013 in decfile.h needs to be adjusted to %i,\nor parse_header in decfile.c needs updating\n", p - buffer); + goto out_val; + } else if (p - tail != RNET_HEADER_TAIL_2013) { + fprintf(stderr, "RNET_HEADER_TAIL_2013 in decfile.h needs to be adjusted to %i\n", p - tail); + goto out_val; + } + return 0; out_add: free(key);