This repository continues development of the DJGPP run time library.
The original source is available from any mirror of DJGPP as the archives djcrx205.zip, djlsr205.zip and djtzs205.zip.
Goals of this project are:
- to fix any bugs that might be found
- to support all of C11
- to support as much of Posix as is practical in a DOS environment
- to support the GCC
_FORTIFY_SOURCEfacility
I am cross-compiling from Linux Mint using a compiler built from the Github repository https://github.com/andrewwutw/build-djgpp.git . Building natively does not seem to work, at least on FreeDOS; the make utility crashes for no apparent reason. I have not yet tried it on real MS-DOS.
Use "make" to build. Use "make zip" to create djdev206.zip and djtzn206.zip; use these in your DJGPP installation, whether native or a cross-compiler, in place of the corresponding original archives.
The original djlsr205 supports C90 with a few C99 features. Here is the current support for C11:
- float.h
- iso646.h
- limits.h
- stdalign.h
- stdarg.h
- stdatomic.h
- stddef.h
- stdnoreturn.h
- tgmath.h
- assert.h
- complex.h with conformance to Annex G
- ctype.h
- errno.h
- fenv.h
- inttypes.h
- locale.h
- setjmp.h
- signal.h
- stdbool.h
- stdint.h
- stdio.h
- stdlib.h
- string.h
- time.h
- uchar.h
- wctype.h
math.h
Many functions in math.h have two versions. The one defined in libc.a is coded specifically for the x87 unit and sets errno on any math errors. The one defined in libm.a is more generically coded, and may set errno or call matherr() on error. See the file info/libc.info for details.
All functions currently implemented in libc.a and libm.a, and defined in
C11, pass a number of tests for conformance to Annex F of the C11 standard,
provided that _LIB_VERSION is set to _IEEE_. _IEEE_ is now the
default; in the original library, the default is _XOPEN_, contrary to
what info/libc.info says.
All math functions defined in C11 are now present in libc.a. The ones present in libm.a are listed below.
| Function | float | double | long double |
|---|---|---|---|
acos |
libm.a | libm.a | missing |
acosh |
libm.a | libm.a | missing |
asin |
libm.a | libm.a | missing |
asinh |
libm.a | libm.a | missing |
atan |
libm.a | libm.a | missing |
atan2 |
libm.a | libm.a | missing |
atanh |
libm.a | libm.a | missing |
cbrt |
libm.a | libm.a | missing |
ceil |
libm.a | libm.a | missing |
copysign |
libm.a | libm.a | missing |
cos |
libm.a | libm.a | missing |
cosh |
libm.a | libm.a | missing |
erf |
libm.a | libm.a | libm.a |
erfc |
libm.a | libm.a | libm.a |
exp |
libm.a | libm.a | missing |
exp2 |
missing | missing | missing |
expm1 |
libm.a | libm.a | missing |
fabs |
libm.a | libm.a | missing |
fdim |
missing | missing | missing |
floor |
libm.a | libm.a | missing |
fma |
missing | missing | missing |
fmax |
missing | missing | missing |
fmin |
missing | missing | missing |
fmod |
libm.a | libm.a | missing |
frexp |
libm.a | libm.a | missing |
hypot |
libm.a | libm.a | missing |
ilogb |
libm.a | libm.a | missing |
ldexp |
libm.a | libm.a | missing |
lgamma |
libm.a | libm.a | libm.a |
llrint |
libm.a | libm.a | libm.a |
llround |
libm.a | libm.a | libm.a |
log |
libm.a | libm.a | missing |
log10 |
libm.a | libm.a | missing |
log1p |
libm.a | libm.a | missing |
log2 |
libm.a | libm.a | missing |
logb |
libm.a | libm.a | missing |
lrint |
libm.a | libm.a | libm.a |
lround |
libm.a | libm.a | libm.a |
modf |
libm.a | libm.a | missing |
nan |
libm.a | libm.a | missing |
nearbyint |
missing | missing | missing |
nextafter |
libm.a | libm.a | missing |
nexttoward |
missing | missing | missing |
pow |
libm.a | libm.a | missing |
remainder |
libm.a | libm.a | missing |
remquo |
missing | missing | missing |
rint |
libm.a | libm.a | libm.a |
round |
libm.a | libm.a | libm.a |
scalbln |
missing | missing | missing |
scalbn |
libm.a | libm.a | missing |
sin |
libm.a | libm.a | missing |
sinh |
libm.a | libm.a | missing |
sqrt |
libm.a | libm.a | missing |
tan |
libm.a | libm.a | missing |
tanh |
libm.a | libm.a | missing |
tgamma |
libm.a | libm.a | libm.a |
trunc |
libm.a | libm.a | libm.a |
libm.a implements additional functions not present in C11:
| Function | float | double | long double |
|---|---|---|---|
cabs |
libm.a | libm.a | missing |
drem |
libm.a | libm.a | missing |
finite |
libm.a | libm.a | libm.a |
gamma |
libm.a | libm.a | missing |
gamma_r |
libm.a | libm.a | missing |
infinity |
libm.a | libm.a | missing |
isinf |
libm.a | libm.a | libm.a |
isnan |
libm.a | libm.a | libm.a |
j0 |
libm.a | libm.a | missing |
j1 |
libm.a | libm.a | missing |
jn |
libm.a | libm.a | missing |
lgamma_r |
libm.a | libm.a | missing |
scalb |
libm.a | libm.a | missing |
significand |
libm.a | libm.a | missing |
y0 |
libm.a | libm.a | missing |
y1 |
libm.a | libm.a | missing |
yn |
libm.a | libm.a | missing |
wchar.h
- All functions at least minimally implemented
- No locale support in:
wcscoll-- same aswcscmp, no locale-dependent behaviorwcsxfrm-- identity map, no locale-dependent behavior
The following functions provide additional boundary checking if
_FORTIFY_SOURCE is in effect:
- Buffer overruns trigger a message to stderr and an abort.
- if
_FORTIFY_SOURCEis at least 2, printf-like functions may not use the %n format specifier when the format string is not constant. This does not apply to vprintf-like functions, because they are typically used with wrappers to make new printf-like functions.
string.h
- memcpy
- memmove
- memset
- strcat
- strcpy
- strncat
- strncpy
- strxfrm
- memccpy
- stpcpy
- stpncpy
- strlcat
- strlcpy
stdio.h
- fgets
- gets
- fread
- snprintf
- sprintf
- vsnprintf
- vsprintf
- fprintf
- printf
- dprintf
- asprintf
- asnprintf
- vasnprintf
gets is furthermore marked as deprecated, and its use will trigger an error
if C11 or higher is in effect.
stdlib.h
- mbstowcs
- wcstombs
- wctomb
- realpath
time.h
- strftime
wchar.h
- wprintf
- fwprintf
- swprintf
- vwprintf
- vfwprintf
- vswprintf
- fgetws
- wcscpy
- wcsncpy
- wcscat
- wcsncat
- wcsxfrm
- wmemcpy
- wmemmove
- wmemset
- wcsftime
- wcrtomb
- mbsrtowcs
- wcsrtombs
unistd.h
- confstr
- getcwd
- getgroups
- read
- gethostname
- getwd
- readlink