Without that fix with --call= it picks an empty string as the number:
    $ ipc-modem --debug --dry-run start --call=
      CC       ipc-modem.o
      CCLD     ipc-modem
    [I] Got call number!
    [I] Debug enabled
    [I] dry-run mode
    [1] Starting dummy modem_read_loop on FMT client
    [I] modem_dummy_read_loop: looping
    [...]

and with --call start, it things that "start" is the number and fails
because the "start" command is not found:
    $ ipc-modem --debug --dry-run --call start
    make: Nothing to be done for 'all'.
    [I] Got call number!

    Error: No command given. You need to use a command.
           See the help below for more details.

    usage: ipc-modem <command>
    commands:
        boot                  boot modem only
        power-on              power on the modem only
        power-off             power off the modem only
        start                 boot modem and start read loop
    arguments:
        --call=[NUMBER]       call NUMBER
        --debug               enable debug messages
        --dry-run             Test the ipc-modem program without talking to the 
modem.
        --help                print this help message
        --pin=[PIN]           provide SIM card PIN

With this fix it handles both situation by printing the right error:
    $ipc-modem --debug --dry-run start --call=
    make: Nothing to be done for 'all'.
    [E] Missing call number

    $ make ; ./ipc-modem --debug --dry-run --call start
    make: Nothing to be done for 'all'.
    [E] Missing call number

Signed-off-by: Denis 'GNUtoo' Carikli <gnu...@cyberdimension.org>
---
 tools/ipc-modem.c  |  7 ++++++-
 tools/ipc-modem.py | 14 ++++++++++++--
 2 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/tools/ipc-modem.c b/tools/ipc-modem.c
index 9990d4f..08f9c3a 100644
--- a/tools/ipc-modem.c
+++ b/tools/ipc-modem.c
@@ -686,7 +686,12 @@ int parse_cmdline_opts(struct ipc_modem_data *data, int 
argc, char *argv[])
 
                if (strcmp(opt_l[opt_i].name, "call") == 0) {
                        if (optarg) {
-                               if (strlen(optarg) < 14) {
+                               if (strlen(optarg) == 0) {
+                                       ipc_modem_log(data->client,
+                                                     MODEM_LOG_ERROR,
+                                                     "Missing call number\n");
+                                       return EX_USAGE;
+                               } else if (strlen(optarg) < 14) {
                                        assert(strlen(optarg) <
                                               sizeof(data->call_number));
                                        ipc_modem_log(data->client,
diff --git a/tools/ipc-modem.py b/tools/ipc-modem.py
index 12ee774..0fe76d7 100755
--- a/tools/ipc-modem.py
+++ b/tools/ipc-modem.py
@@ -75,7 +75,7 @@ class IpcModem(object):
         else:
             raise Exception()
 
-    def test_call(self, timeout=3):
+    def test_call_with_number(self, timeout=3):
         expected_output = "[I] Got call number!"
         output = ""
         try:
@@ -88,12 +88,22 @@ class IpcModem(object):
         if output != expected_output:
             raise Exception()
 
+    def test_call_without_number(self, timeout=3):
+        expected_output = "[E] Missing call number"
+        output = get_output(self.ipc_modem('power-on',
+                                           '--call=',
+                                           _timeout=timeout,
+                                           
_ok_code=SysExit.EX_USAGE.exit_code))
+        if output != expected_output:
+            raise Exception()
+
     def test_commands(self):
         self.test_boot()
         self.test_power_on()
         self.test_power_off()
         self.test_start()
-        self.test_call()
+        self.test_call_with_number()
+        self.test_call_without_number()
 
 def main():
     ipc_modem = IpcModem()
-- 
2.35.1

_______________________________________________
Replicant mailing list
Replicant@osuosl.org
https://lists.osuosl.org/mailman/listinfo/replicant

Reply via email to