const wchar_t *end;
} field[4], name;
- int fields;
+ int fields, n;
int type, tag, permset, id;
wchar_t sep;
++fields;
} while (sep == L':');
+ /* Set remaining fields to blank. */
+ for (n = fields; n < 4; ++n)
+ field[n].start = field[n].end = NULL;
+
/* Check for a numeric ID in field 1 or 3. */
id = -1;
isint_w(field[1].start, field[1].end, &id);
* Solaris extension: "defaultuser::rwx" is the
* default ACL corresponding to "user::rwx", etc.
*/
- if (field[0].end-field[0].start > 7
+ if (field[0].end - field[0].start > 7
&& wmemcmp(field[0].start, L"default", 7) == 0) {
type = ARCHIVE_ENTRY_ACL_TYPE_DEFAULT;
field[0].start += 7;
} else if (prefix_w(field[0].start, field[0].end, L"other")) {
if (fields == 2
&& field[1].start < field[1].end
- && ismode_w(field[1].start, field[2].end, &permset)) {
+ && ismode_w(field[1].start, field[1].end, &permset)) {
/* This is Solaris-style "other:rwx" */
} else if (fields == 3
&& field[1].start == field[1].end
{
const wchar_t *p;
+ if (start >= end)
+ return (0);
p = start;
*permset = 0;
while (p < end) {
/* Archive has 1 entry with some ACLs set on it. */
assertA(0 == archive_read_next_header(a, &ae));
- failure("Basic ACLs should set mode to 0640, not %04o",
+ failure("Basic ACLs should set mode to 0644, not %04o",
archive_entry_mode(ae)&0777);
- assertEqualInt((archive_entry_mode(ae) & 0777), 0640);
+ assertEqualInt((archive_entry_mode(ae) & 0777), 0644);
assertEqualInt(7, archive_entry_acl_reset(ae,
ARCHIVE_ENTRY_ACL_TYPE_ACCESS));
assertEqualInt(ARCHIVE_OK, archive_entry_acl_next(ae,
ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
&type, &permset, &tag, &qual, &name));
assertEqualInt(ARCHIVE_ENTRY_ACL_TYPE_ACCESS, type);
- assertEqualInt(000, permset);
+ assertEqualInt(004, permset);
assertEqualInt(ARCHIVE_ENTRY_ACL_OTHER, tag);
assertEqualInt(-1, qual);
assert(name == NULL);