--- /dev/null
+// compatibility routines, non reentrant ....\r
+\r
+#include <string.h> \r
+#include <time.h>\r
+\r
+struct tm* localtime_r(const time_t* t, struct tm* r) {\r
+ struct tm * temp;\r
+ temp = localtime(t);\r
+ memcpy(r,temp,sizeof(struct tm));\r
+ return(r);\r
+}\r
+\r
+struct tm* gmtime_r(const time_t* t, struct tm* r) {\r
+ struct tm * temp;\r
+ temp = gmtime(t);\r
+ memcpy(r,temp,sizeof(struct tm));\r
+ return r;\r
+}\r
+\r
+char* ctime_r (const time_t* t, char* buf) {\r
+ char * temp;\r
+ temp = asctime(localtime(t));\r
+ strcpy(buf,temp);\r
+ return(buf);\r
+}\r
+\r
+/*\r
+ s \r
+ Points to the string from which to extract tokens. \r
+\r
+ delim \r
+ Points to a null-terminated set of delimiter characters. \r
+\r
+ save_ptr\r
+ Is a value-return parameter used by strtok_r() to record its progress through s1. \r
+*/\r
+\r
+\r
+char * strtok_r (char *s, const char *delim, char **save_ptr) {\r
+ char *token;\r
+\r
+ if (s == NULL) s = *save_ptr;\r
+\r
+ /* Scan leading delimiters. */\r
+ s += strspn(s, delim);\r
+ if (*s == '\0')\r
+ {\r
+ *save_ptr = s;\r
+ return NULL;\r
+ }\r
+\r
+ /* Find the end of the token. */\r
+ token = s;\r
+ s = strpbrk (token, delim);\r
+ if (s == NULL) {\r
+ /* This token finishes the string. */\r
+ *save_ptr = token;\r
+ while (**save_ptr != '\0') (*save_ptr)++;\r
+ } else\r
+ {\r
+ /* Terminate the token and make *SAVE_PTR point past it. */\r
+ *s = '\0';\r
+ *save_ptr = s + 1;\r
+ }\r
+ return token;\r
+}\r
+\r