portability fixes
diff --git a/libasn1fix/check_fixer.c b/libasn1fix/check_fixer.c
index 7129a56..8808f28 100644
--- a/libasn1fix/check_fixer.c
+++ b/libasn1fix/check_fixer.c
@@ -1,15 +1,17 @@
#undef NDEBUG
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/types.h>
-#include <unistd.h>
+#include "asn1fix_internal.h"
+
+#ifdef WIN32
+#include <io.h>
+#include <direct.h>
+#define chdir _chdir
+#else
#include <dirent.h>
-#include <errno.h>
#include <sysexits.h>
+#endif
+#include <errno.h>
#include "asn1fix.h"
-#include "asn1fix_internal.h"
static int check(const char *fname,
enum asn1p_flags parser_flags,
@@ -19,12 +21,19 @@
int
main(int ac, char **av) {
+#ifdef WIN32
+ intptr_t dir;
+ struct _finddata_t c_file;
+#else
struct dirent *dp;
DIR *dir;
+#endif
int failed = 0;
int completed = 0;
enum asn1p_flags parser_flags = A1P_NOFLAGS;
enum asn1f_flags fixer_flags = A1F_NOFLAGS;
+ const char *filename;
+ int len;
int ret;
/*
@@ -44,8 +53,13 @@
fprintf(stderr, "Testing in ./tests...\n");
ret = chdir("../tests");
assert(ret == 0);
+#ifdef WIN32
+ dir = _findfirst("*.asn1", &c_file);
+ assert(dir != -1L);
+#else
dir = opendir(".");
assert(dir);
+#endif /* WIN32 */
} else {
dir = 0;
}
@@ -54,21 +68,31 @@
* Scan every *.asn1 file and try to parse and fix it.
*/
if(dir) {
+#ifdef WIN32
+ do {
+ filename = c_file.name;
+#else
while((dp = readdir(dir))) {
- int len = strlen(dp->d_name);
- if(len && strcmp(dp->d_name + len - 5, ".asn1") == 0) {
- ret = check(dp->d_name,
- parser_flags, fixer_flags);
+ filename = dp->d_name;
+#endif /* WIN32 */
+ int len = strlen(filename);
+ if(len && strcmp(filename + len - 5, ".asn1") == 0) {
+ ret = check(filename, parser_flags,fixer_flags);
if(ret) {
- fprintf(stderr,
- "FAILED: %s\n",
- dp->d_name);
+ fprintf(stderr, "FAILED: %s\n",
+ filename);
failed++;
}
completed++;
}
+#ifdef WIN32
+ } while(_findnext(dir, &c_file) == 0);
+ _findclose(dir);
+#else
}
closedir(dir);
+#endif /* WIN32 */
+
fprintf(stderr,
"Tests COMPLETED: %d\n"