New option -read_mkisofsrc interprets .mkisofsrc

This commit is contained in:
2010-06-25 17:59:01 +00:00
parent 6ab8ffc137
commit 10233adb87
12 changed files with 298 additions and 76 deletions

View File

@ -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);
}