Avoiding a potential memory leak in xorriso main()

This commit is contained in:
Thomas Schmitt 2009-09-16 16:23:21 +00:00
parent 22e2d6d12d
commit 7a1f61afaa
3 changed files with 25 additions and 5 deletions

View File

@ -20077,6 +20077,7 @@ int main(int argc, char **argv)
{
int ret, i;
struct XorrisO *xorriso= NULL;
char **orig_argv= NULL;
if(strcmp(Xorriso_main_program_versioN, Xorriso_program_versioN)) {
yell_xorriso();
@ -20131,6 +20132,7 @@ int main(int argc, char **argv)
exit(5);
/* Interpret program arguments */
orig_argv= argv;
ret= Xorriso_program_arg_bsl(xorriso, argc, &argv, 0);
if(ret <= 0)
exit(5);
@ -20154,6 +20156,12 @@ end_sucessfully:;
ret= Xorriso_make_return_value(xorriso, 0);
Xorriso_process_errfile(xorriso, 0, "xorriso end", 0, 1);
Xorriso_destroy(&xorriso, 1);
if(orig_argv != argv && orig_argv != NULL) {
for(i= 0; i < argc; i++)
if(argv[i] != NULL)
free(argv[i]);
free(argv);
}
exit(ret);
}

View File

@ -36,10 +36,14 @@ char *Xorriso__get_version_text(int flag);
@param progname typically argv[0] of main(). Some leafnames of the progname
path have special meaning and trigger special behavior:
"osirrox" allows image-to-disk copying: -osirrox "on"
"xorrisofs" activates permanent mkisofs emulation
"xorrisofs" activates -as "mkisofs" emulation from start
"genisofs" alias of "xorrisofs"
"mkisofs" alias of "xorrisofs"
"genisoimage" alias of "xorrisofs"
"xorrecord" activates -as "cdrecord" emulation from start
"cdrecord" alias of "xorrecord"
"wodim" alias of "xorrecord"
"cdrskin" alias of "xorrecord"
@param flag unused yet, submit 0
@return >0 success , <=0 failure, no object created
*/
@ -102,6 +106,12 @@ int Xorriso_read_rc(struct XorrisO *xorriso, int flag);
@param argc Number of arguments.
@param argv The arguments. (*argv)[0] contains the program name.
(*argv)[1] to (*argv)[argc-1] contain commands and parameters
If argv after the call differs from argv before the call,
then one should dispose it later by:
for(i= 0; i < argc; i++)
if(argv[i] != NULL)
free(argv[i]);
free(argv);
@param flag unused yet, submit 0
@return <= 0 error , > 0 success
*/
@ -258,8 +268,7 @@ int Xorriso_set_problem_status(struct XorrisO *xorriso, char *severity,
/* The next two functions are part of Xorriso_eval_problem_status().
You may use them to build an own advisor function or to drain the
library message queues more frequently.
You may use them to build an own advisor function.
*/
/** Obtain the current problem status of the xorriso handle.
@ -277,7 +286,10 @@ int Xorriso_get_problem_status(struct XorrisO *xorriso, char severity[80],
the severity of the library events like the severity of a message submitted
via Xorriso_msgs_submit().
xorriso sets the message queues of the libraries to queuing "ALL".
So it is essential that they get drained regularly.
Many inner functions of xorriso call Xorriso_process_msg_queues() on their
own because they expect library output pending. Nevertheless, a loop of
xorriso option calls should either call Xorriso_eval_problem_status() or
Xorriso_process_msg_queues() with each cycle.
@param xorriso The environment handle
@param flag Unused yet. Submit 0.
@return 1 on success, <=0 if failure

View File

@ -1 +1 @@
#define Xorriso_timestamP "2009.09.13.095136"
#define Xorriso_timestamP "2009.09.16.162424"