/* * Copyright (c) 2014 Kungliga Tekniska Högskolan * (KTH Royal Institute of Technology, Stockholm, Sweden). */ #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[100]; ssize_t len; /* XXX: exits when command size is 0 */ while ((len = read_command(buf, sizeof(buf)-1)) > 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; }