diff --git a/compat/strptime.c b/compat/strptime.c
index 47f9564..38e9d03 100644
--- a/compat/strptime.c
+++ b/compat/strptime.c
@@ -5,167 +5,209 @@
  * commit 98e688a9da5e7b2925dda17a2d6820dddf1fb287.
  *
  * Lobotomized to remove references to nl_langinfo().
+ * Adjusted coding style to fit libyang's uncrustify rules.
  * */
 
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
 #include <ctype.h>
 #include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
 #include <string.h>
+#include <time.h>
 
-char *strptime(const char *restrict s, const char *restrict f, struct tm *restrict tm)
+char *
+strptime(const char * restrict s, const char * restrict f, struct tm * restrict tm)
 {
-	int i, w, neg, adj, min, range, *dest, dummy;
-	int want_century = 0, century = 0, relyear = 0;
-	while (*f) {
-		if (*f != '%') {
-			if (isspace(*f)) for (; *s && isspace(*s); s++);
-			else if (*s != *f) return 0;
-			else s++;
-			f++;
-			continue;
-		}
-		f++;
-		if (*f == '+') f++;
-		if (isdigit(*f)) {
-			char *new_f;
-			w=strtoul(f, &new_f, 10);
-			f = new_f;
-		} else {
-			w=-1;
-		}
-		adj=0;
-		switch (*f++) {
-		case 'a': case 'A':
-		case 'b': case 'B': case 'h':
-		case 'c':
-			goto fail_nl_langinfo;
-		case 'C':
-			dest = &century;
-			if (w<0) w=2;
-			want_century |= 2;
-			goto numeric_digits;
-		case 'd': case 'e':
-			dest = &tm->tm_mday;
-			min = 1;
-			range = 31;
-			goto numeric_range;
-		case 'D':
-			s = strptime(s, "%m/%d/%y", tm);
-			if (!s) return 0;
-			break;
-		case 'H':
-			dest = &tm->tm_hour;
-			min = 0;
-			range = 24;
-			goto numeric_range;
-		case 'I':
-			dest = &tm->tm_hour;
-			min = 1;
-			range = 12;
-			goto numeric_range;
-		case 'j':
-			dest = &tm->tm_yday;
-			min = 1;
-			range = 366;
-			adj = 1;
-			goto numeric_range;
-		case 'm':
-			dest = &tm->tm_mon;
-			min = 1;
-			range = 12;
-			adj = 1;
-			goto numeric_range;
-		case 'M':
-			dest = &tm->tm_min;
-			min = 0;
-			range = 60;
-			goto numeric_range;
-		case 'n': case 't':
-			for (; *s && isspace(*s); s++);
-			break;
-		case 'p':
-		case 'r':
-			goto fail_nl_langinfo;
-		case 'R':
-			s = strptime(s, "%H:%M", tm);
-			if (!s) return 0;
-			break;
-		case 'S':
-			dest = &tm->tm_sec;
-			min = 0;
-			range = 61;
-			goto numeric_range;
-		case 'T':
-			s = strptime(s, "%H:%M:%S", tm);
-			if (!s) return 0;
-			break;
-		case 'U':
-		case 'W':
-			/* Throw away result, for now. (FIXME?) */
-			dest = &dummy;
-			min = 0;
-			range = 54;
-			goto numeric_range;
-		case 'w':
-			dest = &tm->tm_wday;
-			min = 0;
-			range = 7;
-			goto numeric_range;
-		case 'x':
-		case 'X':
-			goto fail_nl_langinfo;
-		case 'y':
-			dest = &relyear;
-			w = 2;
-			want_century |= 1;
-			goto numeric_digits;
-		case 'Y':
-			dest = &tm->tm_year;
-			if (w<0) w=4;
-			adj = 1900;
-			want_century = 0;
-			goto numeric_digits;
-		case '%':
-			if (*s++ != '%') return 0;
-			break;
-		default:
-			return 0;
-		numeric_range:
-			if (!isdigit(*s)) return 0;
-			*dest = 0;
-			for (i=1; i<=min+range && isdigit(*s); i*=10)
-				*dest = *dest * 10 + *s++ - '0';
-			if (*dest - min >= (unsigned)range) return 0;
-			*dest -= adj;
-			switch((char *)dest - (char *)tm) {
-			case offsetof(struct tm, tm_yday):
-				;
-			}
-			goto update;
-		numeric_digits:
-			neg = 0;
-			if (*s == '+') s++;
-			else if (*s == '-') neg=1, s++;
-			if (!isdigit(*s)) return 0;
-			for (*dest=i=0; i<w && isdigit(*s); i++)
-				*dest = *dest * 10 + *s++ - '0';
-			if (neg) *dest = -*dest;
-			*dest -= adj;
-			goto update;
-		update:
-			//FIXME
-			;
-		}
-	}
-	if (want_century) {
-		tm->tm_year = relyear;
-		if (want_century & 2) tm->tm_year += century * 100 - 1900;
-		else if (tm->tm_year <= 68) tm->tm_year += 100;
-	}
-	return (char *)s;
+    int i, w, neg, adj, min, range, *dest, dummy;
+    int want_century = 0, century = 0, relyear = 0;
+
+    while (*f) {
+        if (*f != '%') {
+            if (isspace(*f)) {
+                for ( ; *s && isspace(*s); s++) {}
+            } else if (*s != *f) {
+                return 0;
+            } else {
+                s++;
+            }
+            f++;
+            continue;
+        }
+        f++;
+        if (*f == '+') {
+            f++;
+        }
+        if (isdigit(*f)) {
+            char *new_f;
+            w = strtoul(f, &new_f, 10);
+            f = new_f;
+        } else {
+            w = -1;
+        }
+        adj = 0;
+        switch (*f++) {
+        case 'a':
+        case 'A':
+        case 'b':
+        case 'B':
+        case 'h':
+        case 'c':
+            goto fail_nl_langinfo;
+        case 'C':
+            dest = &century;
+            if (w < 0) {
+                w = 2;
+            }
+            want_century |= 2;
+            goto numeric_digits;
+        case 'd':
+        case 'e':
+            dest = &tm->tm_mday;
+            min = 1;
+            range = 31;
+            goto numeric_range;
+        case 'D':
+            s = strptime(s, "%m/%d/%y", tm);
+            if (!s) {
+                return 0;
+            }
+            break;
+        case 'H':
+            dest = &tm->tm_hour;
+            min = 0;
+            range = 24;
+            goto numeric_range;
+        case 'I':
+            dest = &tm->tm_hour;
+            min = 1;
+            range = 12;
+            goto numeric_range;
+        case 'j':
+            dest = &tm->tm_yday;
+            min = 1;
+            range = 366;
+            adj = 1;
+            goto numeric_range;
+        case 'm':
+            dest = &tm->tm_mon;
+            min = 1;
+            range = 12;
+            adj = 1;
+            goto numeric_range;
+        case 'M':
+            dest = &tm->tm_min;
+            min = 0;
+            range = 60;
+            goto numeric_range;
+        case 'n':
+        case 't':
+            for ( ; *s && isspace(*s); s++) {}
+            break;
+        case 'p':
+        case 'r':
+            goto fail_nl_langinfo;
+        case 'R':
+            s = strptime(s, "%H:%M", tm);
+            if (!s) {
+                return 0;
+            }
+            break;
+        case 'S':
+            dest = &tm->tm_sec;
+            min = 0;
+            range = 61;
+            goto numeric_range;
+        case 'T':
+            s = strptime(s, "%H:%M:%S", tm);
+            if (!s) {
+                return 0;
+            }
+            break;
+        case 'U':
+        case 'W':
+            /* Throw away result, for now. (FIXME?) */
+            dest = &dummy;
+            min = 0;
+            range = 54;
+            goto numeric_range;
+        case 'w':
+            dest = &tm->tm_wday;
+            min = 0;
+            range = 7;
+            goto numeric_range;
+        case 'x':
+        case 'X':
+            goto fail_nl_langinfo;
+        case 'y':
+            dest = &relyear;
+            w = 2;
+            want_century |= 1;
+            goto numeric_digits;
+        case 'Y':
+            dest = &tm->tm_year;
+            if (w < 0) {
+                w = 4;
+            }
+            adj = 1900;
+            want_century = 0;
+            goto numeric_digits;
+        case '%':
+            if (*s++ != '%') {
+                return 0;
+            }
+            break;
+        default:
+            return 0;
+numeric_range:
+            if (!isdigit(*s)) {
+                return 0;
+            }
+            *dest = 0;
+            for (i = 1; i <= min + range && isdigit(*s); i *= 10) {
+                *dest = *dest * 10 + *s++ - '0';
+            }
+            if (*dest - min >= (unsigned)range) {
+                return 0;
+            }
+            *dest -= adj;
+            switch ((char *)dest - (char *)tm) {
+            case offsetof(struct tm, tm_yday):
+                ;
+            }
+            goto update;
+numeric_digits:
+            neg = 0;
+            if (*s == '+') {
+                s++;
+            } else if (*s == '-') {
+                neg = 1, s++;
+            }
+            if (!isdigit(*s)) {
+                return 0;
+            }
+            for (*dest = i = 0; i < w && isdigit(*s); i++) {
+                *dest = *dest * 10 + *s++ - '0';
+            }
+            if (neg) {
+                *dest = -*dest;
+            }
+            *dest -= adj;
+            goto update;
+update:
+            // FIXME
+            ;
+        }
+    }
+    if (want_century) {
+        tm->tm_year = relyear;
+        if (want_century & 2) {
+            tm->tm_year += century * 100 - 1900;
+        } else if (tm->tm_year <= 68) {
+            tm->tm_year += 100;
+        }
+    }
+    return (char *)s;
 fail_nl_langinfo:
-	fprintf(stderr, "strptime: nl_langinfo not available");
-	return NULL;
+    fprintf(stderr, "strptime: nl_langinfo not available");
+    return NULL;
 }
