Gave up adjustability of Signature Word "AA" in specs and implementation.
This commit is contained in:
parent
b600757649
commit
84c100c2f5
@ -3,7 +3,7 @@
|
|||||||
Arbitrary Attribute Interchange Protocol
|
Arbitrary Attribute Interchange Protocol
|
||||||
|
|
||||||
Draft version 0.2
|
Draft version 0.2
|
||||||
Jan 26 2008
|
Jan 30 2008
|
||||||
|
|
||||||
Interchange of Persistent File Attributes
|
Interchange of Persistent File Attributes
|
||||||
|
|
||||||
@ -19,24 +19,23 @@ Goal is to have for each file an arbitrary number of attributes which consist
|
|||||||
of two components (Name and Value) of arbitrary length and to have a compact
|
of two components (Name and Value) of arbitrary length and to have a compact
|
||||||
representation of ACLs.
|
representation of ACLs.
|
||||||
|
|
||||||
This document describes a SUSP entry with adjustable name (Signature Word).
|
This document describes a SUSP entry with Signature Word "AA" which collides
|
||||||
The name is defined in an ER entry of which the content form is described here.
|
neither with SUSP 1.12 nor with RRIP 1.12. The AA entry has been designed
|
||||||
Recommended is to use the name "AA" which collides neither with SUSP 1.12 nor
|
to be as similar to the RRIP entry SL as possible.
|
||||||
with RRIP 1.12.
|
The presence of AAIP shall be announced by a particular ER entry.
|
||||||
The entry has been designed to be as similar to the RRIP entry SL as possible.
|
|
||||||
|
|
||||||
Since the size of a SUSP entry is limited to 255, multiple entries may be
|
Since the size of a SUSP entry is limited to 255, multiple entries may be
|
||||||
needed to describe one component. The CE mechanism of SUSP shall be used to
|
needed to describe one component. The CE mechanism of SUSP shall be used to
|
||||||
address enough storage if needed.
|
address enough storage if needed.
|
||||||
|
|
||||||
The SUSP entry and the ER entry of AAIP shall only be present if the ER entry
|
The AA entry and the ER entry of AAIP shall only be present if the ER entry
|
||||||
of RRIP is present.
|
of RRIP is present.
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
|
|
||||||
System Entries Provided by this Specification
|
System Entries Provided by this Specification
|
||||||
|
|
||||||
* AA (or another name which does not disturb other co-existing SUSP protocols)
|
* AA
|
||||||
|
|
||||||
Description of the "AA" System Use Entry
|
Description of the "AA" System Use Entry
|
||||||
|
|
||||||
@ -52,13 +51,12 @@ ALCs. The meaning of any other name is not specified by this document.
|
|||||||
All AA entries except the last one shall have the CONTINUE flag set. An AA
|
All AA entries except the last one shall have the CONTINUE flag set. An AA
|
||||||
entry with CONTINUE set to 0 indicates the end of the Attribute List.
|
entry with CONTINUE set to 0 indicates the end of the Attribute List.
|
||||||
|
|
||||||
The format of the "AA" System Use Field is as follows:
|
The format of the AA System Use Field is as follows:
|
||||||
|
|
||||||
[1] "BP 1 to BP 2 - Signature Word" shall be (41)(41) ("AA") resp. the word
|
[1] "BP 1 to BP 2 - Signature Word" shall be (41)(41) ("AA").
|
||||||
that is defined in the ER entry. See below.
|
|
||||||
|
|
||||||
[2] "BP 3 - Length" shall specify as an 8-bit number the length in bytes of
|
[2] "BP 3 - Length" shall specify as an 8-bit number the length in bytes of
|
||||||
the "AA" entry recorded according to ISO 9660:7.1.1.
|
the AA entry recorded according to ISO 9660:7.1.1.
|
||||||
|
|
||||||
[3] "BP 4 - System Use Entry Version" shall be 1 as in ISO 9660:7.1.1.
|
[3] "BP 4 - System Use Entry Version" shall be 1 as in ISO 9660:7.1.1.
|
||||||
|
|
||||||
@ -73,7 +71,7 @@ The format of the "AA" System Use Field is as follows:
|
|||||||
| 'A' | 'A' | LENGTH | 1 | FLAGS | COMPONENT AREA |
|
| 'A' | 'A' | LENGTH | 1 | FLAGS | COMPONENT AREA |
|
||||||
|
|
||||||
|
|
||||||
Within "AA" entries each component (Name or Value) shall be recorded as one
|
Within AA entries each component (Name or Value) shall be recorded as one
|
||||||
or more component records. If a component does not fit into the remaining
|
or more component records. If a component does not fit into the remaining
|
||||||
space of an AA entry then it shall be continued in following AA entries.
|
space of an AA entry then it shall be continued in following AA entries.
|
||||||
|
|
||||||
@ -90,8 +88,8 @@ In case of discrepancies, RRIP 1.12 is the decisive specification.
|
|||||||
|
|
||||||
Component Records shall be recorded contiguously within each Component Area,
|
Component Records shall be recorded contiguously within each Component Area,
|
||||||
starting in the first byte of the Component Area. The last Component Record
|
starting in the first byte of the Component Area. The last Component Record
|
||||||
in the Component Area of an "AA" System Use Entry may be continued in the
|
in the Component Area of an AA System Use Entry may be continued in the
|
||||||
Component Area of the next recorded "AA" System Use Entry in the same
|
Component Area of the next recorded AA System Use Entry in the same
|
||||||
System Use Area.
|
System Use Area.
|
||||||
|
|
||||||
Each Component Record shall have the following format:
|
Each Component Record shall have the following format:
|
||||||
@ -100,18 +98,8 @@ Each Component Record shall have the following format:
|
|||||||
starting with the least significant bit, as follows:
|
starting with the least significant bit, as follows:
|
||||||
0 CONTINUE This Component Record continues in the next
|
0 CONTINUE This Component Record continues in the next
|
||||||
AA Component Record.
|
AA Component Record.
|
||||||
The following bits are defined but may not be set if the Component
|
|
||||||
Record shall carry payload. (Their use case is unclear yet.)
|
|
||||||
1 CURRENT This Component Record refers to the current
|
|
||||||
directory.
|
|
||||||
2 PARENT This Component Record refers to the parent of
|
|
||||||
the current directory.
|
|
||||||
3 ROOT This Component Record refers to root directory.
|
|
||||||
|
|
||||||
all others are RESERVED and shall be 0.
|
all others are RESERVED and shall be 0.
|
||||||
|
|
||||||
No more than one of "AA" Component Flag Bits 0-3 shall be set to ONE.
|
|
||||||
|
|
||||||
[B] "BP 2 - Component Length (LEN_CP)" shall specify as an 8-bit number the
|
[B] "BP 2 - Component Length (LEN_CP)" shall specify as an 8-bit number the
|
||||||
number of component bytes in the Component Record. This length shall not
|
number of component bytes in the Component Record. This length shall not
|
||||||
include the first two bytes of the Component Record.
|
include the first two bytes of the Component Record.
|
||||||
@ -281,7 +269,7 @@ Example: User id number 1001 gets associated with user name "lisa"
|
|||||||
Specification of the ER System Use Entry Values for AAIP:
|
Specification of the ER System Use Entry Values for AAIP:
|
||||||
|
|
||||||
This ER system entry shall only be present if the ER entry of RRIP is present.
|
This ER system entry shall only be present if the ER entry of RRIP is present.
|
||||||
To be compliant with SUSP-1.12, this ER entry must be present if AAIP entries
|
To be compliant with SUSP-1.12, this ER entry must be present if AA entries
|
||||||
are present, and ES entries have to mark RRIP and AAIP entries.
|
are present, and ES entries have to mark RRIP and AAIP entries.
|
||||||
If for some reason compliance with SUSP-1.10 is intended, then this ER entry
|
If for some reason compliance with SUSP-1.10 is intended, then this ER entry
|
||||||
and the ES entries must not be present, although SUSP-1.10 would allow ER.
|
and the ES entries must not be present, although SUSP-1.10 would allow ER.
|
||||||
@ -293,7 +281,6 @@ The Extension Identifier field shall be "AAIP_0002" with Identifier Length 9.
|
|||||||
|
|
||||||
The mandatory content form of the Extension Descriptor is
|
The mandatory content form of the Extension Descriptor is
|
||||||
"AA PROVIDES VIA AAIP 0.2 SUPPORT FOR ARBITRARY FILE ATTRIBUTES IN ISO 9660 IMAGES"
|
"AA PROVIDES VIA AAIP 0.2 SUPPORT FOR ARBITRARY FILE ATTRIBUTES IN ISO 9660 IMAGES"
|
||||||
with possibly two letters other than "AA" at the start of the string.
|
|
||||||
The Description Length is 81.
|
The Description Length is 81.
|
||||||
|
|
||||||
The reader of AAIP shall take the actual name of the AA entry from BP 19 and
|
The reader of AAIP shall take the actual name of the AA entry from BP 19 and
|
||||||
@ -325,9 +312,9 @@ It also prescribes that in the case that ER entries of RRIP and AAIP are
|
|||||||
present, then ES entries shall be used to separate RRIP entries from AAIP
|
present, then ES entries shall be used to separate RRIP entries from AAIP
|
||||||
entries.
|
entries.
|
||||||
|
|
||||||
SUSP-1.10 does not specify ES entires at all and allows to have extension
|
SUSP-1.10 does not specify ES entries at all and allows to have extension
|
||||||
entries without announcing them by a ER entry. So if a second ER entry is
|
entries without announcing them by an ER entry. So if a second ER entry is
|
||||||
not bearable, then the SUSP-1.10 downgrade of of AAIP allows to omit the
|
not bearable, then the SUSP-1.10 downgrade of AAIP allows to omit the
|
||||||
AAIP ER and the ES entries. But if there is the AAIP ER then there must be ES
|
AAIP ER and the ES entries. But if there is the AAIP ER then there must be ES
|
||||||
at the appropriate places.
|
at the appropriate places.
|
||||||
|
|
||||||
@ -367,11 +354,6 @@ RRIP 1.12 ftp://ftp.ymi.com/pub/rockridge/rrip112.ps
|
|||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Pending considerations:
|
Pending considerations:
|
||||||
|
|
||||||
- shall "AA" be fixely defined as signature ?
|
|
||||||
|
|
||||||
- shall an "ER" be issued at all ? (SUSP 1.10 would allow to omit)
|
|
||||||
>>> mention ES because of SUSP 1.12
|
|
||||||
|
|
||||||
- shall the tag types ACL_USER and ACL_GROUP with non-numeric qualifier be
|
- shall the tag types ACL_USER and ACL_GROUP with non-numeric qualifier be
|
||||||
revoked ?
|
revoked ?
|
||||||
|
|
||||||
|
@ -51,7 +51,6 @@ static int aaip_encode_pair(char *name, size_t attr_length, char *attr,
|
|||||||
|
|
||||||
|
|
||||||
/* Convert an array of Arbitrary Attributes into a series of AAIP fields.
|
/* Convert an array of Arbitrary Attributes into a series of AAIP fields.
|
||||||
@param aa_name The 2 byte SUSP Signature Word of the fields
|
|
||||||
@param num_attrs Number of attributes
|
@param num_attrs Number of attributes
|
||||||
@param names Array of pointers to 0 terminated name strings
|
@param names Array of pointers to 0 terminated name strings
|
||||||
@param value_lengths Array of byte lengths for each value
|
@param value_lengths Array of byte lengths for each value
|
||||||
@ -65,8 +64,7 @@ static int aaip_encode_pair(char *name, size_t attr_length, char *attr,
|
|||||||
@return >0 is the number of SUSP fields generated,
|
@return >0 is the number of SUSP fields generated,
|
||||||
0 means error
|
0 means error
|
||||||
*/
|
*/
|
||||||
size_t aaip_encode(char aa_name[2],
|
size_t aaip_encode(size_t num_attrs, char **names,
|
||||||
size_t num_attrs, char **names,
|
|
||||||
size_t *value_lengths, char **values,
|
size_t *value_lengths, char **values,
|
||||||
size_t *result_len, unsigned char **result, int flag)
|
size_t *result_len, unsigned char **result, int flag)
|
||||||
{
|
{
|
||||||
@ -107,8 +105,8 @@ size_t aaip_encode(char aa_name[2],
|
|||||||
|
|
||||||
/* write the field headers */
|
/* write the field headers */
|
||||||
for(i= 0; i < number_of_fields; i++) {
|
for(i= 0; i < number_of_fields; i++) {
|
||||||
(*result)[i * 255 + 0]= aa_name[0];
|
(*result)[i * 255 + 0]= 'A';
|
||||||
(*result)[i * 255 + 1]= aa_name[1];
|
(*result)[i * 255 + 1]= 'A';
|
||||||
if(i < number_of_fields - 1 || (mem_size % 255) == 0)
|
if(i < number_of_fields - 1 || (mem_size % 255) == 0)
|
||||||
(*result)[i * 255 + 2]= 255;
|
(*result)[i * 255 + 2]= 255;
|
||||||
else
|
else
|
||||||
@ -776,7 +774,6 @@ int aaip_add_acl_st_mode(char *acl_text, mode_t st_mode, int flag)
|
|||||||
struct aaip_state {
|
struct aaip_state {
|
||||||
|
|
||||||
/* AA field status */
|
/* AA field status */
|
||||||
unsigned char aa_name[2];
|
|
||||||
int aa_head_missing; /* number of bytes needed to complete AA field header */
|
int aa_head_missing; /* number of bytes needed to complete AA field header */
|
||||||
int aa_missing; /* number of bytes needed to complete current AA field */
|
int aa_missing; /* number of bytes needed to complete current AA field */
|
||||||
int aa_ends; /* 0= still AA fields expected, 1= last AA being processed,
|
int aa_ends; /* 0= still AA fields expected, 1= last AA being processed,
|
||||||
@ -835,30 +832,14 @@ size_t aaip_count_bytes(unsigned char *data, int flag)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int aaip_set_signature(char aa_name[2], unsigned char *data, int flag)
|
|
||||||
{
|
|
||||||
int done = 0;
|
|
||||||
unsigned char *aapt;
|
|
||||||
|
|
||||||
for(aapt= data; !done; aapt += aapt[2]) {
|
|
||||||
done = !(aapt[4] & 1);
|
|
||||||
aapt[0] = aa_name[0];
|
|
||||||
aapt[1] = aa_name[1];
|
|
||||||
}
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
size_t aaip_sizeof_aaip_state(void)
|
size_t aaip_sizeof_aaip_state(void)
|
||||||
{
|
{
|
||||||
return((size_t) sizeof(struct aaip_state));
|
return((size_t) sizeof(struct aaip_state));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int aaip_init_aaip_state(struct aaip_state *aaip, char aa_name[2], int flag)
|
int aaip_init_aaip_state(struct aaip_state *aaip, int flag)
|
||||||
{
|
{
|
||||||
aaip->aa_name[0]= aa_name[0];
|
|
||||||
aaip->aa_name[1]= aa_name[1];
|
|
||||||
aaip->aa_head_missing= 5;
|
aaip->aa_head_missing= 5;
|
||||||
aaip->aa_missing= 0;
|
aaip->aa_missing= 0;
|
||||||
|
|
||||||
@ -1152,8 +1133,7 @@ static int aaip_consume_aa_head(struct aaip_state *aaip,
|
|||||||
aaip->aa_head_missing-= todo;
|
aaip->aa_head_missing-= todo;
|
||||||
if(aaip->aa_head_missing == 0) {
|
if(aaip->aa_head_missing == 0) {
|
||||||
aaip_read_from_recs(aaip, aaip->recs_fill - 5, aa_head, 5, 0);
|
aaip_read_from_recs(aaip, aaip->recs_fill - 5, aa_head, 5, 0);
|
||||||
if(aa_head[0] != aaip->aa_name[0] || aa_head[1] != aaip->aa_name[1] ||
|
if(aa_head[0] != 'A' || aa_head[1] != 'A' || aa_head[3] != 1)
|
||||||
aa_head[3] != 1)
|
|
||||||
return(-1);
|
return(-1);
|
||||||
aaip->aa_missing= aa_head[2];
|
aaip->aa_missing= aa_head[2];
|
||||||
aaip->aa_ends= !(aa_head[4] & 1);
|
aaip->aa_ends= !(aa_head[4] & 1);
|
||||||
@ -1601,7 +1581,6 @@ static int aaip_enlarge_buf(struct aaip_state *aaip, size_t memory_limit,
|
|||||||
*handle == NULL. This handle has to be the same as long
|
*handle == NULL. This handle has to be the same as long
|
||||||
as decoding goes on and finally has to be freed by a
|
as decoding goes on and finally has to be freed by a
|
||||||
call with bit15.
|
call with bit15.
|
||||||
@param aa_name The Signature Word (advised is "AA")
|
|
||||||
@param memory_limit Maximum number of bytes to allocate
|
@param memory_limit Maximum number of bytes to allocate
|
||||||
@param num_attr_limit Maximum number of name-value pairs to allocate
|
@param num_attr_limit Maximum number of name-value pairs to allocate
|
||||||
@param data The raw data to decode
|
@param data The raw data to decode
|
||||||
@ -1623,7 +1602,7 @@ static int aaip_enlarge_buf(struct aaip_state *aaip, size_t memory_limit,
|
|||||||
enlarge memory_limit or call with bit15 and give up
|
enlarge memory_limit or call with bit15 and give up
|
||||||
4 limit exceeded, call aaip_get_decoded_attrs() and try again
|
4 limit exceeded, call aaip_get_decoded_attrs() and try again
|
||||||
*/
|
*/
|
||||||
int aaip_decode_attrs(struct aaip_state **handle, char aa_name[2],
|
int aaip_decode_attrs(struct aaip_state **handle,
|
||||||
size_t memory_limit, size_t num_attr_limit,
|
size_t memory_limit, size_t num_attr_limit,
|
||||||
unsigned char *data, size_t num_data, size_t *consumed,
|
unsigned char *data, size_t num_data, size_t *consumed,
|
||||||
int flag)
|
int flag)
|
||||||
@ -1656,7 +1635,7 @@ int aaip_decode_attrs(struct aaip_state **handle, char aa_name[2],
|
|||||||
aaip= *handle= calloc(1, sizeof(struct aaip_state));
|
aaip= *handle= calloc(1, sizeof(struct aaip_state));
|
||||||
if(*handle == NULL)
|
if(*handle == NULL)
|
||||||
return(-1);
|
return(-1);
|
||||||
aaip_init_aaip_state(*handle, aa_name, 0);
|
aaip_init_aaip_state(*handle, 0);
|
||||||
}
|
}
|
||||||
if(aaip->list_names == NULL || aaip->list_values == NULL ||
|
if(aaip->list_names == NULL || aaip->list_values == NULL ||
|
||||||
aaip->list_value_lengths == NULL) {
|
aaip->list_value_lengths == NULL) {
|
||||||
|
@ -18,7 +18,6 @@
|
|||||||
/* --------------------------------- Encoder ---------------------------- */
|
/* --------------------------------- Encoder ---------------------------- */
|
||||||
|
|
||||||
/* Convert an array of Arbitrary Attributes into a series of AAIP fields.
|
/* Convert an array of Arbitrary Attributes into a series of AAIP fields.
|
||||||
@param aa_name The 2 byte SUSP Signature Word of the fields
|
|
||||||
@param num_attrs Number of attributes
|
@param num_attrs Number of attributes
|
||||||
@param names Array of pointers to 0 terminated name strings
|
@param names Array of pointers to 0 terminated name strings
|
||||||
@param value_lengths Array of byte lengths for each value
|
@param value_lengths Array of byte lengths for each value
|
||||||
@ -32,7 +31,7 @@
|
|||||||
@return >0 is the number of SUSP fields generated,
|
@return >0 is the number of SUSP fields generated,
|
||||||
0 means error
|
0 means error
|
||||||
*/
|
*/
|
||||||
size_t aaip_encode(char aa_name[2], size_t num_attrs, char **names,
|
size_t aaip_encode(size_t num_attrs, char **names,
|
||||||
size_t *value_lengths, char **values,
|
size_t *value_lengths, char **values,
|
||||||
size_t *result_len, unsigned char **result, int flag);
|
size_t *result_len, unsigned char **result, int flag);
|
||||||
|
|
||||||
@ -216,17 +215,6 @@ int aaip_get_attr_list(char *path, size_t *num_attrs, char ***names,
|
|||||||
size_t aaip_count_bytes(unsigned char *data, int flag);
|
size_t aaip_count_bytes(unsigned char *data, int flag);
|
||||||
|
|
||||||
|
|
||||||
/* Set the Signature Words of all fields in the AA string to the given
|
|
||||||
two byte values.
|
|
||||||
@param aa_name The Signature Word to be set (advised is "AA").
|
|
||||||
@param data An arbitrary number of bytes beginning with the
|
|
||||||
complete chain of AA fields. Trailing trash is ignored.
|
|
||||||
@param flag Unused yet. Submit 0.
|
|
||||||
@return 1 means succes, <=0 means error
|
|
||||||
*/
|
|
||||||
int aaip_set_signature(char aa_name[2], unsigned char *data, int flag);
|
|
||||||
|
|
||||||
|
|
||||||
/* The AAIP decoder context.
|
/* The AAIP decoder context.
|
||||||
*/
|
*/
|
||||||
struct aaip_state;
|
struct aaip_state;
|
||||||
@ -241,12 +229,11 @@ size_t aaip_sizeof_aaip_state(void);
|
|||||||
This has to be done before the first AA field of a node is processed.
|
This has to be done before the first AA field of a node is processed.
|
||||||
The caller has to provide the storage of the struct aaip_state.
|
The caller has to provide the storage of the struct aaip_state.
|
||||||
@param aaip The AAIP decoder context to be initialized
|
@param aaip The AAIP decoder context to be initialized
|
||||||
@param aa_name The Signature Word (advised is "AA")
|
|
||||||
@param flag Bitfield for control purposes
|
@param flag Bitfield for control purposes
|
||||||
submit 0
|
submit 0
|
||||||
@return <=0 error , >0 ok
|
@return <=0 error , >0 ok
|
||||||
*/
|
*/
|
||||||
int aaip_init_aaip_state(struct aaip_state *aaip, char aa_name[2], int flag);
|
int aaip_init_aaip_state(struct aaip_state *aaip, int flag);
|
||||||
|
|
||||||
|
|
||||||
/* ------------------------- Component Level Interface ------------------- */
|
/* ------------------------- Component Level Interface ------------------- */
|
||||||
@ -383,7 +370,6 @@ unsigned int aaip_get_pairs_skipped(struct aaip_state *aaip, int flag);
|
|||||||
*handle == NULL. This handle has to be the same as long
|
*handle == NULL. This handle has to be the same as long
|
||||||
as decoding goes on and finally has to be freed by a
|
as decoding goes on and finally has to be freed by a
|
||||||
call with bit15.
|
call with bit15.
|
||||||
@param aa_name The Signature Word (advised is "AA")
|
|
||||||
@param memory_limit Maximum number of bytes to allocate
|
@param memory_limit Maximum number of bytes to allocate
|
||||||
@param num_attr_limit Maximum number of name-value pairs to allocate
|
@param num_attr_limit Maximum number of name-value pairs to allocate
|
||||||
@param data The raw data to decode
|
@param data The raw data to decode
|
||||||
@ -399,7 +385,7 @@ unsigned int aaip_get_pairs_skipped(struct aaip_state *aaip, int flag);
|
|||||||
3 limit exceeded, not complete yet, call with bit15 and give up
|
3 limit exceeded, not complete yet, call with bit15 and give up
|
||||||
4 limit exceeded, call aaip_get_decoded_attrs() and try again
|
4 limit exceeded, call aaip_get_decoded_attrs() and try again
|
||||||
*/
|
*/
|
||||||
int aaip_decode_attrs(struct aaip_state **handle, char aa_name[2],
|
int aaip_decode_attrs(struct aaip_state **handle,
|
||||||
size_t memory_limit, size_t num_attr_limit,
|
size_t memory_limit, size_t num_attr_limit,
|
||||||
unsigned char *data, size_t num_data, size_t *consumed,
|
unsigned char *data, size_t num_data, size_t *consumed,
|
||||||
int flag);
|
int flag);
|
||||||
|
@ -194,10 +194,6 @@ int default_create_node(IsoNodeBuilder *builder, IsoImage *image,
|
|||||||
1 | (image->builder_ignore_acl << 1) |
|
1 | (image->builder_ignore_acl << 1) |
|
||||||
(image->builder_ignore_ea << 2 ));
|
(image->builder_ignore_ea << 2 ));
|
||||||
if (ret == 1 && aa_string != NULL) {
|
if (ret == 1 && aa_string != NULL) {
|
||||||
|
|
||||||
/* >>> change field signatures to eventual libisofs non-"AA" setting */;
|
|
||||||
/* (for now everything is "AA" anyway) */
|
|
||||||
|
|
||||||
ret = iso_node_add_xinfo(new, aaip_xinfo_func, aa_string);
|
ret = iso_node_add_xinfo(new, aaip_xinfo_func, aa_string);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -977,7 +977,6 @@ int ifs_get_aa_string(IsoFileSource *src, unsigned char **aa_string, int flag)
|
|||||||
if (*aa_string == NULL)
|
if (*aa_string == NULL)
|
||||||
return ISO_OUT_OF_MEM;
|
return ISO_OUT_OF_MEM;
|
||||||
memcpy(*aa_string, data->aa_string, len);
|
memcpy(*aa_string, data->aa_string, len);
|
||||||
aaip_set_signature("AA", *aa_string, 0); /* libisofs.h demands so */
|
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -1339,7 +1338,7 @@ int iso_file_source_new_ifs(IsoImageFilesystem *fs, IsoFileSource *parent,
|
|||||||
|
|
||||||
} else if (SUSP_SIG(sue, 'A', 'A') && fsdata->aaip_load == 1) {
|
} else if (SUSP_SIG(sue, 'A', 'A') && fsdata->aaip_load == 1) {
|
||||||
|
|
||||||
ret = read_aaip_AA(sue, "AA", &aa_string, &aa_size, &aa_len,
|
ret = read_aaip_AA(sue, &aa_string, &aa_size, &aa_len,
|
||||||
&prev_field, &aa_done, 0);
|
&prev_field, &aa_done, 0);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
/* notify and continue */
|
/* notify and continue */
|
||||||
@ -2584,10 +2583,6 @@ int image_builder_create_node(IsoNodeBuilder *builder, IsoImage *image,
|
|||||||
/* obtain ownership of eventual AA string */
|
/* obtain ownership of eventual AA string */
|
||||||
ret = iso_file_source_get_aa_string(src, &aa_string, 1);
|
ret = iso_file_source_get_aa_string(src, &aa_string, 1);
|
||||||
if (ret == 1 && aa_string != NULL) {
|
if (ret == 1 && aa_string != NULL) {
|
||||||
|
|
||||||
/* >>> change field signatures to eventual libisofs non-"AA" setting */;
|
|
||||||
/* (for now everything is "AA" anyway) */
|
|
||||||
|
|
||||||
ret = iso_node_add_xinfo(new, aaip_xinfo_func, aa_string);
|
ret = iso_node_add_xinfo(new, aaip_xinfo_func, aa_string);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -512,7 +512,7 @@ int lfs_get_aa_string(IsoFileSource *src, unsigned char **aa_string, int flag)
|
|||||||
if (num_attrs == 0)
|
if (num_attrs == 0)
|
||||||
result = NULL;
|
result = NULL;
|
||||||
else {
|
else {
|
||||||
sret = aaip_encode("AA", num_attrs, names,
|
sret = aaip_encode(num_attrs, names,
|
||||||
value_lengths, values, &result_len, &result, 0);
|
value_lengths, values, &result_len, &result, 0);
|
||||||
if (sret == 0) {
|
if (sret == 0) {
|
||||||
ret = ISO_OUT_OF_MEM;
|
ret = ISO_OUT_OF_MEM;
|
||||||
|
@ -702,7 +702,6 @@ struct IsoFileSource_Iface
|
|||||||
* bit2= No need to get EA (no guarantee of exclusion)
|
* bit2= No need to get EA (no guarantee of exclusion)
|
||||||
* @param aa_string Returns a pointer to the AA string data. If no AA
|
* @param aa_string Returns a pointer to the AA string data. If no AA
|
||||||
* string is available, *aa_string becomes NULL.
|
* string is available, *aa_string becomes NULL.
|
||||||
* Field signature will be "AA".
|
|
||||||
* (See doc/susp_aaip_0_2.txt for the meaning of AA and
|
* (See doc/susp_aaip_0_2.txt for the meaning of AA and
|
||||||
* libisofs/aaip_0_2.h for encoding and decoding.)
|
* libisofs/aaip_0_2.h for encoding and decoding.)
|
||||||
* The caller is responsible for finally calling free()
|
* The caller is responsible for finally calling free()
|
||||||
@ -3757,7 +3756,6 @@ int iso_file_source_readlink(IsoFileSource *src, char *buf, size_t bufsiz);
|
|||||||
* @param src The file source object to be inquired.
|
* @param src The file source object to be inquired.
|
||||||
* @param aa_string Returns a pointer to the AA string data. If no AA
|
* @param aa_string Returns a pointer to the AA string data. If no AA
|
||||||
* string is available, *aa_string becomes NULL.
|
* string is available, *aa_string becomes NULL.
|
||||||
* Field signature will be "AA".
|
|
||||||
* (See doc/susp_aaip_0_2.txt for the meaning of AA and
|
* (See doc/susp_aaip_0_2.txt for the meaning of AA and
|
||||||
* libisofs/aaip_0_2.h for encoding and decoding.)
|
* libisofs/aaip_0_2.h for encoding and decoding.)
|
||||||
* The caller is responsible for finally calling free()
|
* The caller is responsible for finally calling free()
|
||||||
|
@ -1394,7 +1394,7 @@ int iso_node_get_attrs(IsoNode *node, size_t *num_attrs,
|
|||||||
return ISO_AAIP_BAD_AASTRING;
|
return ISO_AAIP_BAD_AASTRING;
|
||||||
}
|
}
|
||||||
/* Allow 1 million bytes of memory consumption, 100,000 attributes */
|
/* Allow 1 million bytes of memory consumption, 100,000 attributes */
|
||||||
ret = aaip_decode_attrs(&aaip, "AA", (size_t) 1000000, (size_t) 100000,
|
ret = aaip_decode_attrs(&aaip, (size_t) 1000000, (size_t) 100000,
|
||||||
rpt, todo, &consumed, first_round);
|
rpt, todo, &consumed, first_round);
|
||||||
rpt+= consumed;
|
rpt+= consumed;
|
||||||
first_round= 0;
|
first_round= 0;
|
||||||
@ -1449,7 +1449,7 @@ int iso_node_set_attrs(IsoNode *node, size_t num_attrs, char **names,
|
|||||||
return ret;
|
return ret;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
sret = aaip_encode("AA", num_attrs, names, value_lengths, values,
|
sret = aaip_encode(num_attrs, names, value_lengths, values,
|
||||||
&result_len, &result, 0);
|
&result_len, &result, 0);
|
||||||
if (sret == 0)
|
if (sret == 0)
|
||||||
return ISO_OUT_OF_MEM;
|
return ISO_OUT_OF_MEM;
|
||||||
|
@ -630,7 +630,7 @@ int rrip_add_ER(Ecma119Image *t, struct susp_info *susp)
|
|||||||
|
|
||||||
|
|
||||||
static
|
static
|
||||||
int aaip_add_ER(Ecma119Image *t, struct susp_info *susp, char aa[2], int flag)
|
int aaip_add_ER(Ecma119Image *t, struct susp_info *susp, int flag)
|
||||||
{
|
{
|
||||||
unsigned char *AA;
|
unsigned char *AA;
|
||||||
|
|
||||||
@ -648,11 +648,9 @@ int aaip_add_ER(Ecma119Image *t, struct susp_info *susp, char aa[2], int flag)
|
|||||||
AA[6] = 62;
|
AA[6] = 62;
|
||||||
AA[7] = 1;
|
AA[7] = 1;
|
||||||
memcpy(AA + 8, "AAIP_0002", 9);
|
memcpy(AA + 8, "AAIP_0002", 9);
|
||||||
AA[17] = aa[0];
|
memcpy(AA + 17,
|
||||||
AA[18] = aa[1];
|
"AA PROVIDES VIA AAIP 0.2 SUPPORT FOR ARBITRARY FILE ATTRIBUTES"
|
||||||
memcpy(AA + 19,
|
" IN ISO 9660 IMAGES", 81);
|
||||||
" PROVIDES VIA AAIP 0.2 SUPPORT FOR ARBITRARY FILE ATTRIBUTES"
|
|
||||||
" IN ISO 9660 IMAGES", 79);
|
|
||||||
memcpy(AA + 98,
|
memcpy(AA + 98,
|
||||||
"PLEASE CONTACT THE LIBBURNIA PROJECT VIA LIBBURNIA-PROJECT.ORG",
|
"PLEASE CONTACT THE LIBBURNIA PROJECT VIA LIBBURNIA-PROJECT.ORG",
|
||||||
62);
|
62);
|
||||||
@ -1799,7 +1797,7 @@ int rrip_get_susp_fields(Ecma119Image *t, Ecma119Node *n, int type,
|
|||||||
|
|
||||||
#endif /* ! Libisofs_with_aaip_dummY */
|
#endif /* ! Libisofs_with_aaip_dummY */
|
||||||
|
|
||||||
ret = aaip_add_ER(t, info, "AA", 0);
|
ret = aaip_add_ER(t, info, 0);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
goto add_susp_cleanup;
|
goto add_susp_cleanup;
|
||||||
}
|
}
|
||||||
|
@ -288,9 +288,6 @@ int read_rr_PN(struct susp_sys_user_entry *pn, struct stat *st);
|
|||||||
/**
|
/**
|
||||||
* Collects the AA field string from single AA fields.
|
* Collects the AA field string from single AA fields.
|
||||||
* (see doc/susp_aaip_0_2.txt)
|
* (see doc/susp_aaip_0_2.txt)
|
||||||
* @param aa Signature of fields for inner representation. It will
|
|
||||||
* replace the signature of of the submitted SUSP field.
|
|
||||||
* Advised is "AA".
|
|
||||||
* @param aa_string Storage location of the emerging string.
|
* @param aa_string Storage location of the emerging string.
|
||||||
* Begin with *aa_string == NULL, or own malloc() storage.
|
* Begin with *aa_string == NULL, or own malloc() storage.
|
||||||
* @param aa_size Current allocated size of aa_string.
|
* @param aa_size Current allocated size of aa_string.
|
||||||
@ -304,16 +301,23 @@ int read_rr_PN(struct susp_sys_user_entry *pn, struct stat *st);
|
|||||||
* Begin with *is_done == 0
|
* Begin with *is_done == 0
|
||||||
* @param flag Unused yet. Submit 0.
|
* @param flag Unused yet. Submit 0.
|
||||||
*/
|
*/
|
||||||
int read_aaip_AA(struct susp_sys_user_entry *sue, char aa[2],
|
int read_aaip_AA(struct susp_sys_user_entry *sue,
|
||||||
unsigned char **aa_string, size_t *aa_size, size_t *aa_len,
|
unsigned char **aa_string, size_t *aa_size, size_t *aa_len,
|
||||||
size_t *prev_field, int *is_done, int flag);
|
size_t *prev_field, int *is_done, int flag);
|
||||||
|
|
||||||
|
#ifdef NIX
|
||||||
|
|
||||||
|
/* <<< is now in libisofs.h */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function to identify and manage AA strings as xinfo of IsoNode
|
* Function to identify and manage AA strings as xinfo of IsoNode
|
||||||
* See libisofs.h iso_node_xinfo_func
|
* See libisofs.h iso_node_xinfo_func
|
||||||
*/
|
*/
|
||||||
int aaip_xinfo_func(void *data, int flag);
|
int aaip_xinfo_func(void *data, int flag);
|
||||||
|
|
||||||
|
#endif /* NIX */
|
||||||
|
|
||||||
|
|
||||||
#endif /* Libisofs_with_aaiP */
|
#endif /* Libisofs_with_aaiP */
|
||||||
|
|
||||||
|
|
||||||
|
@ -438,7 +438,7 @@ int read_rr_PN(struct susp_sys_user_entry *pn, struct stat *st)
|
|||||||
#ifdef Libisofs_with_aaiP
|
#ifdef Libisofs_with_aaiP
|
||||||
|
|
||||||
|
|
||||||
int read_aaip_AA(struct susp_sys_user_entry *sue, char aa[2],
|
int read_aaip_AA(struct susp_sys_user_entry *sue,
|
||||||
unsigned char **aa_string, size_t *aa_size, size_t *aa_len,
|
unsigned char **aa_string, size_t *aa_size, size_t *aa_len,
|
||||||
size_t *prev_field, int *is_done, int flag)
|
size_t *prev_field, int *is_done, int flag)
|
||||||
{
|
{
|
||||||
@ -469,8 +469,8 @@ int read_aaip_AA(struct susp_sys_user_entry *sue, char aa[2],
|
|||||||
|
|
||||||
/* Compose new SUSP header with signature aa[], cont == 0 */
|
/* Compose new SUSP header with signature aa[], cont == 0 */
|
||||||
aapt = *aa_string + *aa_len;
|
aapt = *aa_string + *aa_len;
|
||||||
aapt[0] = aa[0];
|
aapt[0] = 'A';
|
||||||
aapt[1] = aa[1];
|
aapt[1] = 'A';
|
||||||
aapt[2] = sue->len_sue[0];
|
aapt[2] = sue->len_sue[0];
|
||||||
aapt[3] = 1;
|
aapt[3] = 1;
|
||||||
aapt[4] = 0;
|
aapt[4] = 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user