blob: 976e1593a9e6ccf37710fda3bdcc5b72f106c2a5 [file] [log] [blame]
// Copyright 2024 The Cobalt Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// Module Overview: POSIX stat wrappers
//
// These wrappers are used in modular builds (including Evergreen). They
// are needed to handle dealing with differences in platform-specific
// toolchain types and musl-based types. In particular, the `struct stat`
// type may contain differently sized member fields and when the caller is
// Cobalt code compiled with musl it will provide argument data that needs
// to be adjusted when passed to platform-specific system libraries.
#ifndef STARBOARD_SHARED_MODULAR_STARBOARD_LAYER_POSIX_STAT_ABI_WRAPPERS_H_
#define STARBOARD_SHARED_MODULAR_STARBOARD_LAYER_POSIX_STAT_ABI_WRAPPERS_H_
#include <sys/stat.h> // This should be the headers from the platform toolchain
#include "starboard/configuration.h"
#include "starboard/export.h"
#include "starboard/shared/modular/starboard_layer_posix_time_abi_wrappers.h"
#ifdef __cplusplus
extern "C" {
#endif
struct musl_stat {
#if SB_IS(ARCH_ARM64) || SB_IS(ARCH_X64)
int64_t /*dev_t*/ st_dev;
int64_t /*ino_t*/ st_ino;
int64_t /*nlink_t*/ st_nlink;
unsigned /*mode_t*/ st_mode;
unsigned /*uid_t*/ st_uid;
unsigned /*gid_t*/ st_gid;
unsigned /*unsigned int*/ __pad0;
int64_t /*dev_t*/ st_rdev;
int64_t /*off_t*/ st_size;
int64_t /*blksize_t*/ st_blksize;
int64_t /*blkcnt_t*/ st_blocks;
struct musl_timespec /*struct timespec*/ st_atim;
struct musl_timespec /*struct timespec*/ st_mtim;
struct musl_timespec /*struct timespec*/ st_ctim;
int64_t unused[3];
#else
uint64_t /*dev_t*/ st_dev;
uint32_t /*int*/ _st_dev_padding;
int32_t /*long*/ _st_ino_truncated;
uint32_t /*mode_t*/ st_mode;
uint32_t /*nlink_t*/ st_nlink;
uint32_t /*uid_t*/ st_uid;
uint32_t /*gid_t*/ st_gid;
uint64_t /*dev_t*/ st_rdev;
uint32_t /*int*/ __st_rdev_padding;
int64_t /*off_t*/ st_size;
int32_t /*blksize_t*/ st_blksize;
int64_t /*blkcnt_t*/ st_blocks;
int32_t _unused[6];
uint64_t /*ino_t*/ st_ino;
struct musl_timespec /*struct timespec*/ st_atim;
struct musl_timespec /*struct timespec*/ st_mtim;
struct musl_timespec /*struct timespec*/ st_ctim;
#endif
};
SB_EXPORT int __abi_wrap_stat(const char* path, struct musl_stat* info);
#ifdef __cplusplus
} // extern "C"
#endif
#endif // STARBOARD_SHARED_MODULAR_STARBOARD_LAYER_POSIX_STAT_ABI_WRAPPERS_H_