unsigned long long unix_time, windows_time;
const time_t MILLISECONDS_BETWEEN_1601_AND_1970 = 11644473600000;
- // Ignore the timezone parameter
+ /* Ignore the timezone parameter */
(void)tzp;
/*
int sigaction(int sig, const struct sigaction *act,
struct sigaction *oact)
{
- errno = ENOSYS;
- return (-1);
+ int rc = 0;
+ void (*prev_handler)(int);
+
+ prev_handler = signal(sig, act->sa_handler);
+ if (oact != NULL)
+ oact->sa_handler = prev_handler;
+
+ if (prev_handler == SIG_ERR)
+ rc = -1;
+
+ return rc;
}
int lstat(const char * path, struct stat * buf)
return (-1);
}
-// This is assumed to be used only by the network code,
-// and so doesn't try and handle any of the other cases
+/*
+ * This is assumed to be used only by the network code,
+ * and so doesn't try and handle any of the other cases
+ */
int fcntl(int fildes, int cmd, ...)
{
- // non-blocking mode doesn't work the same as in BSD sockets,
- // so ignore it.
+ /*
+ * non-blocking mode doesn't work the same as in BSD sockets,
+ * so ignore it.
+ */
#if 0
va_list ap;
int val, opt, status;
int posix_fallocate(int fd, off_t offset, off_t len)
{
- log_err("%s is not implemented\n", __func__);
- errno = ENOSYS;
- return (-1);
+ const int BUFFER_SIZE = 64*1024*1024;
+ int rc = 0;
+ char *buf;
+ unsigned int write_len;
+ unsigned int bytes_written;
+ off_t bytes_remaining = len;
+
+ if (len == 0 || offset < 0)
+ return EINVAL;
+
+ buf = malloc(BUFFER_SIZE);
+
+ if (buf == NULL)
+ return ENOMEM;
+
+ memset(buf, 0, BUFFER_SIZE);
+
+ if (lseek(fd, offset, SEEK_SET) == -1)
+ return errno;
+
+ while (bytes_remaining > 0) {
+ if (bytes_remaining < BUFFER_SIZE)
+ write_len = (unsigned int)bytes_remaining;
+ else
+ write_len = BUFFER_SIZE;
+
+ bytes_written = _write(fd, buf, write_len);
+ if (bytes_written == -1) {
+ rc = errno;
+ break;
+ }
+
+ bytes_remaining -= bytes_written;
+ }
+
+ free(buf);
+ return rc;
}
int ftruncate(int fildes, off_t length)
return ENOSYS;
}
-// Windows doesn't support advice for memory pages. Just ignore it.
+/* Windows doesn't support advice for memory pages. Just ignore it. */
int msync(void *addr, size_t len, int flags)
{
log_err("%s is not implemented\n", __func__);
int rc;
if (timeout != -1)
- to = &tv;
+ to = &tv;
to->tv_sec = timeout / 1000;
to->tv_usec = (timeout % 1000) * 1000;
if (fds[i].events & POLLOUT)
FD_SET(fds[i].fd, &writefds);
- FD_SET(fds[i].fd, &exceptfds);
+ FD_SET(fds[i].fd, &exceptfds);
}
rc = select(nfds, &readfds, &writefds, &exceptfds, to);