New option -read_mkisofsrc interprets .mkisofsrc
This commit is contained in:
@ -449,7 +449,8 @@ int Xorriso_count_args(struct XorrisO *xorriso, int argc, char **argv,
|
||||
"ban_stdio_write","close_filter_list","commit","devices","end",
|
||||
"for_backup", "help",
|
||||
"list_formats","no_rc","print_size","pvd_info","pwd","pwdi","pwdx",
|
||||
"rollback","rollback_end","tell_media_space","toc","version",
|
||||
"read_mkisofsrc","rollback","rollback_end",
|
||||
"tell_media_space","toc","version",
|
||||
""
|
||||
};
|
||||
static char arg1_commands[][40]= {
|
||||
@ -1136,6 +1137,9 @@ next_command:;
|
||||
(*idx)++;
|
||||
ret= Xorriso_option_path_list(xorriso, arg1, 1);
|
||||
|
||||
} else if(strcmp(cmd,"read_mkisofsrc")==0) {
|
||||
ret= Xorriso_option_read_mkisofsrc(xorriso, 0);
|
||||
|
||||
} else if(strcmp(cmd,"reassure")==0) {
|
||||
(*idx)++;
|
||||
ret= Xorriso_option_reassure(xorriso, arg1, 0);
|
||||
@ -1594,6 +1598,144 @@ ex:;
|
||||
}
|
||||
|
||||
|
||||
int Xorriso_read_as_mkisofsrc(struct XorrisO *xorriso, char *path, int flag)
|
||||
{
|
||||
int ret, linecount= 0;
|
||||
FILE *fp= NULL;
|
||||
char *sret, line[SfileadrL], *cpt, *wpt;
|
||||
|
||||
ret= Xorriso_afile_fopen(xorriso, path, "rb", &fp, 1 | 2);
|
||||
if(ret <= 0)
|
||||
{ret= 0; goto ex;}
|
||||
while(1) {
|
||||
sret= Sfile_fgets_n(line, SfileadrL - 1, fp, 0);
|
||||
if(sret == NULL) {
|
||||
if(ferror(fp))
|
||||
{ret= 0; goto ex;}
|
||||
break;
|
||||
}
|
||||
linecount++;
|
||||
|
||||
/* Interpret line */
|
||||
if(line[0] == 0 || line[0] == '#')
|
||||
continue;
|
||||
cpt= strchr(line, '=');
|
||||
if(cpt == NULL) {
|
||||
|
||||
/* >>> ??? complain ? abort reading ? */;
|
||||
|
||||
continue;
|
||||
}
|
||||
*cpt= 0;
|
||||
/* Names are not case sensitive */
|
||||
for(wpt= line; wpt < cpt; wpt++)
|
||||
if(*wpt >= 'a' && *wpt <= 'z')
|
||||
*wpt= toupper(*wpt);
|
||||
/* Remove trailing whitespace from name */
|
||||
for(wpt= cpt - 1; wpt >= line ; wpt--)
|
||||
if(*wpt == ' ' || *wpt == '\t')
|
||||
*wpt= 0;
|
||||
else
|
||||
break;
|
||||
/* Remove trailing whitespace from value */
|
||||
for(wpt= cpt + 1 + strlen(cpt + 1) - 1; wpt >= cpt; wpt--)
|
||||
if(*wpt == ' ' || *wpt == '\t')
|
||||
*wpt= 0;
|
||||
else
|
||||
break;
|
||||
/* Remove leading whitespace from value */
|
||||
for(cpt++; *cpt == ' ' || *cpt == '\t'; cpt++);
|
||||
|
||||
if(strcmp(line, "APPI") == 0) {
|
||||
ret= Xorriso_option_application_id(xorriso, cpt, 0);
|
||||
} else if(strcmp(line, "COPY") == 0) {
|
||||
|
||||
/* >>> to come: -copyright_file */;
|
||||
|
||||
ret= 1;
|
||||
} else if(strcmp(line, "ABST") == 0) {
|
||||
|
||||
/* >>> to come: -abstract_file */;
|
||||
|
||||
ret= 1;
|
||||
} else if(strcmp(line, "BIBL") == 0) {
|
||||
|
||||
/* >>> to come: -biblio_file */;
|
||||
|
||||
ret= 1;
|
||||
} else if(strcmp(line, "PREP") == 0) {
|
||||
/* Not planned to come */
|
||||
ret= 1;
|
||||
} else if(strcmp(line, "PUBL") == 0) {
|
||||
ret= Xorriso_option_publisher(xorriso, cpt, 0);
|
||||
} else if(strcmp(line, "SYSI") == 0) {
|
||||
ret= Xorriso_option_system_id(xorriso, cpt, 0);
|
||||
} else if(strcmp(line, "VOLI") == 0) {
|
||||
ret= Xorriso_option_volid(xorriso, cpt, 1);
|
||||
} else if(strcmp(line, "VOLS") == 0) {
|
||||
ret= Xorriso_option_volset_id(xorriso, cpt, 0);
|
||||
} else if(strcmp(line, "HFS_TYPE") == 0) {
|
||||
/* Not planned to come */
|
||||
ret= 1;
|
||||
} else if(strcmp(line, "HFS_CREATOR") == 0) {
|
||||
/* Not planned to come */
|
||||
ret= 1;
|
||||
} else {
|
||||
|
||||
/* >>> ??? complain ? abort reading ? */;
|
||||
|
||||
}
|
||||
}
|
||||
xorriso->mkisofsrc_done= 1;
|
||||
ret= 1;
|
||||
ex:
|
||||
if(fp != NULL)
|
||||
fclose(fp);
|
||||
return(ret);
|
||||
}
|
||||
|
||||
|
||||
/* ./.mkisofsrc , getenv("MKISOFSRC") ,
|
||||
$HOME/.mkisofsrc , $(basename $0)/.mkisofsrc
|
||||
*/
|
||||
int Xorriso_read_mkisofsrc(struct XorrisO *xorriso, int flag)
|
||||
{
|
||||
char path[SfileadrL], *cpt;
|
||||
int ret;
|
||||
|
||||
ret= Xorriso_read_as_mkisofsrc(xorriso, "./.mkisofsrc", 0);
|
||||
if(ret > 0)
|
||||
return(ret);
|
||||
cpt= getenv("MKISOFSRC");
|
||||
if(cpt != NULL) {
|
||||
strncpy(path, cpt, SfileadrL - 1);
|
||||
path[SfileadrL - 1]= 0;
|
||||
ret= Xorriso_read_as_mkisofsrc(xorriso, path, 0);
|
||||
if(ret > 0)
|
||||
return(ret);
|
||||
}
|
||||
cpt= getenv("HOME");
|
||||
if(cpt != NULL) {
|
||||
strncpy(path, cpt, SfileadrL - 1 - 11);
|
||||
path[SfileadrL - 1 - 11]= 0;
|
||||
strcat(path, "/.mkisofsrc");
|
||||
ret= Xorriso_read_as_mkisofsrc(xorriso, path, 0);
|
||||
if(ret > 0)
|
||||
return(ret);
|
||||
}
|
||||
strcpy(path, xorriso->progname);
|
||||
cpt= strrchr(path, '/');
|
||||
if(cpt != NULL) {
|
||||
strcpy(cpt + 1, ".mkisofsrc");
|
||||
ret= Xorriso_read_as_mkisofsrc(xorriso, path, 0);
|
||||
if(ret > 0)
|
||||
return(ret);
|
||||
}
|
||||
/* no .mkisofsrc file found */
|
||||
return(2);
|
||||
}
|
||||
|
||||
|
||||
int Xorriso_read_rc(struct XorrisO *xorriso, int flag)
|
||||
{
|
||||
int ret,i,was_failure= 0,fret;
|
||||
@ -1618,6 +1760,11 @@ int Xorriso_read_rc(struct XorrisO *xorriso, int flag)
|
||||
continue;
|
||||
return(ret);
|
||||
}
|
||||
if(xorriso->argument_emulation == 1 && !xorriso->mkisofsrc_done) {
|
||||
ret= Xorriso_read_mkisofsrc(xorriso, 0);
|
||||
if(ret <= 0)
|
||||
was_failure= 1;
|
||||
}
|
||||
return(!was_failure);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user