static void failwith_errno(void)
{
- char buf[256];
+ char buf[256];
char buf2[280];
memset(buf, '\0', sizeof(buf));
//strerror_r(errno, buf, sizeof(buf));
if (fsync(c_fd) != 0) failwith_errno();
CAMLreturn(Val_unit);
}
-
CAMLprim value stub_unixext_get_max_fd (value unit)
{
memcpy(FDSET_OF_VALUE(nrset), &r, sizeof(fd_set));
memcpy(FDSET_OF_VALUE(nwset), &w, sizeof(fd_set));
memcpy(FDSET_OF_VALUE(neset), &e, sizeof(fd_set));
-
+
ret = caml_alloc_small(3, 0);
Field(ret, 0) = nrset;
Field(ret, 1) = nwset;
ret = caml_alloc(sizeof(struct fdset_t), Abstract_tag);
memcpy(FDSET_OF_VALUE(ret), &r, sizeof(fd_set));
-
+
CAMLreturn(ret);
}
static void caml_pthread_check(int retcode, char *msg)
{
- char * err;
- int errlen, msglen;
- value str;
-
- if (retcode == 0) return;
- err = strerror(retcode);
- msglen = strlen(msg);
- errlen = strlen(err);
- str = alloc_string(msglen + 2 + errlen);
- memmove (&Byte(str, 0), msg, msglen);
- memmove (&Byte(str, msglen), ": ", 2);
- memmove (&Byte(str, msglen + 2), err, errlen);
- raise_sys_error(str);
+ char * err;
+ int errlen, msglen;
+ value str;
+
+ if (retcode == 0) return;
+ err = strerror(retcode);
+ msglen = strlen(msg);
+ errlen = strlen(err);
+ str = alloc_string(msglen + 2 + errlen);
+ memmove (&Byte(str, 0), msg, msglen);
+ memmove (&Byte(str, msglen), ": ", 2);
+ memmove (&Byte(str, msglen + 2), err, errlen);
+ raise_sys_error(str);
}
// from http://caml.inria.fr/mantis/view.php?id=4104
pthread_mutex_t *mtx = Mutex_val(v_mtx);
double timeo = Double_val(v_timeo);
struct timespec ts;
+
ts.tv_sec = timeo;
ts.tv_nsec = (timeo - ts.tv_sec) * 1e9;
enter_blocking_section();
caml_pthread_check(ret, "Condition.timedwait");
CAMLreturn(Val_true);
}
-