about summary refs log tree commit diff
path: root/src/time/strptime.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/time/strptime.c')
-rw-r--r--src/time/strptime.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/src/time/strptime.c b/src/time/strptime.c
index d1d141e5..4d9eea41 100644
--- a/src/time/strptime.c
+++ b/src/time/strptime.c
@@ -8,7 +8,7 @@
 
 char *strptime(const char *restrict s, const char *restrict f, struct tm *restrict tm)
 {
-	int i, w, neg, adj, min, range, *dest;
+	int i, w, neg, adj, min, range, *dest, dummy;
 	const char *ex;
 	size_t len;
 	while (*f) {
@@ -40,6 +40,10 @@ char *strptime(const char *restrict s, const char *restrict f, struct tm *restri
 			if (!s) return 0;
 			break;
 		case 'C':
+			/* FIXME */
+			dest = &dummy;
+			if (w<0) w=2;
+			goto numeric_digits;
 		case 'd': case 'e':
 			dest = &tm->tm_mday;
 			min = 1;
@@ -112,8 +116,11 @@ char *strptime(const char *restrict s, const char *restrict f, struct tm *restri
 			break;
 		case 'U':
 		case 'W':
-			//FIXME
-			return 0;
+			/* Throw away result, for now. (FIXME?) */
+			dest = &dummy;
+			min = 0;
+			range = 54;
+			goto numeric_range;
 		case 'w':
 			dest = &tm->tm_wday;
 			min = 0;
@@ -128,8 +135,10 @@ char *strptime(const char *restrict s, const char *restrict f, struct tm *restri
 			if (!s) return 0;
 			break;
 		case 'y':
-			//FIXME
-			return 0;
+			/* FIXME */
+			dest = &dummy;
+			w = 2;
+			goto numeric_digits;
 		case 'Y':
 			dest = &tm->tm_year;
 			if (w<0) w=4;
@@ -138,6 +147,8 @@ char *strptime(const char *restrict s, const char *restrict f, struct tm *restri
 		case '%':
 			if (*s++ != '%') return 0;
 			break;
+		default:
+			return 0;
 		numeric_range:
 			if (!isdigit(*s)) return 0;
 			*dest = 0;