add isl_aff_mod_val
[platform/upstream/isl.git] / isl_arg.c
index 7811b6b..0963aa1 100644 (file)
--- 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;