#include /* POSIX gettimeofday() compatibility for WIN32 */ int gettimeofday(struct timeval *tv, void *unused) { struct _timeb tb; _ftime(&tb); tv->tv_sec = tb.time; tv->tv_usec = tb.millitm * 1000; return 0; } /* Posix dirent.h compatiblity layer for WIN32. * Copyright Kevlin Henney, 1997, 2003. All rights reserved. * Copyright Salvatore Sanfilippo ,2005. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose is hereby granted without fee, provided * that this copyright and permissions notice appear in all copies and * derivatives. * * This software is supplied "as is" without express or implied warranty. * This software was modified by Salvatore Sanfilippo for the Jim Interpreter. */ DIR *opendir(const char *name) { DIR *dir = 0; if (name && name[0]) { size_t base_length = strlen(name); const char *all = /* search pattern must end with suitable wildcard */ strchr("/\\", name[base_length - 1]) ? "*" : "/*"; if ((dir = (DIR *) Jim_Alloc(sizeof *dir)) != 0 && (dir->name = (char *) Jim_Alloc(base_length + strlen(all) + 1)) != 0) { strcat(strcpy(dir->name, name), all); if ((dir->handle = (long) _findfirst(dir->name, &dir->info)) != -1) dir->result.d_name = 0; else { /* rollback */ Jim_Free(dir->name); Jim_Free(dir); dir = 0; } } else { /* rollback */ Jim_Free(dir); dir = 0; errno = ENOMEM; } } else { errno = EINVAL; } return dir; } int closedir(DIR *dir) { int result = -1; if (dir) { if (dir->handle != -1) result = _findclose(dir->handle); Jim_Free(dir->name); Jim_Free(dir); } if (result == -1) /* map all errors to EBADF */ errno = EBADF; return result; } struct dirent *readdir(DIR *dir) { struct dirent *result = 0; if (dir && dir->handle != -1) { if (!dir->result.d_name || _findnext(dir->handle, &dir->info) != -1) { result = &dir->result; result->d_name = dir->info.name; } } else { errno = EBADF; } return result; }