# HG changeset patch # User Mychaela Falconia # Date 1517852149 0 # Node ID 3bcc56883b1711e959b312c00d084ffa4853ae72 # Parent 02d6c846953528d9c8fcebc63d467b577f8d373b fcup-smdump: -d delete-after-dump option implemented diff -r 02d6c8469535 -r 3bcc56883b17 uptools/atcmd/smdump.c --- a/uptools/atcmd/smdump.c Mon Feb 05 08:47:45 2018 +0000 +++ b/uptools/atcmd/smdump.c Mon Feb 05 17:35:49 2018 +0000 @@ -13,12 +13,34 @@ extern char at_response[]; +struct delafter { + unsigned msgid; + struct delafter *next; +}; + +int delete_after_flag; +struct delafter *delafter_head, **delafter_tail = &delafter_head; + int pdu_state; char *msgtype; u_char pbname_gsm[40]; unsigned pbname_len, header_len; u_char pdu_bin[176]; +add_delafter_record(msgid) + unsigned msgid; +{ + struct delafter *rec; + + rec = malloc(sizeof(struct delafter)); + if (!rec) + return; + rec->msgid = msgid; + rec->next = 0; + *delafter_tail = rec; + delafter_tail = &rec->next; +} + validate_pbname_7bit() { unsigned n; @@ -53,7 +75,8 @@ if (fields[2].type != RESP_FIELD_STRING && fields[2].type != RESP_FIELD_EMPTY) goto malformed; - /* we'll handle the message number when we add delete after dump */ + if (delete_after_flag) + add_delafter_record(fields[0].num); switch (fields[1].num) { case 0: case 1: @@ -124,17 +147,33 @@ cmgl_header(); } +delete_after_process() +{ + struct delafter *rec; + char cmgd_cmd[32]; + + for (rec = delafter_head; rec; rec = rec->next) { + sprintf(cmgd_cmd, "AT+CMGD=%u", rec->msgid); + atinterf_exec_cmd_needok(cmgd_cmd, 0, 0); + } +} + main(argc, argv) char **argv; { int c; extern int optind; - while ((c = getopt(argc, argv, "B:np:RX:")) != EOF) - if (!atinterf_cmdline_opt(c)) { + while ((c = getopt(argc, argv, "B:dnp:RX:")) != EOF) { + if (atinterf_cmdline_opt(c)) + continue; + else if (c == 'd') + delete_after_flag = 1; + else { /* error msg already printed */ exit(ERROR_USAGE); } + } if (argc != optind) { fprintf(stderr, "usage: %s [options]\n", argv[0]); exit(ERROR_USAGE); @@ -150,6 +189,7 @@ fprintf(stderr, "error: wrong state at the end of +CMGL\n"); exit(ERROR_TARGET); } - /* delete-after-dump will go here */ + if (delete_after_flag) + delete_after_process(); exit(0); }