Skip to content

Commit

Permalink
Initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
marcthe12 committed Apr 7, 2022
0 parents commit 54d5ba6
Show file tree
Hide file tree
Showing 165 changed files with 1,789 additions and 0 deletions.
7 changes: 7 additions & 0 deletions .clang-format
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
BasedOnStyle: LLVM
IndentWidth: 8
UseTab: Always
BreakBeforeBraces: Linux
AllowShortIfStatementsOnASingleLine: false
IndentCaseLabels: true
IndentPPDirectives: BeforeHash
25 changes: 25 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
*.o
*.ko
*.obj
*.elf
*.gch
*.pch
*.dll
*.so
*.so.*
*.dylib
*.exe
*.out
*.app
*.pdb
/build*/
/subprojects/*
!/subprojects/*.wrap
meson-logs
meson-private
meson_benchmark_setup.dat
meson_test_setup.dat
build.ninja
.ninja_deps
.ninja_logs
compile_commands.json
1 change: 1 addition & 0 deletions io.h
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#include "io/io.h"
10 changes: 10 additions & 0 deletions io/asprintf.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#include "io.h"

int asprintf(char **string, char const *restrict format, ...)
{
va_list arg;
va_start(arg, format);
int lenght = vasprintf(string, format, arg);
va_end(arg);
return lenght;
}
11 changes: 11 additions & 0 deletions io/aswprintf.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#define NO_OPAQUE_TYPE
#include "io.h"

int aswprintf(wchar_t **string, wchar_t const *restrict format, ...)
{
va_list arg;
va_start(arg, format);
int lenght = vaswprintf(string, format, arg);
va_end(arg);
return lenght;
}
15 changes: 15 additions & 0 deletions io/fgets.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#include "io.h"
#include <errno.h>

char* fgets(char *restrict string, int size, FILE *restrict stream)
{
int character = 0;
for(int i=0;character == '\n' || i < size -1;i++){
character = _fgetc_wrap(stream);
if(character == _eof_wrap){
return NULL;
}
}

return string;
}
15 changes: 15 additions & 0 deletions io/fgetws.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#include "io.h"
#include <errno.h>

char* fgets(char *restrict string, int size, FILE *restrict stream)
{
int character = 0;
for(int i=0;character == '\n' || i < size -1;i++){
character = _fgetc_wrap(stream);
if(character == _eof_wrap){
return NULL;
}
}

return string;
}
10 changes: 10 additions & 0 deletions io/fprintf.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#include "io.h"

int fprintf(FILE *stream, char const *restrict format, ...)
{
va_list arg;
va_start(arg, format);
int lenght = _vfprintf_wrap(stream, format, arg);
va_end(arg);
return lenght;
}
11 changes: 11 additions & 0 deletions io/fputs.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#include "io.h"
#include <errno.h>

int fputs(char const *restrict string, FILE *restrict stream)
{

for (size_t i = 0; string[i]; ++i) {
if(_fputc_wrap(string[i], stream)==_eof_wrap){return _eof_wrap;};
}
return 0;
}
11 changes: 11 additions & 0 deletions io/fputws.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#include "io.h"
#include <errno.h>

int fputs(char const *restrict string, FILE *restrict stream)
{

for (size_t i = 0; string[i]; ++i) {
if(_fputc_wrap(string[i], stream)==_eof_wrap){return _eof_wrap;};
}
return 0;
}
10 changes: 10 additions & 0 deletions io/fscanf.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#include "io.h"

int fscanf(FILE *stream, char const *restrict format, ...)
{
va_list arg;
va_start(arg, format);
int lenght = _vfscanf_wrap(stream, format, arg);
va_end(arg);
return lenght;
}
10 changes: 10 additions & 0 deletions io/fwprinf.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#include "io.h"

int fwprintf(FILE *stream, wchar_t const *restrict format, ...)
{
va_list arg;
va_start(arg, format);
int lenght = _vfwprintf_wrap(stream, format, arg);
va_end(arg);
return lenght;
}
10 changes: 10 additions & 0 deletions io/fwscanf.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#include "io.h"

int fwscanf(FILE *stream, wchar_t const *restrict format, ...)
{
va_list arg;
va_start(arg, format);
int lenght = _vfwscanf_wrap(stream, format, arg);
va_end(arg);
return lenght;
}
3 changes: 3 additions & 0 deletions io/getchar.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#include "io.h"

int getchar(void) { return _fgetc_wrap(_stdstream_wrap(stream_input)); }
18 changes: 18 additions & 0 deletions io/gets.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#include "io.h"
#include <errno.h>

char* gets(char *string)
{
size_t i='\0';
for(int character = 0;character == '\n';i++){
character = getchar();
if(character == _eof_wrap){
return NULL;
}
string[i]=character;
}

string[++i]='\0';

return string;
}
4 changes: 4 additions & 0 deletions io/getwchar.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#define NEED_WINT
#include "io.h"

wint_t getwchar(void) { return fgetwc(_stdstream_wrap(stream_input)); }
54 changes: 54 additions & 0 deletions io/io.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
#if !defined(IO_H)
#define IO_H

#include <stdarg.h>
#include <stddef.h>

#if __STDC_HOSTED__ == 1
#include "wrap/io.h"

extern void setbuf(FILE *restrict, char *restrict);
extern void rewind(FILE *);

extern int getchar(void);
extern int putchar(int);
extern int puts(char const *restrict);
extern int fputs(char const *restrict,FILE *restrict);

#if defined(NEED_WINT)
extern wint_t getwchar(void);
extern wint_t putwchar(wchar_t);
#endif

extern void perror(char const *);

extern int fprintf(FILE *, char const *restrict, ...);
extern int printf(char const *restrict, ...);
extern int snprintf(char *, size_t, char const *restrict, ...);
extern int asprintf(char **restrict, char const *restrict, ...);
extern int sprintf(char *, char const *restrict, ...);
extern int vprintf(char const *restrict, va_list);
extern int vsprintf(char *, char const *restrict, va_list);
extern int vasprintf(char **restrict, char const *restrict, va_list);
extern int fwprintf(FILE *, wchar_t const *restrict, ...);
extern int wprintf(wchar_t const *restrict, ...);
extern int swprintf(wchar_t *, size_t, wchar_t const *restrict, ...);
extern int aswprintf(wchar_t **restrict, wchar_t const *restrict,
...);
extern int vwprintf(wchar_t const *restrict, va_list);
extern int vaswprintf(wchar_t **restrict, wchar_t const *restrict,
va_list);

extern int fscanf(FILE *, char const *restrict, ...);
extern int scanf(char const *restrict, ...);
extern int sscanf(char const *restrict, char const *restrict, ...);
extern int vscanf(char const *restrict, va_list);
extern int fwscanf(FILE *, wchar_t const *restrict, ...);
extern int swscanf(wchar_t const *restrict, wchar_t const *restrict,
...);
extern int vwscanf(wchar_t const *restrict, va_list);
extern int wscanf(wchar_t const *restrict, ...);

#endif

#endif
43 changes: 43 additions & 0 deletions io/meson.build
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
if is_hosted == 1
subdir('wrap')
sources += files(
'io.h',
'printf.c',
'fprintf.c',
'snprintf.c',
'asprintf.c',
'sprintf.c',
'vprintf.c',
'vsprintf.c',
'wprinf.c',
'fwprinf.c',
'aswprintf.c',
'swprintf.c',
'vwprintf.c',
'vaswprintf.c',
'perror.c',
'setbuf.c',
'fread.c',
'fwrite.c',
'gets.c',
'fgets.c',
'getws.c',
'fgetws.c',
'getchar.c',
'getwchar.c',
'puts.c'
'fputs.c'
'putws.c'
'fputws.c'
'putchar.c',
'putwchar.c',
'scanf.c',
'vwscanf.c',
'vscanf.c',
'swscanf.c',
'sscanf.c',
'fwscanf.c',
'fscanf.c',
'wscanf.c'
)
endif
10 changes: 10 additions & 0 deletions io/perror.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#include "io.h"
#include <errno.h>
#include <string.h>

void perror(char const *string)
{

fprintf(_stdstream_wrap(stream_error), "%s: %s", string,
strerror(errno));
}
10 changes: 10 additions & 0 deletions io/printf.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#include "io.h"

int printf(char const *restrict format, ...)
{
va_list arg;
va_start(arg, format);
int lenght = vprintf(format, arg);
va_end(arg);
return lenght;
}
6 changes: 6 additions & 0 deletions io/putchar.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#include "io.h"

int putchar(int character)
{
return _fputc_wrap(character, _stdstream_wrap(stream_output));
}
10 changes: 10 additions & 0 deletions io/puts.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#include "io.h"
#include <errno.h>

int puts(char const *string)
{
if (fputs(string, _stdstream_wrap(stream_output)) == _eof_wrap) {
return _eof_wrap;
}
return putchar('\n');
}
7 changes: 7 additions & 0 deletions io/putwchar.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#define NEED_WINT
#include "io.h"

wint_t putwchar(wchar_t character)
{
return fputwc(character, _stdstream_wrap(stream_output));
}
4 changes: 4 additions & 0 deletions io/rewind.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#define NO_OPAQUE_TYPE
#include "io.h"

void rewind(FILE *stream) { fseek(stream, 0L, SEEK_SET); }
10 changes: 10 additions & 0 deletions io/scanf.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#include "io.h"

int scanf(char const *restrict format, ...)
{
va_list arg;
va_start(arg, format);
int lenght = vscanf(format, arg);
va_end(arg);
return lenght;
}
8 changes: 8 additions & 0 deletions io/setbuf.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#define NO_OPAQUE_TYPE
#include "io.h"

void setbuf(FILE *restrict file, char *restrict buffer)
{
(buffer == NULL) ? _setvbuf_wrap(file, NULL, _IONBF, 0)
: _setvbuf_wrap(file, buffer, _IOFBF, BUFSIZ);
}
10 changes: 10 additions & 0 deletions io/snprintf.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#include "io.h"

int snprintf(char *string, size_t max_size, char const *restrict format, ...)
{
va_list arg;
va_start(arg, format);
int lenght = _vsnprintf_wrap(string, max_size, format, arg);
va_end(arg);
return lenght;
}
10 changes: 10 additions & 0 deletions io/sprintf.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#include "io.h"

int sprintf(char *string, char const *restrict format, ...)
{
va_list arg;
va_start(arg, format);
int lenght = vsprintf(string, format, arg);
va_end(arg);
return lenght;
}
10 changes: 10 additions & 0 deletions io/sscanf.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#include "io.h"

int sscanf(char const *restrict string, char const *restrict format, ...)
{
va_list arg;
va_start(arg, format);
int lenght = _vsscanf_wrap(string, format, arg);
va_end(arg);
return lenght;
}
Loading

0 comments on commit 54d5ba6

Please sign in to comment.