brintos

brintos / linux-shallow public Read only

0
0
Text · 1.6 KiB · 68b9ea8 Raw
69 lines · c
1// SPDX-License-Identifier: BSD-3-Clause OR GPL-2.02/******************************************************************************3 *4 * Module Name: cmfsize - Common get file size function5 *6 * Copyright (C) 2000 - 2023, Intel Corp.7 *8 *****************************************************************************/9 10#include <acpi/acpi.h>11#include "accommon.h"12#include "acapps.h"13 14#define _COMPONENT          ACPI_TOOLS15ACPI_MODULE_NAME("cmfsize")16 17/*******************************************************************************18 *19 * FUNCTION:    cm_get_file_size20 *21 * PARAMETERS:  file                    - Open file descriptor22 *23 * RETURN:      File Size. On error, -1 (ACPI_UINT32_MAX)24 *25 * DESCRIPTION: Get the size of a file. Uses seek-to-EOF. File must be open.26 *              Does not disturb the current file pointer.27 *28 ******************************************************************************/29u32 cm_get_file_size(ACPI_FILE file)30{31	long file_size;32	long current_offset;33	acpi_status status;34 35	/* Save the current file pointer, seek to EOF to obtain file size */36 37	current_offset = ftell(file);38	if (current_offset < 0) {39		goto offset_error;40	}41 42	status = fseek(file, 0, SEEK_END);43	if (ACPI_FAILURE(status)) {44		goto seek_error;45	}46 47	file_size = ftell(file);48	if (file_size < 0) {49		goto offset_error;50	}51 52	/* Restore original file pointer */53 54	status = fseek(file, current_offset, SEEK_SET);55	if (ACPI_FAILURE(status)) {56		goto seek_error;57	}58 59	return ((u32)file_size);60 61offset_error:62	fprintf(stderr, "Could not get file offset\n");63	return (ACPI_UINT32_MAX);64 65seek_error:66	fprintf(stderr, "Could not set file offset\n");67	return (ACPI_UINT32_MAX);68}69