ACPICA: Common: Enhance cm_get_file_size() to improve portability
This patch uses abstract file IO and acpi_log_error() APIs to enhance cm_get_file_size() so that applications that invoke this API could have portability improved. With actual references added to abstract file IO and acpi_log_error(), the applications need to link oslibcfs.o, utdebug.o, utexcep.o, utmath.o, utprint.o and utxferror.o. It is also required to add acpi_os_initialize() invocations if an application starts to use acpi_log_error(). acpidump has already invoked acpi_os_initialize() in this way. Lv Zheng. Signed-off-by: Lv Zheng <lv.zheng@intel.com> Signed-off-by: Bob Moore <robert.moore@intel.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
parent
d9cf147dbd
commit
3c9349c937
@ -105,7 +105,7 @@ extern char *acpi_gbl_optarg;
|
||||
/*
|
||||
* cmfsize - Common get file size function
|
||||
*/
|
||||
u32 cm_get_file_size(FILE * file);
|
||||
u32 cm_get_file_size(ACPI_FILE file);
|
||||
|
||||
#ifndef ACPI_DUMP_APP
|
||||
/*
|
||||
|
@ -112,11 +112,14 @@ DUMP_OBJS = \
|
||||
tbprint.o\
|
||||
tbxfroot.o\
|
||||
utbuffer.o\
|
||||
utdebug.o\
|
||||
utexcep.o\
|
||||
utglobal.o\
|
||||
utmath.o\
|
||||
utprint.o\
|
||||
utstring.o\
|
||||
utxferror.o\
|
||||
oslibcfs.o\
|
||||
oslinuxtbl.o\
|
||||
cmfsize.o\
|
||||
getopt.o
|
||||
|
@ -58,44 +58,46 @@ ACPI_MODULE_NAME("cmfsize")
|
||||
* RETURN: File Size. On error, -1 (ACPI_UINT32_MAX)
|
||||
*
|
||||
* DESCRIPTION: Get the size of a file. Uses seek-to-EOF. File must be open.
|
||||
* Does not disturb the current file pointer. Uses perror for
|
||||
* error messages.
|
||||
* Does not disturb the current file pointer.
|
||||
*
|
||||
******************************************************************************/
|
||||
u32 cm_get_file_size(FILE * file)
|
||||
u32 cm_get_file_size(ACPI_FILE file)
|
||||
{
|
||||
long file_size;
|
||||
long current_offset;
|
||||
acpi_status status;
|
||||
|
||||
/* Save the current file pointer, seek to EOF to obtain file size */
|
||||
|
||||
current_offset = ftell(file);
|
||||
current_offset = acpi_os_get_file_offset(file);
|
||||
if (current_offset < 0) {
|
||||
goto offset_error;
|
||||
}
|
||||
|
||||
if (fseek(file, 0, SEEK_END)) {
|
||||
status = acpi_os_set_file_offset(file, 0, ACPI_FILE_END);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
goto seek_error;
|
||||
}
|
||||
|
||||
file_size = ftell(file);
|
||||
file_size = acpi_os_get_file_offset(file);
|
||||
if (file_size < 0) {
|
||||
goto offset_error;
|
||||
}
|
||||
|
||||
/* Restore original file pointer */
|
||||
|
||||
if (fseek(file, current_offset, SEEK_SET)) {
|
||||
status = acpi_os_set_file_offset(file, current_offset, ACPI_FILE_BEGIN);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
goto seek_error;
|
||||
}
|
||||
|
||||
return ((u32)file_size);
|
||||
|
||||
offset_error:
|
||||
perror("Could not get file offset");
|
||||
acpi_log_error("Could not get file offset");
|
||||
return (ACPI_UINT32_MAX);
|
||||
|
||||
seek_error:
|
||||
perror("Could not seek file");
|
||||
acpi_log_error("Could not set file offset");
|
||||
return (ACPI_UINT32_MAX);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user