freebsd_network: Check non-packaged data dir for firmware.
When loading firmware, check the system non-packaged data dir first, then the system data directory (as before). This allows loading of firmware that doesn't reside in the system package.
This commit is contained in:
@@ -53,6 +53,11 @@ firmware_get(const char* fbsdFirmwareName)
|
|||||||
char* firmwarePath = NULL;
|
char* firmwarePath = NULL;
|
||||||
const char* haikuFirmwareName = NULL;
|
const char* haikuFirmwareName = NULL;
|
||||||
ssize_t readCount = 0;
|
ssize_t readCount = 0;
|
||||||
|
directory_which checkDirs[] = { B_SYSTEM_NONPACKAGED_DATA_DIRECTORY,
|
||||||
|
B_SYSTEM_DATA_DIRECTORY };
|
||||||
|
size_t numCheckDirs
|
||||||
|
= sizeof(checkDirs) / sizeof(checkDirs[0]);
|
||||||
|
size_t i = 0;
|
||||||
|
|
||||||
haikuFirmwareName = getHaikuFirmwareName(fbsdFirmwareName,
|
haikuFirmwareName = getHaikuFirmwareName(fbsdFirmwareName,
|
||||||
fbsdFirmwareName);
|
fbsdFirmwareName);
|
||||||
@@ -61,17 +66,24 @@ firmware_get(const char* fbsdFirmwareName)
|
|||||||
if (firmwarePath == NULL)
|
if (firmwarePath == NULL)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
if (find_directory(B_SYSTEM_DATA_DIRECTORY, -1, false,
|
|
||||||
firmwarePath, B_PATH_NAME_LENGTH) != B_OK)
|
|
||||||
goto cleanup;
|
|
||||||
|
|
||||||
strlcat(firmwarePath, "/firmware/", B_PATH_NAME_LENGTH);
|
for (; i < numCheckDirs; i++) {
|
||||||
strlcat(firmwarePath, gDriverName, B_PATH_NAME_LENGTH);
|
if (find_directory(checkDirs[i], -1, false, firmwarePath,
|
||||||
strlcat(firmwarePath, "/", B_PATH_NAME_LENGTH);
|
B_PATH_NAME_LENGTH) != B_OK) {
|
||||||
strlcat(firmwarePath, haikuFirmwareName, B_PATH_NAME_LENGTH);
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
fileDescriptor = open(firmwarePath, B_READ_ONLY);
|
strlcat(firmwarePath, "/firmware/", B_PATH_NAME_LENGTH);
|
||||||
if (fileDescriptor == -1)
|
strlcat(firmwarePath, gDriverName, B_PATH_NAME_LENGTH);
|
||||||
|
strlcat(firmwarePath, "/", B_PATH_NAME_LENGTH);
|
||||||
|
strlcat(firmwarePath, haikuFirmwareName, B_PATH_NAME_LENGTH);
|
||||||
|
|
||||||
|
fileDescriptor = open(firmwarePath, B_READ_ONLY);
|
||||||
|
if (fileDescriptor >= 0)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fileDescriptor < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
firmwareFileSize = lseek(fileDescriptor, 0, SEEK_END);
|
firmwareFileSize = lseek(fileDescriptor, 0, SEEK_END);
|
||||||
|
|||||||
Reference in New Issue
Block a user