Browse Source

libc updates

K. Lange 4 years ago
parent
commit
bea8d8f6db
6 changed files with 34 additions and 3 deletions
  1. 4 3
      base/usr/include/stdio.h
  2. 3 0
      base/usr/include/time.h
  3. 3 0
      libc/stdio/printf.c
  4. 8 0
      libc/stdio/stdio.c
  5. 9 0
      libc/time/ctime.c
  6. 7 0
      libc/time/strftime.c

+ 4 - 3
base/usr/include/stdio.h

@@ -38,14 +38,17 @@ extern int snprintf(char * buf, size_t size, const char * fmt, ...);
 extern int vsprintf(char * buf, const char *fmt, va_list args);
 extern int vsnprintf(char * buf, size_t size, const char *fmt, va_list args);
 extern int vfprintf(FILE * device, const char *format, va_list ap);
+extern int vprintf(const char *format, va_list ap);
 
 extern int puts(const char *s);
 extern int fputs(const char *s, FILE *stream);
 extern int fputc(int c, FILE *stream);
-#define putc(c,s) fputc((c),(s))
+extern int putc(int c, FILE *stream);
 extern int putchar(int c);
 extern int fgetc(FILE *stream);
+extern int getc(FILE *stream);
 extern char *fgets(char *s, int size, FILE *stream);
+extern int getchar(void);
 
 extern void rewind(FILE *stream);
 extern void setbuf(FILE * stream, char * buf);
@@ -73,7 +76,5 @@ extern int rename(const char * oldpath, const char * newpath);
 #define _IOLBF 1
 #define _IOFBF 2
 
-#define getc(s) fgetc(s)
-
 extern char * tmpnam(char * s);
 #define L_tmpnam 256

+ 3 - 0
base/usr/include/time.h

@@ -26,6 +26,9 @@ extern time_t time(time_t * out);
 extern double difftime(time_t a, time_t b);
 extern time_t mktime(struct tm *tm);
 
+extern char * asctime(const struct tm *tm);
+extern char * ctime(const time_t * timep);
+
 typedef int clock_t;
 
 extern clock_t clock(void);

+ 3 - 0
libc/stdio/printf.c

@@ -282,6 +282,9 @@ int vfprintf(FILE * device, const char *fmt, va_list args) {
 	return out;
 }
 
+int vprintf(const char *fmt, va_list args) {
+	return vfprintf(stdout, fmt, args);
+}
 
 int fprintf(FILE * device, const char *fmt, ...) {
 	va_list args;

+ 8 - 0
libc/stdio/stdio.c

@@ -341,6 +341,8 @@ int fputc(int c, FILE *stream) {
 	return c;
 }
 
+int putc(int c, FILE *stream) __attribute__((weak, alias("fputc")));
+
 int fgetc(FILE * stream) {
 	char buf[1];
 	int r;
@@ -355,6 +357,12 @@ int fgetc(FILE * stream) {
 	return (unsigned char)buf[0];
 }
 
+int getc(FILE * stream) __attribute__((weak, alias("fgetc")));
+
+int getchar(void) {
+	return fgetc(stdin);
+}
+
 char *fgets(char *s, int size, FILE *stream) {
 	int c;
 	char * out = s;

+ 9 - 0
libc/time/ctime.c

@@ -0,0 +1,9 @@
+#include <time.h>
+#include <sys/time.h>
+
+/*
+ * TODO: Also supposed to set tz values...
+ */
+char * ctime(const time_t * timep) {
+    return asctime(localtime(timep));
+}

+ 7 - 0
libc/time/strftime.c

@@ -195,3 +195,10 @@ size_t strftime(char *s, size_t max, const char *fmt, const struct tm *tm) {
 	*b = '\0';
 	return b - s;
 }
+
+static char output[26];
+char * asctime(const struct tm *tm) {
+	strftime(output, 26, "%a %b %d %T %Y\n", tm);
+	return output;
+}
+