New (yet inofficial) -find tests -has_hfs_crtp, has_hfs_bless
This commit is contained in:
parent
9e2e34fc9b
commit
61f46d5e4d
@ -948,6 +948,51 @@ int Findjob_set_filter_filter(struct FindjoB *o, int value, int flag)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int Findjob_set_crtp_filter(struct FindjoB *o, char *creator, char *hfs_type,
|
||||||
|
int flag)
|
||||||
|
{
|
||||||
|
struct ExprtesT *t;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret= Findjob_default_and(o, 0);
|
||||||
|
if(ret <= 0)
|
||||||
|
return(ret);
|
||||||
|
|
||||||
|
t= o->cursor->test;
|
||||||
|
t->test_type= 18;
|
||||||
|
t->arg1= calloc(1, strlen(creator) + 1);
|
||||||
|
t->arg2= calloc(1, strlen(hfs_type) + 1);
|
||||||
|
if(t->arg1 == NULL || t->arg2 == NULL)
|
||||||
|
return(-1);
|
||||||
|
strcpy(t->arg1, creator);
|
||||||
|
strcpy(t->arg2, hfs_type);
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int Findjob_set_bless_filter(struct XorrisO *xorriso, struct FindjoB *o,
|
||||||
|
char *blessing, int flag)
|
||||||
|
{
|
||||||
|
struct ExprtesT *t;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret= Findjob_default_and(o, 0);
|
||||||
|
if(ret <= 0)
|
||||||
|
return(ret);
|
||||||
|
|
||||||
|
t= o->cursor->test;
|
||||||
|
t->test_type= 19;
|
||||||
|
t->arg1= calloc(1, sizeof(int));
|
||||||
|
if(t->arg1 == NULL)
|
||||||
|
return(-1);
|
||||||
|
ret= Xorriso_hfsplus_bless(xorriso, "", NULL, blessing, 4 | 8);
|
||||||
|
if(ret <= 0)
|
||||||
|
return(ret);
|
||||||
|
*((int *) t->arg1)= ret - 1;
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int Findjob_set_wanted_node(struct FindjoB *o, void *wanted_node, int flag)
|
int Findjob_set_wanted_node(struct FindjoB *o, void *wanted_node, int flag)
|
||||||
{
|
{
|
||||||
struct ExprtesT *t;
|
struct ExprtesT *t;
|
||||||
|
@ -46,8 +46,8 @@ struct ExprtesT {
|
|||||||
15= -has_md5
|
15= -has_md5
|
||||||
16= -disk_name char *arg1 (regex_t in *arg2)
|
16= -disk_name char *arg1 (regex_t in *arg2)
|
||||||
17= -hidden int *arg1 (bit0=iso_rr, bit1=joliet)
|
17= -hidden int *arg1 (bit0=iso_rr, bit1=joliet)
|
||||||
>>> -has_hfs_crtp
|
18= -has_hfs_crtp char *creator char *type
|
||||||
>>> -has_hfs_bless blessing|any
|
19= -has_hfs_bless int bless_index
|
||||||
*/
|
*/
|
||||||
int test_type;
|
int test_type;
|
||||||
|
|
||||||
@ -223,6 +223,12 @@ int Findjob_set_damage_filter(struct FindjoB *o, int value, int flag);
|
|||||||
|
|
||||||
int Findjob_set_test_hidden(struct FindjoB *o, int mode, int flag);
|
int Findjob_set_test_hidden(struct FindjoB *o, int mode, int flag);
|
||||||
|
|
||||||
|
int Findjob_set_crtp_filter(struct FindjoB *o, char *creator, char *hfs_type,
|
||||||
|
int flag);
|
||||||
|
|
||||||
|
int Findjob_set_bless_filter(struct XorrisO *xorriso, struct FindjoB *o,
|
||||||
|
char *blessing, int flag);
|
||||||
|
|
||||||
|
|
||||||
int Findjob_set_decision(struct FindjoB *o, char *decision, int flag);
|
int Findjob_set_decision(struct FindjoB *o, char *decision, int flag);
|
||||||
|
|
||||||
|
@ -2647,15 +2647,16 @@ return:
|
|||||||
3 = immediate decision : does match
|
3 = immediate decision : does match
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
int value=0, ret, start_lba, end_lba;
|
int value=0, ret, start_lba, end_lba, bless_idx;
|
||||||
int lba_count, *file_end_lbas= NULL, *file_start_lbas= NULL, i, mask;
|
int lba_count, *file_end_lbas= NULL, *file_start_lbas= NULL, i, mask;
|
||||||
void *arg1, *arg2;
|
void *arg1, *arg2;
|
||||||
char ft, *decision, md5[16];
|
char ft, *decision, md5[16], bless_code[17];
|
||||||
regmatch_t name_match;
|
regmatch_t name_match;
|
||||||
off_t damage_start, damage_end, size;
|
off_t damage_start, damage_end, size;
|
||||||
void *xinfo_dummy;
|
void *xinfo_dummy;
|
||||||
IsoNode *node;
|
IsoNode *node;
|
||||||
IsoStream *stream;
|
IsoStream *stream;
|
||||||
|
struct iso_hfsplus_xinfo_data *hfsplus_xinfo;
|
||||||
|
|
||||||
if(ftest == NULL)
|
if(ftest == NULL)
|
||||||
return(1);
|
return(1);
|
||||||
@ -2835,6 +2836,32 @@ return:
|
|||||||
if((!!(mask & 3)) ^ (!!(ret & LIBISO_HIDE_ON_HFSPLUS)))
|
if((!!(mask & 3)) ^ (!!(ret & LIBISO_HIDE_ON_HFSPLUS)))
|
||||||
value= 0;
|
value= 0;
|
||||||
|
|
||||||
|
break; case 18: /* -has_hfs_crtp char *creator char *type */
|
||||||
|
ret= iso_node_get_xinfo(node, iso_hfsplus_xinfo_func,
|
||||||
|
(void **) &hfsplus_xinfo);
|
||||||
|
value= 0;
|
||||||
|
if(ret < 0) {
|
||||||
|
Xorriso_process_msg_queues(xorriso, 0);
|
||||||
|
ret= 0;
|
||||||
|
} else if(ret == 1) {
|
||||||
|
if((strlen(arg1) == 1 ||
|
||||||
|
(strncmp(arg1, (char *) hfsplus_xinfo->creator_code, 4) == 0 &&
|
||||||
|
strlen(arg1) == 4)) &&
|
||||||
|
(strlen(arg2) == 1 ||
|
||||||
|
(strncmp(arg2, (char *) hfsplus_xinfo->type_code, 4) == 0 &&
|
||||||
|
strlen(arg2) == 4)))
|
||||||
|
value= 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
break; case 19: /* -has_hfs_bless int bless_index */
|
||||||
|
value= 0;
|
||||||
|
ret= Xorriso_get_blessing(xorriso, node, &bless_idx, bless_code, 0);
|
||||||
|
if (ret > 0) {
|
||||||
|
if(*((int *) arg1) == (int) ISO_HFSPLUS_BLESS_MAX ||
|
||||||
|
*((int *) arg1) == bless_idx)
|
||||||
|
value= 1;
|
||||||
|
}
|
||||||
|
|
||||||
break; default:
|
break; default:
|
||||||
|
|
||||||
/* >>> complain about unknown test type */;
|
/* >>> complain about unknown test type */;
|
||||||
@ -3516,6 +3543,7 @@ set_error:;
|
|||||||
|
|
||||||
|
|
||||||
/* @param flag bit0= only check creator and hfs_type for compliance.
|
/* @param flag bit0= only check creator and hfs_type for compliance.
|
||||||
|
bit1= with bit0: check for search rather than for setting
|
||||||
*/
|
*/
|
||||||
int Xorriso_hfsplus_file_creator_type(struct XorrisO *xorriso, char *path,
|
int Xorriso_hfsplus_file_creator_type(struct XorrisO *xorriso, char *path,
|
||||||
void *in_node,
|
void *in_node,
|
||||||
@ -3533,6 +3561,15 @@ int Xorriso_hfsplus_file_creator_type(struct XorrisO *xorriso, char *path,
|
|||||||
node= (IsoNode *) in_node;
|
node= (IsoNode *) in_node;
|
||||||
if((creator[0] == 0 && hfs_type[0] == 0) ||
|
if((creator[0] == 0 && hfs_type[0] == 0) ||
|
||||||
strcmp(creator, "--delete") == 0) {
|
strcmp(creator, "--delete") == 0) {
|
||||||
|
if(flag & 2) {
|
||||||
|
strcpy(xorriso->info_text,
|
||||||
|
"HFS+ file creator code for deletion shall be used for searching");
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||||
|
strcpy(xorriso->info_text,
|
||||||
|
"Suitable are strings of length 4 or length 1");
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "HINT", 0);
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
if(flag & 1)
|
if(flag & 1)
|
||||||
return(1);
|
return(1);
|
||||||
ret= iso_node_remove_xinfo(node, iso_hfsplus_xinfo_func);
|
ret= iso_node_remove_xinfo(node, iso_hfsplus_xinfo_func);
|
||||||
@ -3544,11 +3581,19 @@ int Xorriso_hfsplus_file_creator_type(struct XorrisO *xorriso, char *path,
|
|||||||
goto failure;
|
goto failure;
|
||||||
}
|
}
|
||||||
return(1);
|
return(1);
|
||||||
} else if(strlen(creator) != 4 || strlen(hfs_type) != 4) {
|
} else if((strlen(creator) != 4 && !(strlen(creator) == 1 &&
|
||||||
strcat(xorriso->info_text,
|
(flag & 3) == 3)) ||
|
||||||
|
(strlen(hfs_type) != 4 && !(strlen(hfs_type) == 1 &&
|
||||||
|
(flag & 3) == 3))) {
|
||||||
|
if(flag & 2) {
|
||||||
|
strcpy(xorriso->info_text,
|
||||||
|
"HFS+ file creator code or type code for searching are not exactly 1 or 4 characters long");
|
||||||
|
} else {
|
||||||
|
strcpy(xorriso->info_text,
|
||||||
"HFS+ file creator code or type code are not exactly 4 characters long");
|
"HFS+ file creator code or type code are not exactly 4 characters long");
|
||||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
}
|
||||||
return(0);
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||||
|
return(0);
|
||||||
}
|
}
|
||||||
if(flag & 1)
|
if(flag & 1)
|
||||||
return(1);
|
return(1);
|
||||||
@ -3599,7 +3644,8 @@ failure:
|
|||||||
bit1= Revoke any blessing of the node, regardless of parameter
|
bit1= Revoke any blessing of the node, regardless of parameter
|
||||||
blessing. If node is NULL, then revoke all blessings in opts.
|
blessing. If node is NULL, then revoke all blessings in opts.
|
||||||
bit2= Only check parameter blessing.
|
bit2= Only check parameter blessing.
|
||||||
Return 1 instead of issueing the blessing.
|
Return blessing index + 1 instead of issueing the blessing.
|
||||||
|
bit3= Allow blessing "any" and map to index ISO_HFSPLUS_BLESS_MAX
|
||||||
*/
|
*/
|
||||||
int Xorriso_hfsplus_bless(struct XorrisO *xorriso, char *path,
|
int Xorriso_hfsplus_bless(struct XorrisO *xorriso, char *path,
|
||||||
void *in_node, char *blessing, int flag)
|
void *in_node, char *blessing, int flag)
|
||||||
@ -3609,16 +3655,6 @@ int Xorriso_hfsplus_bless(struct XorrisO *xorriso, char *path,
|
|||||||
IsoImage *volume= NULL;
|
IsoImage *volume= NULL;
|
||||||
enum IsoHfsplusBlessings bless_code = ISO_HFSPLUS_BLESS_MAX; /* = invalid */
|
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 ||
|
if(strcmp(blessing, "ppc_bootdir") == 0 ||
|
||||||
strcmp(blessing, "p") == 0 || strcmp(blessing, "P") == 0)
|
strcmp(blessing, "p") == 0 || strcmp(blessing, "P") == 0)
|
||||||
bless_code= ISO_HFSPLUS_BLESS_PPC_BOOTDIR;
|
bless_code= ISO_HFSPLUS_BLESS_PPC_BOOTDIR;
|
||||||
@ -3634,15 +3670,28 @@ int Xorriso_hfsplus_bless(struct XorrisO *xorriso, char *path,
|
|||||||
else if(strcmp(blessing, "osx_folder") == 0 ||
|
else if(strcmp(blessing, "osx_folder") == 0 ||
|
||||||
strcmp(blessing, "x") == 0 || strcmp(blessing, "X") == 0)
|
strcmp(blessing, "x") == 0 || strcmp(blessing, "X") == 0)
|
||||||
bless_code= ISO_HFSPLUS_BLESS_OSX_FOLDER;
|
bless_code= ISO_HFSPLUS_BLESS_OSX_FOLDER;
|
||||||
|
else if((flag & 8) && (flag & 4) &&
|
||||||
|
(strcmp(blessing, "any") == 0 ||
|
||||||
|
strcmp(blessing, "a") == 0 || strcmp(blessing, "A") == 0))
|
||||||
|
bless_code= ISO_HFSPLUS_BLESS_MAX;
|
||||||
else {
|
else {
|
||||||
sprintf(xorriso->info_text, "Unknown blessing type ");
|
sprintf(xorriso->info_text, "Unknown blessing type ");
|
||||||
Text_shellsafe(blessing, xorriso->info_text, 1);
|
Text_shellsafe(blessing, xorriso->info_text, 1);
|
||||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(flag & 4)
|
if(flag & 4)
|
||||||
return(1);
|
return(1 + bless_code);
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
ret= iso_image_hfsplus_bless(volume, bless_code, node, flag & 3);
|
ret= iso_image_hfsplus_bless(volume, bless_code, node, flag & 3);
|
||||||
Xorriso_process_msg_queues(xorriso, 0);
|
Xorriso_process_msg_queues(xorriso, 0);
|
||||||
@ -3705,6 +3754,7 @@ int Xorriso_get_blessing(struct XorrisO *xorriso, IsoNode *node,
|
|||||||
break; default:
|
break; default:
|
||||||
strcpy(bless_code, "unknown_blessing");
|
strcpy(bless_code, "unknown_blessing");
|
||||||
}
|
}
|
||||||
|
*bless_idx= i;
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -796,6 +796,28 @@ not_enough_arguments:;
|
|||||||
goto sorry_ex;
|
goto sorry_ex;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if(strcmp(argv[i], "-has_hfs_crtp")==0) {
|
||||||
|
if(i + 2 >= end_idx)
|
||||||
|
goto not_enough_arguments;
|
||||||
|
i+= 2;
|
||||||
|
|
||||||
|
ret= Xorriso_hfsplus_file_creator_type(xorriso, "", NULL,
|
||||||
|
argv[i - 1], argv[i], 3);
|
||||||
|
|
||||||
|
ret= Findjob_set_crtp_filter(job, argv[i - 1], argv[i], 0);
|
||||||
|
if(ret <= 0) {
|
||||||
|
sprintf(xorriso->info_text, "-findi: cannot setup -has_hfs_crtp test");
|
||||||
|
goto sorry_ex;
|
||||||
|
}
|
||||||
|
} else if(strcmp(argv[i], "-has_hfs_bless")==0) {
|
||||||
|
if(i + 1 >= end_idx)
|
||||||
|
goto not_enough_arguments;
|
||||||
|
i+= 1;
|
||||||
|
ret= Findjob_set_bless_filter(xorriso, job, argv[i], 0);
|
||||||
|
if(ret <= 0) {
|
||||||
|
sprintf(xorriso->info_text, "-findi: cannot setup -has_hfs_bless test");
|
||||||
|
goto sorry_ex;
|
||||||
|
}
|
||||||
} else if(strcmp(argv[i], "-true") == 0) {
|
} else if(strcmp(argv[i], "-true") == 0) {
|
||||||
ret= Findjob_set_false(job, -1, 0);
|
ret= Findjob_set_false(job, -1, 0);
|
||||||
} else if(strcmp(argv[i], "-false") == 0) {
|
} else if(strcmp(argv[i], "-false") == 0) {
|
||||||
|
@ -1 +1 @@
|
|||||||
#define Xorriso_timestamP "2012.05.30.153449"
|
#define Xorriso_timestamP "2012.05.31.070528"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user