Android-x86
Fork

  • R/O
  • HTTP
  • SSH
  • HTTPS

external-exfat: コミット

external/exfat


コミットメタ情報

リビジョンf9c0f1b75b818b5a4f3ed65f65d6aa0fb529f24c (tree)
日時2018-09-15 13:52:46
作者relan <relan@user...>
コミッターrelan

ログメッセージ

Repairing: implement unknown entry type fix.

変更サマリ

差分

--- a/libexfat/exfat.h
+++ b/libexfat/exfat.h
@@ -238,5 +238,7 @@ bool exfat_fix_invalid_vbr_checksum(const struct exfat* ef, void* sector,
238238 uint32_t vbr_checksum);
239239 bool exfat_fix_invalid_node_checksum(const struct exfat* ef,
240240 struct exfat_node* node);
241+bool exfat_fix_unknown_entry(struct exfat* ef, struct exfat_node* dir,
242+ const struct exfat_entry* entry, off_t offset);
241243
242244 #endif /* ifndef EXFAT_H_INCLUDED */
--- a/libexfat/node.c
+++ b/libexfat/node.c
@@ -517,7 +517,8 @@ static int readdir(struct exfat* ef, struct exfat_node* parent,
517517 break; /* deleted entry, ignore it */
518518
519519 exfat_error("unknown entry type %#hhx", entry.type);
520- return -EIO;
520+ if (!EXFAT_REPAIR(unknown_entry, ef, parent, &entry, *offset))
521+ return -EIO;
521522 }
522523 *offset += sizeof(entry);
523524 }
--- a/libexfat/repair.c
+++ b/libexfat/repair.c
@@ -86,3 +86,17 @@ bool exfat_fix_invalid_node_checksum(const struct exfat* ef,
8686 exfat_errors_fixed++;
8787 return true;
8888 }
89+
90+bool exfat_fix_unknown_entry(struct exfat* ef, struct exfat_node* dir,
91+ const struct exfat_entry* entry, off_t offset)
92+{
93+ struct exfat_entry deleted = *entry;
94+
95+ deleted.type &= ~EXFAT_ENTRY_VALID;
96+ if (exfat_generic_pwrite(ef, dir, &deleted, sizeof(struct exfat_entry),
97+ offset) != sizeof(struct exfat_entry))
98+ return false;
99+
100+ exfat_errors_fixed++;
101+ return true;
102+}
旧リポジトリブラウザで表示