diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 18:49:45 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 18:49:45 +0000 |
commit | 2c3c1048746a4622d8c89a29670120dc8fab93c4 (patch) | |
tree | 848558de17fb3008cdf4d861b01ac7781903ce39 /tools/power/acpi/common/cmfsize.c | |
parent | Initial commit. (diff) | |
download | linux-upstream.tar.xz linux-upstream.zip |
Adding upstream version 6.1.76.upstream/6.1.76upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'tools/power/acpi/common/cmfsize.c')
-rw-r--r-- | tools/power/acpi/common/cmfsize.c | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/tools/power/acpi/common/cmfsize.c b/tools/power/acpi/common/cmfsize.c new file mode 100644 index 000000000..38f9b9da8 --- /dev/null +++ b/tools/power/acpi/common/cmfsize.c @@ -0,0 +1,68 @@ +// SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 +/****************************************************************************** + * + * Module Name: cmfsize - Common get file size function + * + * Copyright (C) 2000 - 2022, Intel Corp. + * + *****************************************************************************/ + +#include <acpi/acpi.h> +#include "accommon.h" +#include "acapps.h" + +#define _COMPONENT ACPI_TOOLS +ACPI_MODULE_NAME("cmfsize") + +/******************************************************************************* + * + * FUNCTION: cm_get_file_size + * + * PARAMETERS: file - Open file descriptor + * + * 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. + * + ******************************************************************************/ +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); + if (current_offset < 0) { + goto offset_error; + } + + status = fseek(file, 0, SEEK_END); + if (ACPI_FAILURE(status)) { + goto seek_error; + } + + file_size = ftell(file); + if (file_size < 0) { + goto offset_error; + } + + /* Restore original file pointer */ + + status = fseek(file, current_offset, SEEK_SET); + if (ACPI_FAILURE(status)) { + goto seek_error; + } + + return ((u32)file_size); + +offset_error: + fprintf(stderr, "Could not get file offset\n"); + return (ACPI_UINT32_MAX); + +seek_error: + fprintf(stderr, "Could not set file offset\n"); + return (ACPI_UINT32_MAX); +} |