Before you continue
Before submitting a bug report, please review our troubleshooting documentation at Troubleshoot Issues | Vega Troubleshooting
If you still want to file a bug report, please make sure to fill in all the details below and provide the necessary information.
NOTE: PLEASE ONLY REPORT A SINGLE BUG USING THIS TEMPLATE.
If you’re experiencing multiple issues, please file a separate report for each.
1. Summary
Bug Description
After formatting an SD card as Internal (Adoptable) Storage on a Fire tablet, native applications using standard C library file I/O (fopen()) experience case-sensitive filename resolution for files stored under /sdcard.
Applications that previously functioned before storage migration may fail to locate existing files if the filename requested differs only by letter case.
This behavior is reproducible using a minimal native test application and does not depend on any third-party SDK.
Impact
Applications that download resources using one filename capitalization but later open the same resource using different capitalization receive ENOENT, even though the file exists.
App Name
N/A (Reproduced using a standalone native test application.)
Bug Severity
Impacts operation of app
2. Steps to Reproduce
- Insert an SD card into a Fire tablet.
- Format the SD card as Internal (Adoptable) Storage.
- Copy or create a file on adopted storage named:
CFGLIB_010000.BIN
- Execute:
FILE *fp =
fopen("/sdcard/.../cfglib_010000.bin","rb");
- Observe the return value.
- Execute:
FILE *fp =
fopen("/sdcard/.../CFGLIB_010000.BIN","rb");
- Compare the result.
3. Observed Behavior
The first call returns
NULL
errno = ENOENT (2)
"No such file or directory"
although the file exists.
Changing only the filename capitalization causes the identical fopen() call to succeed.
Example:
Stored filename:
CFGLIB_010000.BIN
Requested filename:
cfglib_010000.bin
No other changes are required.
The same application behavior worked correctly before the SD card was formatted as Internal (Adoptable) Storage.
4. Expected Behavior
I would like clarification whether this is expected Fire OS behavior.
If Adoptable Storage intentionally exposes case-sensitive pathname resolution through /sdcard, this behavior should be documented because native Android applications may rely on case-insensitive filename lookup after storage migration.
If this is not intentional, it appears to be a compatibility issue introduced after formatting the SD card as Internal Storage.
4.a Possible Root Cause
Investigation performed:
- Filesystem verified as F2FS
external_storage.casefold.enabledis unset- Current AOSP
voldformats adopted F2FS volumes without thecasefoldfeature when this property is not enabled. - Native
fopen()succeeds only when the pathname exactly matches the on-disk filename.
Temporary workaround:
Rename files so the stored filename exactly matches the filename passed to fopen().
Native test output:
fopen("/sdcard/.../cfglib_010000.bin")
NULL
errno=2
No such file or directory
--------------------------------
fopen("/sdcard/.../CFGLIB_010000.BIN")
SUCCESS
Additional Context
This issue was reproduced using a standalone native test program calling the standard libc fopen() API.
The behavior is independent of any third-party application and appears to depend solely on filename case after the SD card has been formatted as Internal (Adoptable) Storage.
Question:
Is case-sensitive filename lookup through /sdcard expected behavior on Fire OS after Adoptable Storage is enabled, or is this an unintended compatibility change?