2 File autogenerated by gengetopt version 2.19.1
3 generated with the following command:
4 gengetopt -uCOMMAND --set-version=0.3
6 The developers of gengetopt consider the fixed text that goes in all
7 gengetopt output files to be in the public domain:
8 we make no copyright claims on it.
11 /* If we use autoconf. */
24 const char *gengetopt_args_info_purpose
= "";
26 const char *gengetopt_args_info_usage
= "Usage: untie [OPTIONS]... [COMMAND]...";
28 const char *gengetopt_args_info_description
= "";
30 const char *gengetopt_args_info_help
[] = {
31 " -h, --help Print help and exit",
32 " -V, --version Print version and exit",
33 " --mount New mount namespace (default=off)",
34 " --uname New uname (default=off)",
35 " --ipc New IPC context (default=off)",
36 " --mask=MASK Pass user defined flag",
37 " --chroot=DIRECTORY Chroot in the specified directory",
38 " --uid=UID Change to the specified UID",
39 " --username=USERNAME Change to the specified username",
40 " --gid=GID Add the specified GID",
41 " --groupname=GROUP Add the specified group",
42 " --daemonize Run as daemon (default=off)",
43 " --alarm=SECONDS Set an alarm after the specified delay",
48 void clear_given (struct gengetopt_args_info
*args_info
);
50 void clear_args (struct gengetopt_args_info
*args_info
);
53 cmdline_parser_internal (int argc
, char * const *argv
, struct gengetopt_args_info
*args_info
, int override
, int initialize
, int check_required
, const char *additional_error
);
56 cmdline_parser_required2 (struct gengetopt_args_info
*args_info
, const char *prog_name
, const char *additional_error
);
62 struct int_list
* next
;
69 struct string_list
* next
;
73 gengetopt_strdup (const char *s
);
76 void clear_given (struct gengetopt_args_info
*args_info
)
78 args_info
->help_given
= 0 ;
79 args_info
->version_given
= 0 ;
80 args_info
->mount_given
= 0 ;
81 args_info
->uname_given
= 0 ;
82 args_info
->ipc_given
= 0 ;
83 args_info
->mask_given
= 0 ;
84 args_info
->chroot_given
= 0 ;
85 args_info
->uid_given
= 0 ;
86 args_info
->username_given
= 0 ;
87 args_info
->gid_given
= 0 ;
88 args_info
->groupname_given
= 0 ;
89 args_info
->daemonize_given
= 0 ;
90 args_info
->alarm_given
= 0 ;
94 void clear_args (struct gengetopt_args_info
*args_info
)
96 args_info
->mount_flag
= 0;
97 args_info
->uname_flag
= 0;
98 args_info
->ipc_flag
= 0;
99 args_info
->mask_arg
= NULL
;
100 args_info
->mask_orig
= NULL
;
101 args_info
->chroot_arg
= NULL
;
102 args_info
->chroot_orig
= NULL
;
103 args_info
->uid_orig
= NULL
;
104 args_info
->username_arg
= NULL
;
105 args_info
->username_orig
= NULL
;
106 args_info
->gid_arg
= NULL
;
107 args_info
->gid_orig
= NULL
;
108 args_info
->groupname_arg
= NULL
;
109 args_info
->groupname_orig
= NULL
;
110 args_info
->daemonize_flag
= 0;
111 args_info
->alarm_orig
= NULL
;
116 void init_args_info(struct gengetopt_args_info
*args_info
)
118 args_info
->help_help
= gengetopt_args_info_help
[0] ;
119 args_info
->version_help
= gengetopt_args_info_help
[1] ;
120 args_info
->mount_help
= gengetopt_args_info_help
[2] ;
121 args_info
->uname_help
= gengetopt_args_info_help
[3] ;
122 args_info
->ipc_help
= gengetopt_args_info_help
[4] ;
123 args_info
->mask_help
= gengetopt_args_info_help
[5] ;
124 args_info
->mask_min
= -1;
125 args_info
->mask_max
= -1;
126 args_info
->chroot_help
= gengetopt_args_info_help
[6] ;
127 args_info
->uid_help
= gengetopt_args_info_help
[7] ;
128 args_info
->username_help
= gengetopt_args_info_help
[8] ;
129 args_info
->gid_help
= gengetopt_args_info_help
[9] ;
130 args_info
->gid_min
= -1;
131 args_info
->gid_max
= -1;
132 args_info
->groupname_help
= gengetopt_args_info_help
[10] ;
133 args_info
->groupname_min
= -1;
134 args_info
->groupname_max
= -1;
135 args_info
->daemonize_help
= gengetopt_args_info_help
[11] ;
136 args_info
->alarm_help
= gengetopt_args_info_help
[12] ;
141 cmdline_parser_print_version (void)
143 printf ("%s %s\n", CMDLINE_PARSER_PACKAGE
, CMDLINE_PARSER_VERSION
);
147 cmdline_parser_print_help (void)
150 cmdline_parser_print_version ();
152 if (strlen(gengetopt_args_info_purpose
) > 0)
153 printf("\n%s\n", gengetopt_args_info_purpose
);
155 printf("\n%s\n\n", gengetopt_args_info_usage
);
157 if (strlen(gengetopt_args_info_description
) > 0)
158 printf("%s\n", gengetopt_args_info_description
);
160 while (gengetopt_args_info_help
[i
])
161 printf("%s\n", gengetopt_args_info_help
[i
++]);
165 cmdline_parser_init (struct gengetopt_args_info
*args_info
)
167 clear_given (args_info
);
168 clear_args (args_info
);
169 init_args_info (args_info
);
171 args_info
->inputs
= NULL
;
172 args_info
->inputs_num
= 0;
176 cmdline_parser_release (struct gengetopt_args_info
*args_info
)
180 if (args_info
->mask_arg
)
182 for (i
= 0; i
< args_info
->mask_given
; ++i
)
184 if (args_info
->mask_orig
[i
])
186 free (args_info
->mask_orig
[i
]); /* free previous argument */
187 args_info
->mask_orig
[i
] = 0;
190 free (args_info
->mask_arg
); /* free previous argument */
191 args_info
->mask_arg
= 0;
192 free (args_info
->mask_orig
); /* free previous argument */
193 args_info
->mask_orig
= 0;
195 if (args_info
->chroot_arg
)
197 free (args_info
->chroot_arg
); /* free previous argument */
198 args_info
->chroot_arg
= 0;
200 if (args_info
->chroot_orig
)
202 free (args_info
->chroot_orig
); /* free previous argument */
203 args_info
->chroot_orig
= 0;
205 if (args_info
->uid_orig
)
207 free (args_info
->uid_orig
); /* free previous argument */
208 args_info
->uid_orig
= 0;
210 if (args_info
->username_arg
)
212 free (args_info
->username_arg
); /* free previous argument */
213 args_info
->username_arg
= 0;
215 if (args_info
->username_orig
)
217 free (args_info
->username_orig
); /* free previous argument */
218 args_info
->username_orig
= 0;
220 if (args_info
->gid_arg
)
222 for (i
= 0; i
< args_info
->gid_given
; ++i
)
224 if (args_info
->gid_orig
[i
])
226 free (args_info
->gid_orig
[i
]); /* free previous argument */
227 args_info
->gid_orig
[i
] = 0;
230 free (args_info
->gid_arg
); /* free previous argument */
231 args_info
->gid_arg
= 0;
232 free (args_info
->gid_orig
); /* free previous argument */
233 args_info
->gid_orig
= 0;
235 if (args_info
->groupname_arg
)
237 for (i
= 0; i
< args_info
->groupname_given
; ++i
)
239 if (args_info
->groupname_arg
[i
])
241 free (args_info
->groupname_arg
[i
]); /* free previous argument */
242 args_info
->groupname_arg
[i
] = 0;
244 if (args_info
->groupname_orig
[i
])
246 free (args_info
->groupname_orig
[i
]); /* free previous argument */
247 args_info
->groupname_orig
[i
] = 0;
250 if (args_info
->groupname_arg
[0])
251 free (args_info
->groupname_arg
[0]); /* free default string */
252 free (args_info
->groupname_arg
); /* free previous argument */
253 args_info
->groupname_arg
= 0;
254 free (args_info
->groupname_orig
); /* free previous argument */
255 args_info
->groupname_orig
= 0;
257 if (args_info
->alarm_orig
)
259 free (args_info
->alarm_orig
); /* free previous argument */
260 args_info
->alarm_orig
= 0;
263 for (i
= 0; i
< args_info
->inputs_num
; ++i
)
264 free (args_info
->inputs
[i
]);
266 if (args_info
->inputs_num
)
267 free (args_info
->inputs
);
269 clear_given (args_info
);
273 cmdline_parser_file_save(const char *filename
, struct gengetopt_args_info
*args_info
)
278 outfile
= fopen(filename
, "w");
282 fprintf (stderr
, "%s: cannot open file for writing: %s\n", CMDLINE_PARSER_PACKAGE
, filename
);
286 if (args_info
->help_given
) {
287 fprintf(outfile
, "%s\n", "help");
289 if (args_info
->version_given
) {
290 fprintf(outfile
, "%s\n", "version");
292 if (args_info
->mount_given
) {
293 fprintf(outfile
, "%s\n", "mount");
295 if (args_info
->uname_given
) {
296 fprintf(outfile
, "%s\n", "uname");
298 if (args_info
->ipc_given
) {
299 fprintf(outfile
, "%s\n", "ipc");
301 if (args_info
->mask_orig
)
303 for (i
= 0; i
< args_info
->mask_given
; ++i
)
305 if (args_info
->mask_orig
[i
])
307 fprintf(outfile
, "%s=\"%s\"\n", "mask", args_info
->mask_orig
[i
]);
311 if (args_info
->chroot_given
) {
312 if (args_info
->chroot_orig
) {
313 fprintf(outfile
, "%s=\"%s\"\n", "chroot", args_info
->chroot_orig
);
315 fprintf(outfile
, "%s\n", "chroot");
318 if (args_info
->uid_given
) {
319 if (args_info
->uid_orig
) {
320 fprintf(outfile
, "%s=\"%s\"\n", "uid", args_info
->uid_orig
);
322 fprintf(outfile
, "%s\n", "uid");
325 if (args_info
->username_given
) {
326 if (args_info
->username_orig
) {
327 fprintf(outfile
, "%s=\"%s\"\n", "username", args_info
->username_orig
);
329 fprintf(outfile
, "%s\n", "username");
332 if (args_info
->gid_orig
)
334 for (i
= 0; i
< args_info
->gid_given
; ++i
)
336 if (args_info
->gid_orig
[i
])
338 fprintf(outfile
, "%s=\"%s\"\n", "gid", args_info
->gid_orig
[i
]);
342 if (args_info
->groupname_orig
)
344 for (i
= 0; i
< args_info
->groupname_given
; ++i
)
346 if (args_info
->groupname_orig
[i
])
348 fprintf(outfile
, "%s=\"%s\"\n", "groupname", args_info
->groupname_orig
[i
]);
352 if (args_info
->daemonize_given
) {
353 fprintf(outfile
, "%s\n", "daemonize");
355 if (args_info
->alarm_given
) {
356 if (args_info
->alarm_orig
) {
357 fprintf(outfile
, "%s=\"%s\"\n", "alarm", args_info
->alarm_orig
);
359 fprintf(outfile
, "%s\n", "alarm");
370 cmdline_parser_free (struct gengetopt_args_info
*args_info
)
372 cmdline_parser_release (args_info
);
376 /* gengetopt_strdup() */
377 /* strdup.c replacement of strdup, which is not standard */
379 gengetopt_strdup (const char *s
)
385 result
= (char*)malloc(strlen(s
) + 1);
386 if (result
== (char*)0)
393 get_multiple_arg_token(const char *arg
)
396 size_t len
, num_of_escape
;
402 tok
= strchr (arg
, ',');
405 /* make sure it is not escaped */
408 if (*(tok
-1) == '\\')
410 /* find the next one */
411 tok
= strchr (tok
+1, ',');
419 len
= (size_t)(tok
- arg
+ 1);
421 len
= strlen (arg
) + 1;
423 len
-= num_of_escape
;
425 ret
= (char *) malloc (len
);
429 while (arg
[i
] && (j
< len
-1))
443 get_multiple_arg_token_next(const char *arg
)
450 tok
= strchr (arg
, ',');
452 /* make sure it is not escaped */
455 if (*(tok
-1) == '\\')
457 /* find the next one */
458 tok
= strchr (tok
+1, ',');
464 if (! tok
|| strlen(tok
) == 1)
471 check_multiple_option_occurrences(const char *prog_name
, unsigned int option_given
, int min
, int max
, const char *option_desc
);
474 check_multiple_option_occurrences(const char *prog_name
, unsigned int option_given
, int min
, int max
, const char *option_desc
)
478 if (option_given
&& ! (min
< 0 && max
< 0))
480 if (min
>= 0 && max
>= 0)
484 /* specific occurrences */
485 if (option_given
!= min
)
487 fprintf (stderr
, "%s: %s option occurrences must be %d\n",
488 prog_name
, option_desc
, min
);
492 else if (option_given
< min
493 || option_given
> max
)
495 /* range occurrences */
496 fprintf (stderr
, "%s: %s option occurrences must be between %d and %d\n",
497 prog_name
, option_desc
, min
, max
);
504 if (option_given
< min
)
506 fprintf (stderr
, "%s: %s option occurrences must be at least %d\n",
507 prog_name
, option_desc
, min
);
514 if (option_given
> max
)
516 fprintf (stderr
, "%s: %s option occurrences must be at most %d\n",
517 prog_name
, option_desc
, max
);
526 cmdline_parser (int argc
, char * const *argv
, struct gengetopt_args_info
*args_info
)
528 return cmdline_parser2 (argc
, argv
, args_info
, 0, 1, 1);
532 cmdline_parser2 (int argc
, char * const *argv
, struct gengetopt_args_info
*args_info
, int override
, int initialize
, int check_required
)
536 result
= cmdline_parser_internal (argc
, argv
, args_info
, override
, initialize
, check_required
, NULL
);
538 if (result
== EXIT_FAILURE
)
540 cmdline_parser_free (args_info
);
548 cmdline_parser_required (struct gengetopt_args_info
*args_info
, const char *prog_name
)
550 int result
= EXIT_SUCCESS
;
552 if (cmdline_parser_required2(args_info
, prog_name
, NULL
) > 0)
553 result
= EXIT_FAILURE
;
555 if (result
== EXIT_FAILURE
)
557 cmdline_parser_free (args_info
);
565 cmdline_parser_required2 (struct gengetopt_args_info
*args_info
, const char *prog_name
, const char *additional_error
)
569 /* checks for required options */
570 if (check_multiple_option_occurrences(prog_name
, args_info
->mask_given
, args_info
->mask_min
, args_info
->mask_max
, "'--mask'"))
573 if (check_multiple_option_occurrences(prog_name
, args_info
->gid_given
, args_info
->gid_min
, args_info
->gid_max
, "'--gid'"))
576 if (check_multiple_option_occurrences(prog_name
, args_info
->groupname_given
, args_info
->groupname_min
, args_info
->groupname_max
, "'--groupname'"))
580 /* checks for dependences among options */
586 cmdline_parser_internal (int argc
, char * const *argv
, struct gengetopt_args_info
*args_info
, int override
, int initialize
, int check_required
, const char *additional_error
)
588 int c
; /* Character of the parsed option. */
589 char *multi_token
, *multi_next
; /* for multiple options */
593 struct int_list
* mask_list
= NULL
,* mask_new
= NULL
;
594 struct int_list
* gid_list
= NULL
,* gid_new
= NULL
;
595 struct string_list
* groupname_list
= NULL
,* groupname_new
= NULL
;
597 struct gengetopt_args_info local_args_info
;
600 cmdline_parser_init (args_info
);
602 cmdline_parser_init (&local_args_info
);
611 int option_index
= 0;
614 static struct option long_options
[] = {
615 { "help", 0, NULL
, 'h' },
616 { "version", 0, NULL
, 'V' },
617 { "mount", 0, NULL
, 0 },
618 { "uname", 0, NULL
, 0 },
619 { "ipc", 0, NULL
, 0 },
620 { "mask", 1, NULL
, 0 },
621 { "chroot", 1, NULL
, 0 },
622 { "uid", 1, NULL
, 0 },
623 { "username", 1, NULL
, 0 },
624 { "gid", 1, NULL
, 0 },
625 { "groupname", 1, NULL
, 0 },
626 { "daemonize", 0, NULL
, 0 },
627 { "alarm", 1, NULL
, 0 },
632 c
= getopt_long (argc
, argv
, "hV", long_options
, &option_index
);
634 if (c
== -1) break; /* Exit from `while (1)' loop. */
638 case 'h': /* Print help and exit. */
639 cmdline_parser_print_help ();
640 cmdline_parser_free (&local_args_info
);
643 case 'V': /* Print version and exit. */
644 cmdline_parser_print_version ();
645 cmdline_parser_free (&local_args_info
);
649 case 0: /* Long option with no short option */
650 /* New mount namespace. */
651 if (strcmp (long_options
[option_index
].name
, "mount") == 0)
653 if (local_args_info
.mount_given
)
655 fprintf (stderr
, "%s: `--mount' option given more than once%s\n", argv
[0], (additional_error
? additional_error
: ""));
658 if (args_info
->mount_given
&& ! override
)
660 local_args_info
.mount_given
= 1;
661 args_info
->mount_given
= 1;
662 args_info
->mount_flag
= !(args_info
->mount_flag
);
665 else if (strcmp (long_options
[option_index
].name
, "uname") == 0)
667 if (local_args_info
.uname_given
)
669 fprintf (stderr
, "%s: `--uname' option given more than once%s\n", argv
[0], (additional_error
? additional_error
: ""));
672 if (args_info
->uname_given
&& ! override
)
674 local_args_info
.uname_given
= 1;
675 args_info
->uname_given
= 1;
676 args_info
->uname_flag
= !(args_info
->uname_flag
);
678 /* New IPC context. */
679 else if (strcmp (long_options
[option_index
].name
, "ipc") == 0)
681 if (local_args_info
.ipc_given
)
683 fprintf (stderr
, "%s: `--ipc' option given more than once%s\n", argv
[0], (additional_error
? additional_error
: ""));
686 if (args_info
->ipc_given
&& ! override
)
688 local_args_info
.ipc_given
= 1;
689 args_info
->ipc_given
= 1;
690 args_info
->ipc_flag
= !(args_info
->ipc_flag
);
692 /* Pass user defined flag. */
693 else if (strcmp (long_options
[option_index
].name
, "mask") == 0)
695 local_args_info
.mask_given
++;
697 multi_token
= get_multiple_arg_token(optarg
);
698 multi_next
= get_multiple_arg_token_next (optarg
);
702 mask_new
= (struct int_list
*) malloc (sizeof (struct int_list
));
703 mask_new
->next
= mask_list
;
704 mask_list
= mask_new
;
705 mask_new
->arg
= strtol (multi_token
, &stop_char
, 0);
706 if (!(stop_char
&& *stop_char
== '\0')) {
707 fprintf(stderr
, "%s: invalid numeric value: %s\n", argv
[0], multi_token
);
710 mask_new
->orig
= multi_token
;
714 multi_token
= get_multiple_arg_token(multi_next
);
715 multi_next
= get_multiple_arg_token_next (multi_next
);
716 local_args_info
.mask_given
++;
723 /* Chroot in the specified directory. */
724 else if (strcmp (long_options
[option_index
].name
, "chroot") == 0)
726 if (local_args_info
.chroot_given
)
728 fprintf (stderr
, "%s: `--chroot' option given more than once%s\n", argv
[0], (additional_error
? additional_error
: ""));
731 if (args_info
->chroot_given
&& ! override
)
733 local_args_info
.chroot_given
= 1;
734 args_info
->chroot_given
= 1;
735 if (args_info
->chroot_arg
)
736 free (args_info
->chroot_arg
); /* free previous string */
737 args_info
->chroot_arg
= gengetopt_strdup (optarg
);
738 if (args_info
->chroot_orig
)
739 free (args_info
->chroot_orig
); /* free previous string */
740 args_info
->chroot_orig
= gengetopt_strdup (optarg
);
742 /* Change to the specified UID. */
743 else if (strcmp (long_options
[option_index
].name
, "uid") == 0)
745 if (local_args_info
.uid_given
)
747 fprintf (stderr
, "%s: `--uid' option given more than once%s\n", argv
[0], (additional_error
? additional_error
: ""));
750 if (args_info
->uid_given
&& ! override
)
752 local_args_info
.uid_given
= 1;
753 args_info
->uid_given
= 1;
754 args_info
->uid_arg
= strtol (optarg
, &stop_char
, 0);
755 if (!(stop_char
&& *stop_char
== '\0')) {
756 fprintf(stderr
, "%s: invalid numeric value: %s\n", argv
[0], optarg
);
759 if (args_info
->uid_orig
)
760 free (args_info
->uid_orig
); /* free previous string */
761 args_info
->uid_orig
= gengetopt_strdup (optarg
);
763 /* Change to the specified username. */
764 else if (strcmp (long_options
[option_index
].name
, "username") == 0)
766 if (local_args_info
.username_given
)
768 fprintf (stderr
, "%s: `--username' option given more than once%s\n", argv
[0], (additional_error
? additional_error
: ""));
771 if (args_info
->username_given
&& ! override
)
773 local_args_info
.username_given
= 1;
774 args_info
->username_given
= 1;
775 if (args_info
->username_arg
)
776 free (args_info
->username_arg
); /* free previous string */
777 args_info
->username_arg
= gengetopt_strdup (optarg
);
778 if (args_info
->username_orig
)
779 free (args_info
->username_orig
); /* free previous string */
780 args_info
->username_orig
= gengetopt_strdup (optarg
);
782 /* Add the specified GID. */
783 else if (strcmp (long_options
[option_index
].name
, "gid") == 0)
785 local_args_info
.gid_given
++;
787 multi_token
= get_multiple_arg_token(optarg
);
788 multi_next
= get_multiple_arg_token_next (optarg
);
792 gid_new
= (struct int_list
*) malloc (sizeof (struct int_list
));
793 gid_new
->next
= gid_list
;
795 gid_new
->arg
= strtol (multi_token
, &stop_char
, 0);
796 if (!(stop_char
&& *stop_char
== '\0')) {
797 fprintf(stderr
, "%s: invalid numeric value: %s\n", argv
[0], multi_token
);
800 gid_new
->orig
= multi_token
;
804 multi_token
= get_multiple_arg_token(multi_next
);
805 multi_next
= get_multiple_arg_token_next (multi_next
);
806 local_args_info
.gid_given
++;
813 /* Add the specified group. */
814 else if (strcmp (long_options
[option_index
].name
, "groupname") == 0)
816 local_args_info
.groupname_given
++;
818 multi_token
= get_multiple_arg_token(optarg
);
819 multi_next
= get_multiple_arg_token_next (optarg
);
823 groupname_new
= (struct string_list
*) malloc (sizeof (struct string_list
));
824 groupname_new
->next
= groupname_list
;
825 groupname_list
= groupname_new
;
826 groupname_new
->arg
= gengetopt_strdup (multi_token
);
827 groupname_new
->orig
= multi_token
;
831 multi_token
= get_multiple_arg_token(multi_next
);
832 multi_next
= get_multiple_arg_token_next (multi_next
);
833 local_args_info
.groupname_given
++;
841 else if (strcmp (long_options
[option_index
].name
, "daemonize") == 0)
843 if (local_args_info
.daemonize_given
)
845 fprintf (stderr
, "%s: `--daemonize' option given more than once%s\n", argv
[0], (additional_error
? additional_error
: ""));
848 if (args_info
->daemonize_given
&& ! override
)
850 local_args_info
.daemonize_given
= 1;
851 args_info
->daemonize_given
= 1;
852 args_info
->daemonize_flag
= !(args_info
->daemonize_flag
);
854 /* Set an alarm after the specified delay. */
855 else if (strcmp (long_options
[option_index
].name
, "alarm") == 0)
857 if (local_args_info
.alarm_given
)
859 fprintf (stderr
, "%s: `--alarm' option given more than once%s\n", argv
[0], (additional_error
? additional_error
: ""));
862 if (args_info
->alarm_given
&& ! override
)
864 local_args_info
.alarm_given
= 1;
865 args_info
->alarm_given
= 1;
866 args_info
->alarm_arg
= strtol (optarg
, &stop_char
, 0);
867 if (!(stop_char
&& *stop_char
== '\0')) {
868 fprintf(stderr
, "%s: invalid numeric value: %s\n", argv
[0], optarg
);
871 if (args_info
->alarm_orig
)
872 free (args_info
->alarm_orig
); /* free previous string */
873 args_info
->alarm_orig
= gengetopt_strdup (optarg
);
877 case '?': /* Invalid option. */
878 /* `getopt_long' already printed an error message. */
881 default: /* bug: option not considered. */
882 fprintf (stderr
, "%s: option unknown: %c%s\n", CMDLINE_PARSER_PACKAGE
, c
, (additional_error
? additional_error
: ""));
888 if (local_args_info
.mask_given
&& mask_list
)
890 struct int_list
*tmp
;
891 args_info
->mask_arg
= (int *) realloc (args_info
->mask_arg
, (args_info
->mask_given
+ local_args_info
.mask_given
) * sizeof (int));
892 args_info
->mask_orig
= (char **) realloc (args_info
->mask_orig
, (args_info
->mask_given
+ local_args_info
.mask_given
) * sizeof (char *));
893 for (i
= (local_args_info
.mask_given
- 1); i
>= 0; --i
)
896 args_info
->mask_arg
[i
+ args_info
->mask_given
] = mask_list
->arg
;
897 args_info
->mask_orig
[i
+ args_info
->mask_given
] = mask_list
->orig
;
898 mask_list
= mask_list
->next
;
903 if (local_args_info
.gid_given
&& gid_list
)
905 struct int_list
*tmp
;
906 args_info
->gid_arg
= (int *) realloc (args_info
->gid_arg
, (args_info
->gid_given
+ local_args_info
.gid_given
) * sizeof (int));
907 args_info
->gid_orig
= (char **) realloc (args_info
->gid_orig
, (args_info
->gid_given
+ local_args_info
.gid_given
) * sizeof (char *));
908 for (i
= (local_args_info
.gid_given
- 1); i
>= 0; --i
)
911 args_info
->gid_arg
[i
+ args_info
->gid_given
] = gid_list
->arg
;
912 args_info
->gid_orig
[i
+ args_info
->gid_given
] = gid_list
->orig
;
913 gid_list
= gid_list
->next
;
918 if (local_args_info
.groupname_given
&& groupname_list
)
920 struct string_list
*tmp
;
921 args_info
->groupname_arg
= (char * *) realloc (args_info
->groupname_arg
, (args_info
->groupname_given
+ local_args_info
.groupname_given
) * sizeof (char *));
922 args_info
->groupname_orig
= (char **) realloc (args_info
->groupname_orig
, (args_info
->groupname_given
+ local_args_info
.groupname_given
) * sizeof (char *));
923 for (i
= (local_args_info
.groupname_given
- 1); i
>= 0; --i
)
925 tmp
= groupname_list
;
926 args_info
->groupname_arg
[i
+ args_info
->groupname_given
] = groupname_list
->arg
;
927 args_info
->groupname_orig
[i
+ args_info
->groupname_given
] = groupname_list
->orig
;
928 groupname_list
= groupname_list
->next
;
934 args_info
->mask_given
+= local_args_info
.mask_given
;
935 local_args_info
.mask_given
= 0;
936 args_info
->gid_given
+= local_args_info
.gid_given
;
937 local_args_info
.gid_given
= 0;
938 args_info
->groupname_given
+= local_args_info
.groupname_given
;
939 local_args_info
.groupname_given
= 0;
943 error
+= cmdline_parser_required2 (args_info
, argv
[0], additional_error
);
946 cmdline_parser_release (&local_args_info
);
949 return (EXIT_FAILURE
);
954 int found_prog_name
= 0;
955 /* whether program name, i.e., argv[0], is in the remaining args
956 (this may happen with some implementations of getopt,
957 but surely not with the one included by gengetopt) */
961 if (argv
[i
++] == argv
[0]) {
967 args_info
->inputs_num
= argc
- optind
- found_prog_name
;
969 (char **)(malloc ((args_info
->inputs_num
)*sizeof(char *))) ;
970 while (optind
< argc
)
971 if (argv
[optind
++] != argv
[0])
972 args_info
->inputs
[ i
++ ] = gengetopt_strdup (argv
[optind
-1]) ;
980 struct int_list
*tmp
;
984 free (mask_list
->orig
);
985 mask_list
= mask_list
->next
;
991 struct int_list
*tmp
;
995 free (gid_list
->orig
);
996 gid_list
= gid_list
->next
;
1002 struct string_list
*tmp
;
1003 while (groupname_list
)
1005 tmp
= groupname_list
;
1006 free (groupname_list
->arg
);
1007 free (groupname_list
->orig
);
1008 groupname_list
= groupname_list
->next
;
1013 cmdline_parser_release (&local_args_info
);
1014 return (EXIT_FAILURE
);