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
|
* 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
|
#ifndef ACPI_DUMP_APP
|
||||||
/*
|
/*
|
||||||
|
@ -112,11 +112,14 @@ DUMP_OBJS = \
|
|||||||
tbprint.o\
|
tbprint.o\
|
||||||
tbxfroot.o\
|
tbxfroot.o\
|
||||||
utbuffer.o\
|
utbuffer.o\
|
||||||
|
utdebug.o\
|
||||||
utexcep.o\
|
utexcep.o\
|
||||||
utglobal.o\
|
utglobal.o\
|
||||||
utmath.o\
|
utmath.o\
|
||||||
|
utprint.o\
|
||||||
utstring.o\
|
utstring.o\
|
||||||
utxferror.o\
|
utxferror.o\
|
||||||
|
oslibcfs.o\
|
||||||
oslinuxtbl.o\
|
oslinuxtbl.o\
|
||||||
cmfsize.o\
|
cmfsize.o\
|
||||||
getopt.o
|
getopt.o
|
||||||
|
@ -58,44 +58,46 @@ ACPI_MODULE_NAME("cmfsize")
|
|||||||
* RETURN: File Size. On error, -1 (ACPI_UINT32_MAX)
|
* RETURN: File Size. On error, -1 (ACPI_UINT32_MAX)
|
||||||
*
|
*
|
||||||
* DESCRIPTION: Get the size of a file. Uses seek-to-EOF. File must be open.
|
* 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
|
* Does not disturb the current file pointer.
|
||||||
* error messages.
|
|
||||||
*
|
*
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
u32 cm_get_file_size(FILE * file)
|
u32 cm_get_file_size(ACPI_FILE file)
|
||||||
{
|
{
|
||||||
long file_size;
|
long file_size;
|
||||||
long current_offset;
|
long current_offset;
|
||||||
|
acpi_status status;
|
||||||
|
|
||||||
/* Save the current file pointer, seek to EOF to obtain file size */
|
/* 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) {
|
if (current_offset < 0) {
|
||||||
goto offset_error;
|
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;
|
goto seek_error;
|
||||||
}
|
}
|
||||||
|
|
||||||
file_size = ftell(file);
|
file_size = acpi_os_get_file_offset(file);
|
||||||
if (file_size < 0) {
|
if (file_size < 0) {
|
||||||
goto offset_error;
|
goto offset_error;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Restore original file pointer */
|
/* 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;
|
goto seek_error;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ((u32)file_size);
|
return ((u32)file_size);
|
||||||
|
|
||||||
offset_error:
|
offset_error:
|
||||||
perror("Could not get file offset");
|
acpi_log_error("Could not get file offset");
|
||||||
return (ACPI_UINT32_MAX);
|
return (ACPI_UINT32_MAX);
|
||||||
|
|
||||||
seek_error:
|
seek_error:
|
||||||
perror("Could not seek file");
|
acpi_log_error("Could not set file offset");
|
||||||
return (ACPI_UINT32_MAX);
|
return (ACPI_UINT32_MAX);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user