X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=isl_arg.c;h=0963aa126c8fbec8160158bc8ddad2025f0196f3;hb=63fb8a7f484648c3caa25351c8c94ac2395ec563;hp=7811b6b9354325ad4408134e15a7c7611dbef795;hpb=0cd87a523f6b8c3846ca9117f02075687e75344d;p=platform%2Fupstream%2Fisl.git diff --git a/isl_arg.c b/isl_arg.c index 7811b6b..0963aa1 100644 --- a/isl_arg.c +++ b/isl_arg.c @@ -130,6 +130,17 @@ void isl_args_set_defaults(struct isl_args *args, void *opt) } } +static void free_args(struct isl_arg *arg, void *opt); + +static void free_child(struct isl_arg *arg, void *opt) +{ + if (arg->offset == (size_t) -1) + free_args(arg->u.child.child->args, opt); + else + isl_args_free(arg->u.child.child, + *(void **)(((char *)opt) + arg->offset)); +} + static void free_str_list(struct isl_arg *arg, void *opt) { int i; @@ -154,11 +165,7 @@ static void free_args(struct isl_arg *arg, void *opt) for (i = 0; arg[i].type != isl_arg_end; ++i) { switch (arg[i].type) { case isl_arg_child: - if (arg[i].offset == (size_t) -1) - free_args(arg[i].u.child.child->args, opt); - else - isl_args_free(arg[i].u.child.child, - *(void **)(((char *)opt) + arg[i].offset)); + free_child(&arg[i], opt); break; case isl_arg_arg: case isl_arg_str: @@ -1117,7 +1124,7 @@ static void print_version_and_exit(struct isl_arg *decl) static int drop_argument(int argc, char **argv, int drop, int n) { - for (; drop < argc; ++drop) + for (; drop + n < argc; ++drop) argv[drop] = argv[drop + n]; return argc - n;