New (yet inofficial) -as mkisofs options -hfs-bless and -hfs-bless-by
This commit is contained in:
@ -3518,3 +3518,79 @@ failure:
|
||||
return(0);
|
||||
}
|
||||
|
||||
/*
|
||||
@param node
|
||||
If node is NULL and path is empty, then the blessing will be
|
||||
revoked from any node which bears it.
|
||||
@param flag
|
||||
Bitfield for control purposes.
|
||||
bit0= Revoke blessing if node != NULL bears it.
|
||||
bit1= Revoke any blessing of the node, regardless of parameter
|
||||
blessing. If node is NULL, then revoke all blessings in opts.
|
||||
*/
|
||||
int Xorriso_hfsplus_bless(struct XorrisO *xorriso, char *path,
|
||||
void *in_node, char *blessing, int flag)
|
||||
{
|
||||
int ret;
|
||||
IsoNode *node;
|
||||
IsoImage *volume= NULL;
|
||||
enum IsoHfsplusBlessings bless_code = ISO_HFSPLUS_BLESS_MAX; /* = invalid */
|
||||
|
||||
if(in_node == NULL && path[0]) {
|
||||
ret= Xorriso_node_from_path(xorriso, NULL, path, &node, 0);
|
||||
if(ret <= 0)
|
||||
return(ret);
|
||||
} else
|
||||
node= (IsoNode *) in_node;
|
||||
ret= Xorriso_get_volume(xorriso, &volume, 0);
|
||||
if(ret <= 0)
|
||||
return(ret);
|
||||
|
||||
if(strcmp(blessing, "ppc_bootdir") == 0 ||
|
||||
strcmp(blessing, "p") == 0 || strcmp(blessing, "P") == 0)
|
||||
bless_code= ISO_HFSPLUS_BLESS_PPC_BOOTDIR;
|
||||
else if(strcmp(blessing, "intel_bootfile") == 0 ||
|
||||
strcmp(blessing, "i") == 0 || strcmp(blessing, "I") == 0)
|
||||
bless_code= ISO_HFSPLUS_BLESS_INTEL_BOOTFILE;
|
||||
else if(strcmp(blessing, "show_folder") == 0 ||
|
||||
strcmp(blessing, "s") == 0 || strcmp(blessing, "S") == 0)
|
||||
bless_code= ISO_HFSPLUS_BLESS_SHOWFOLDER;
|
||||
else if(strcmp(blessing, "os9_folder") == 0 ||
|
||||
strcmp(blessing, "9") == 0)
|
||||
bless_code= ISO_HFSPLUS_BLESS_OS9_FOLDER;
|
||||
else if(strcmp(blessing, "osx_folder") == 0 ||
|
||||
strcmp(blessing, "x") == 0 || strcmp(blessing, "X") == 0)
|
||||
bless_code= ISO_HFSPLUS_BLESS_OSX_FOLDER;
|
||||
else {
|
||||
sprintf(xorriso->info_text, "Unknown blessing type ");
|
||||
Text_shellsafe(blessing, xorriso->info_text, 1);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
return(0);
|
||||
}
|
||||
|
||||
ret= iso_image_hfsplus_bless(volume, bless_code, node, flag & 3);
|
||||
Xorriso_process_msg_queues(xorriso, 0);
|
||||
if(ret == 0 && path[0]) {
|
||||
if((flag & 3)) {
|
||||
sprintf(xorriso->info_text,
|
||||
"Attempt to revoke blessing of unblessed file");
|
||||
} else {
|
||||
sprintf(xorriso->info_text,
|
||||
"Multiple blessing to same file or inappropriate file type");
|
||||
}
|
||||
if(path[0]) {
|
||||
strcat(xorriso->info_text, ": ");
|
||||
Text_shellsafe(path, xorriso->info_text, 1);
|
||||
}
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
return(0);
|
||||
} else if (ret < 0) {
|
||||
Xorriso_report_iso_error(xorriso, "", ret,
|
||||
"Error when trying to bless a file",
|
||||
0, "FAILURE", 1);
|
||||
return(0);
|
||||
}
|
||||
Xorriso_set_change_pending(xorriso, 0);
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user