commit 610a73fa975fbb6981dc1aa383b2d92567060a98
parent 1ef01b62fa5d1651c190dd95fb9806830cb92d4f
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date: Wed, 6 Dec 2017 23:16:21 +0100
[lib/c] Add abs(), labs() and llabs()
Diffstat:
8 files changed, 53 insertions(+), 0 deletions(-)
diff --git a/lib/c/include/stdlib.h b/lib/c/include/stdlib.h
@@ -66,4 +66,14 @@ extern int wctomb(char *s, wchar_t wchar);
extern size_t mbstowcs(wchar_t * restrict pwcs, const char * restrict s, size_t n);
extern size_t wcstombs(char * restrict s, const wchar_t * restrict pwcs, size_t n);
+#ifdef __USE_MACROS
+extern int __abs;
+extern long __labs;
+extern long long __llabs;
+
+#define abs(x) (__abs = (x), (__abs) < 0 ? -__abs : __abs)
+#define labs(x) (__labs = (x), (__labs) < 0 ? -__labs : __labs)
+#define llabs(x) (__llabs = (x), (__llabs) < 0 ? -__llabs : __llabs)
+#endif
+
#endif
diff --git a/lib/c/src/Makefile b/lib/c/src/Makefile
@@ -3,6 +3,7 @@
include ../../../config.mk
OBJ = bsearch.o \
+ abs.o __abs.o labs.o __labs.o llabs.o __labs.o \
printf.o fprintf.o vfprintf.o \
fgets.o gets.of fgetc.o fputc.o getchar.o putchar.o \
fputs.o puts.o fread.o fwrite.o \
diff --git a/lib/c/src/__abs.c b/lib/c/src/__abs.c
@@ -0,0 +1,5 @@
+
+#define __USE_MACROS
+#include <stdlib.h>
+
+int __abs;
diff --git a/lib/c/src/__labs.c b/lib/c/src/__labs.c
@@ -0,0 +1,5 @@
+
+#define __USE_MACROS
+#include <stdlib.h>
+
+long __labs;
diff --git a/lib/c/src/__llabs.c b/lib/c/src/__llabs.c
@@ -0,0 +1,5 @@
+
+#define __USE_MACROS
+#include <stdlib.h>
+
+long long __llabs;
diff --git a/lib/c/src/abs.c b/lib/c/src/abs.c
@@ -0,0 +1,9 @@
+
+#include <stdlib.h>
+#undef abs
+
+int
+abs(int n)
+{
+ return (n < 0) ? -n : n;
+}
diff --git a/lib/c/src/labs.c b/lib/c/src/labs.c
@@ -0,0 +1,9 @@
+
+#include <stdlib.h>
+#undef labs
+
+long
+labs(long n)
+{
+ return (n < 0) ? -n : n;
+}
diff --git a/lib/c/src/llabs.c b/lib/c/src/llabs.c
@@ -0,0 +1,9 @@
+
+#include <stdlib.h>
+#undef llabs
+
+long long
+llabs(long long n)
+{
+ return (n < 0) ? -n : n;
+}