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:
Lv Zheng 2014-07-08 10:07:19 +08:00 committed by Rafael J. Wysocki
parent d9cf147dbd
commit 3c9349c937
3 changed files with 15 additions and 10 deletions

View File

@ -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
/* /*

View File

@ -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

View File

@ -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);
} }