summaryrefslogtreecommitdiff
path: root/cleopatre/application
diff options
context:
space:
mode:
authorNélio Laranjeiro2012-09-21 08:09:44 +0200
committerNélio Laranjeiro2012-10-10 14:37:47 +0200
commit9a32593a494b8193c8837fa06c97552542652375 (patch)
tree9894f1a3397ffc2ab5b75fa8dae47348f5830243 /cleopatre/application
parent4e341d491ea2fc9107a0ddc39be3cee7c798a1fe (diff)
cleo/application/spidinit: recast spidinit, closes #3316
This fix the segfault of spidinit when it was called with unsupported options.
Diffstat (limited to 'cleopatre/application')
-rwxr-xr-xcleopatre/application/spidinit/S99spidinit14
-rw-r--r--cleopatre/application/spidinit/src/spidinit.c100
2 files changed, 23 insertions, 91 deletions
diff --git a/cleopatre/application/spidinit/S99spidinit b/cleopatre/application/spidinit/S99spidinit
index 87346c2367..d3b33cb7f8 100755
--- a/cleopatre/application/spidinit/S99spidinit
+++ b/cleopatre/application/spidinit/S99spidinit
@@ -1,16 +1,4 @@
#!/bin/sh
-#
-# Start spidinit....
-#
-
-case "$1" in
- start)
- /usr/bin/spidinit -a
- ;;
- *)
- echo $"Usage: $0 {start}"
- exit 1
-esac
-
+/usr/bin/spidinit
exit $?
diff --git a/cleopatre/application/spidinit/src/spidinit.c b/cleopatre/application/spidinit/src/spidinit.c
index 05a775f388..db7aa31d95 100644
--- a/cleopatre/application/spidinit/src/spidinit.c
+++ b/cleopatre/application/spidinit/src/spidinit.c
@@ -23,94 +23,38 @@
#include <getopt.h>
#include "spidinit.h"
-#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
-
-struct command {
- char lname[32];
- char sname;
- char desc[64];
- char use_arg;
- int (*func)(char*);
-};
-
-int do_all_commands(char *arg);
-int do_update_img_desc(char *arg);
-
-struct command cmd_list[] = {
- { "descupd", 'd', "update image descriptor", 0, &do_update_img_desc },
- { "all" , 'a', "start all commands", 0, &do_all_commands } /* must be the last one */
+static struct option long_options[] = {
+ {"descupd", 0, 0, 'd'},
+ {"help", 0, 0, 'h'},
+ {0, 0, 0, 0}
};
-static void print_usage(const char *cmd)
+static void print_usage (const char *cmd)
{
- int i;
- fprintf(stderr, "Usage : %s\n", cmd);
- for(i=0 ; i<ARRAY_SIZE(cmd_list) ; i++)
- {
- fprintf(stderr, " --%s : %s\n", cmd_list[i].lname, cmd_list[i].desc);
- }
-}
-
-int do_all_commands(char *arg)
-{
- int i;
- int result;
- /* Loop for all commands except the last one : all */
- for(i=0 ; i<ARRAY_SIZE(cmd_list)-1 ; i++)
- {
- result = cmd_list[i].func(arg);
- if(result)
- return -1;
- }
- return 0;
+ fprintf (stderr, "Usage : %s [options]\n", cmd);
+ fprintf (stderr, "\t -d --descupd\tupdate image descriptor.\n");
+ fprintf (stderr, "\t -h --help\tprint this help.\n");
}
-int do_update_img_desc(char *arg)
+int main (int argc, char **argv)
{
- return update_img_desc();
-}
-
-int main(int argc, char **argv)
-{
- int i, c, err;
- int opt_index = 0;
- char short_opts[(2*ARRAY_SIZE(cmd_list))+1];
- struct option long_opts[ARRAY_SIZE(cmd_list)];
-
+ int c, err;
+ int option_index = 0;
/* No option start all commands */
if(argc <= 1)
- return do_all_commands(NULL);
-
- /* Fill allowed options */
- for(i=0 ; i<ARRAY_SIZE(cmd_list) ; i++)
- {
- short_opts[i] = cmd_list[i].sname;
- if(cmd_list[i].use_arg)
- {
- short_opts[i+1] = ':';
- short_opts[i+2] = '\0';
- }
- else
- {
- short_opts[i+1] = '\0';
- }
- long_opts[i].name = (const char*)cmd_list[i].lname;
- long_opts[i].has_arg = cmd_list[i].use_arg;
- long_opts[i].flag = NULL;
- long_opts[i].val = cmd_list[i].sname;
- }
-
- /* Apply options */
- while((c = getopt_long_only(argc, argv, short_opts, long_opts, &opt_index)) != -1)
+ return update_img_desc ();
+ optind = 1;
+ while ((c = getopt_long (argc, argv, "dh", long_options, &option_index))
+ != -1)
{
switch(c)
{
- case 'd' : /* update image descriptor */
- err = do_update_img_desc(optarg); break;
- case 'a' : /* start all functions */
- err = do_all_commands(optarg); break;
+ case 'd' :
+ err = update_img_desc ();
+ break;
+ case '?':
default :
- print_usage(argv[0]);
+ print_usage (argv[0]);
return 1;
}
if(err)
@@ -120,8 +64,8 @@ int main(int argc, char **argv)
/* Check there's no arguments left */
if (optind < argc)
{
- printf("Unknown argument %s\n\n", argv[optind]);
- print_usage(argv[0]);
+ printf ("Unknown argument %s\n\n", argv[optind]);
+ print_usage (argv[0]);
return -1;
}