/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
/*
compatibility with posix APIs using AP_Filesystem
*/
#pragma once
#include
#include
#include
#include
#include
#ifdef __cplusplus
extern "C" {
#endif
/*
these are here to allow lua to build on HAL_ChibiOS
*/
typedef struct apfs_file {
int fd;
bool error;
bool eof;
int16_t unget;
char *tmpfile_name;
} APFS_FILE;
APFS_FILE *apfs_fopen(const char *pathname, const char *mode);
int apfs_fprintf(APFS_FILE *stream, const char *format, ...);
int apfs_fflush(APFS_FILE *stream);
size_t apfs_fread(void *ptr, size_t size, size_t nmemb, APFS_FILE *stream);
size_t apfs_fwrite(const void *ptr, size_t size, size_t nmemb, APFS_FILE *stream);
int apfs_fputs(const char *s, APFS_FILE *stream);
char *apfs_fgets(char *s, int size, APFS_FILE *stream);
void apfs_clearerr(APFS_FILE *stream);
int apfs_fseek(APFS_FILE *stream, long offset, int whence);
int apfs_ferror(APFS_FILE *stream);
int apfs_fclose(APFS_FILE *stream);
APFS_FILE *apfs_tmpfile(void);
int apfs_getc(APFS_FILE *stream);
int apfs_ungetc(int c, APFS_FILE *stream);
int apfs_feof(APFS_FILE *stream);
long apfs_ftell(APFS_FILE *stream);
APFS_FILE *apfs_freopen(const char *pathname, const char *mode, APFS_FILE *stream);
int apfs_remove(const char *pathname);
int apfs_rename(const char *oldpath, const char *newpath);
char *tmpnam(char s[L_tmpnam]);
#undef stdin
#undef stdout
#undef stderr
#define stdin ((APFS_FILE*)1)
#define stdout ((APFS_FILE*)2)
#define stderr ((APFS_FILE*)3)
#undef BUFSIZ
#define BUFSIZ 256
#define EOF (-1)
#ifndef SEEK_SET
#define SEEK_SET 0
#define SEEK_CUR 1
#define SEEK_END 2
#endif
#define FILE APFS_FILE
#ifndef __cplusplus
/*
only redefine posix functions for C code (eg. lua).
for C++ use the AP_Filsystem APIs
*/
#define fopen(p,m) apfs_fopen(p,m)
#define fprintf(stream, format, args...) apfs_fprintf(stream, format, ##args)
#define fflush(s) apfs_fflush(s)
#define fread(ptr,size,nmemb, stream) apfs_fread(ptr, size, nmemb, stream)
#define fwrite(ptr, size, nmemb, stream) apfs_fwrite(ptr, size, nmemb, stream)
#define fputs(s, stream) apfs_fputs(s, stream)
#define fgets(s, size, stream) apfs_fgets(s, size, stream)
#define clearerr(stream) apfs_clearerr(stream)
#define fseek(stream, offset, whence) apfs_fseek(stream, offset, whence)
#define ferror(stream) apfs_ferror(stream)
#define fclose(stream) apfs_fclose(stream)
#define tmpfile() apfs_tmpfile()
#undef getc
#define getc(stream) apfs_getc(stream)
#define ungetc(c, stream) apfs_ungetc(c, stream)
#define feof(stream) apfs_ferror(stream)
#define ftell(stream) apfs_ftell(stream)
#define freopen(pathname, mode, stream) apfs_freopen(pathname, mode, stream)
#define rename(oldpath, newpath) apfs_rename(oldpath, newpath)
#if !defined(__APPLE__)
#define remove(pathname) apfs_remove(pathname)
int sprintf(char *str, const char *format, ...);
#endif
#endif // __cplusplus
#ifdef __cplusplus
}
#endif