diff -r 83263002816f -r 09ac07345656 application/system.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/application/system.h Mon Jan 29 10:41:00 2024 +0100 @@ -0,0 +1,115 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright 2024 Olaf Wintermann. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef DAV_SYSTEM_H +#define DAV_SYSTEM_H + +#include +#include +#include +#include + + +#ifdef _WIN32 +#include +#define mode_t unsigned int +#else +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct SysDirEnt { + char *name; +} SysDirEnt; + +#ifdef _WIN32 +struct WinDir { + int first; + HANDLE handle; + WIN32_FIND_DATAW finddata; + SysDirEnt *ent; +}; +#define SYS_DIR struct WinDir* +#define SYS_STAT struct __stat64 + +typedef int uid_t; +typedef int gid_t; + +#define SYS_ISLINK(path, mode) sys_islink(path) +#define SYS_LINK_EXT ".lnk" + +#else + +typedef struct SysDir { + DIR *dir; + SysDirEnt *ent; +} SysDir; + +#define SYS_DIR SysDir* +#define SYS_STAT struct stat + +#define SYS_ISLINK(p, s) S_ISLNK(s.st_mode) + +#endif + +typedef int(*stat_func)(const char*, SYS_STAT *); + +void sys_init(void); +void sys_uninit(void); + +void sys_freedirent(SysDirEnt *ent); +SYS_DIR sys_opendir(const char *path); +SysDirEnt* sys_readdir(SYS_DIR dir); +void sys_closedir(SYS_DIR dir); + +FILE* sys_fopen(const char *path, const char *mode); + +int sys_stat(const char *path, SYS_STAT *s); +int sys_lstat(const char *path, SYS_STAT *s); + +int sys_islink(const char *path); + +int sys_rename(const char *oldpath, const char *newpath); +int sys_unlink(const char *path); +int sys_mkdir(const char *path); + +char* sys_readlink(const char *path, SYS_STAT *s); + +int sys_symlink(const char *target, const char *linkpath); + +int sys_truncate(const char* path, off_t length); + +#ifdef __cplusplus +} +#endif + +#endif /* DAV_SYSTEM_H */ +