1 /*
2  * Public domain
3  * stdio.h compatibility shim
4  */
5 module libressl_d.compat.stdio;
6 
7 
8 private static import core.stdc.config;
9 private static import core.stdcpp.xutility;
10 public import core.stdc.stdarg;
11 public import core.stdc.stdio;
12 public import core.sys.posix.stdio;
13 
14 version (Windows) {
15 	static if (core.stdcpp.xutility._MSC_VER >= 1900) {
16 		//#include <../ucrt/corecrt_io.h>
17 		public import libressl_d.compat.stdlib;
18 	}
19 }
20 
21 extern (C):
22 nothrow @nogc:
23 
24 static if (!__traits(compiles, vasprintf)) {
25 	int vasprintf(char** str, const (char)* fmt, core.stdc.stdarg.va_list ap);
26 }
27 
28 static if (!__traits(compiles, asprintf)) {
29 	int asprintf(char** str, const (char)* fmt, ...);
30 }
31 
32 version (Windows) {
33 	alias off_t = core.stdc.config.c_long;
34 
35 	static if (__traits(compiles, core.stdcpp.xutility._MSC_VER)) {
36 		//#define __func__ __FUNCTION__
37 	}
38 
39 	void posix_perror(const (char)* s);
40 	core.stdc.stdio.FILE* posix_fopen(const (char)* path, const (char)* mode);
41 	char* posix_fgets(char* s, int size, core.stdc.stdio.FILE* stream);
42 	int posix_rename(const (char)* oldpath, const (char)* newpath);
43 
44 	version (NO_REDEF_POSIX_FUNCTIONS) {
45 	} else {
46 		alias perror = .posix_perror;
47 		alias fopen = .posix_fopen;
48 		alias fgets = .posix_fgets;
49 		alias rename = .posix_rename;
50 	}
51 
52 	version (Windows) {
53 		alias snprintf = core.stdc.stdio._snprintf;
54 	}
55 }