/* * Copyright (c) 2014-2015, NORDUnet A/S. * See LICENSE for licensing information. */ #include #include #include #include #include #include #include "erlport.h" static int dosync(int fd) { #ifdef F_FULLFSYNC int ret = fcntl(fd, F_FULLFSYNC); #else int ret = fsync(fd); #endif return ret; } int main() { char buf[1000]; ssize_t len; /* XXX: exits when command size is 0 */ while ((len = read_command((unsigned char *)buf, sizeof(buf)-1, 2)) > 0) { buf[len] = '\0'; while (1) { int fd; fd = open(buf, O_RDONLY); if (fd == -1) { /* XXX: better errors */ write_status("openerror"); break; } if (dosync(fd) == 0) { write_status("ok"); } else if (errno == EBADF) { write_status("ebadf"); } else if (errno == EINTR) { close(fd); continue; } else { write_status("fsyncerror"); } close(fd); break; } } return 0; }