__LA_MODE_T mode;
if(file_attr & ATTR_DIRECTORY) {
- mode = 0755 | AE_IFDIR;
+ if (file_attr & ATTR_READONLY) {
+ mode = 0555 | AE_IFDIR;
+ } else {
+ mode = 0755 | AE_IFDIR;
+ }
} else {
if (file_attr & ATTR_READONLY) {
mode = 0444 | AE_IFREG;
archive_entry_set_mode(entry, mode);
if (file_attr & (ATTR_READONLY | ATTR_HIDDEN | ATTR_SYSTEM)) {
- char *fflags_text, *p;
+ char *fflags_text, *ptr;
/* allocate for "rdonly,hidden,system," */
fflags_text = malloc(22 * sizeof(char));
if (fflags_text != NULL) {
- p = fflags_text;
+ ptr = fflags_text;
if (file_attr & ATTR_READONLY) {
- strcpy(p, "rdonly,");
- p = p + 7;
+ strcpy(ptr, "rdonly,");
+ ptr = ptr + 7;
}
if (file_attr & ATTR_HIDDEN) {
- p = strcpy(p, "hidden,");
- p = p + 7;
+ strcpy(ptr, "hidden,");
+ ptr = ptr + 7;
}
if (file_attr & ATTR_SYSTEM) {
- p = strcpy(p, "system,");
- p = p + 7;
+ strcpy(ptr, "system,");
+ ptr = ptr + 7;
}
- if (p > fflags_text) {
+ if (ptr > fflags_text) {
/* Delete trailing comma */
- *(p - 1) = '\0';
+ *(ptr - 1) = '\0';
archive_entry_copy_fflags_text(entry,
fflags_text);
}
PROLOGUE("test_read_format_rar5_fileattr.rar");
assertA(0 == archive_read_next_header(a, &ae));
- assertEqualInt(AE_IFREG, archive_entry_filetype(ae));
+ assertEqualInt(archive_entry_mode(ae), 0444 | AE_IFREG);
assertEqualString("readonly.txt", archive_entry_pathname(ae));
assertEqualString("rdonly", archive_entry_fflags_text(ae));
archive_entry_fflags(ae, &set, &clear);
assertEqualInt(flag, set & flag);
assertA(0 == archive_read_next_header(a, &ae));
- assertEqualInt(AE_IFREG, archive_entry_filetype(ae));
+ assertEqualInt(archive_entry_mode(ae), 0644 | AE_IFREG);
assertEqualString("hidden.txt", archive_entry_pathname(ae));
assertEqualString("hidden", archive_entry_fflags_text(ae));
archive_entry_fflags(ae, &set, &clear);
assertEqualInt(flag, set & flag);
assertA(0 == archive_read_next_header(a, &ae));
- assertEqualInt(AE_IFREG, archive_entry_filetype(ae));
+ assertEqualInt(archive_entry_mode(ae), 0644 | AE_IFREG);
assertEqualString("system.txt", archive_entry_pathname(ae));
assertEqualString("system", archive_entry_fflags_text(ae));
archive_entry_fflags(ae, &set, &clear);
assertEqualInt(flag, set & flag);
assertA(0 == archive_read_next_header(a, &ae));
- assertEqualInt(AE_IFREG, archive_entry_filetype(ae));
+ assertEqualInt(archive_entry_mode(ae), 0444 | AE_IFREG);
assertEqualString("ro_hidden.txt", archive_entry_pathname(ae));
assertEqualString("rdonly,hidden", archive_entry_fflags_text(ae));
archive_entry_fflags(ae, &set, &clear);
assertEqualInt(flag, set & flag);
assertA(0 == archive_read_next_header(a, &ae));
- assertEqualInt(AE_IFDIR, archive_entry_filetype(ae));
+ assertEqualInt(archive_entry_mode(ae), 0555 | AE_IFDIR);
assertEqualString("dir_readonly", archive_entry_pathname(ae));
assertEqualString("rdonly", archive_entry_fflags_text(ae));
archive_entry_fflags(ae, &set, &clear);
assertEqualInt(flag, set & flag);
assertA(0 == archive_read_next_header(a, &ae));
- assertEqualInt(AE_IFDIR, archive_entry_filetype(ae));
+ assertEqualInt(archive_entry_mode(ae), 0755 | AE_IFDIR);
assertEqualString("dir_hidden", archive_entry_pathname(ae));
assertEqualString("hidden", archive_entry_fflags_text(ae));
archive_entry_fflags(ae, &set, &clear);
assertEqualInt(flag, set & flag);
assertA(0 == archive_read_next_header(a, &ae));
- assertEqualInt(AE_IFDIR, archive_entry_filetype(ae));
+ assertEqualInt(archive_entry_mode(ae), 0755 | AE_IFDIR);
assertEqualString("dir_system", archive_entry_pathname(ae));
assertEqualString("system", archive_entry_fflags_text(ae));
archive_entry_fflags(ae, &set, &clear);
assertEqualInt(flag, set & flag);
assertA(0 == archive_read_next_header(a, &ae));
- assertEqualInt(AE_IFDIR, archive_entry_filetype(ae));
+ assertEqualInt(archive_entry_mode(ae), 0555 | AE_IFDIR);
assertEqualString("dir_rohidden", archive_entry_pathname(ae));
assertEqualString("rdonly,hidden", archive_entry_fflags_text(ae));
archive_entry_fflags(ae, &set, &clear);