#include "driver.h" #include #include #include #include #include #include void initctl_drv(hid_t killswitch) { struct ufs_request res; char buf[64]; const size_t buflen = sizeof buf; while (!c0_fs_wait(buf, buflen, &res)) { switch (res.op) { case VFSOP_OPEN: c0_fs_respond(NULL, res.len == 0 ? 0 : -1, 0); break; case VFSOP_WRITE: /* null terminate */ if (res.len > buflen - 1) res.len = buflen - 1; buf[res.len] = '\0'; /* cut at first whitespace */ for (size_t i = 0; buf[i]; i++) { if (isspace(buf[i])) { buf[i] = '\0'; break; } } if (!strcmp(buf, "halt")) { _sys_write(killswitch, "halt", 4, 0, 0); } if (!strcmp(buf, "intr")) { _sys_write(killswitch, "intr", 4, 0, 0); } c0_fs_respond(NULL, res.len, 0); break; default: c0_fs_respond(NULL, -ENOSYS, 0); break; } } exit(1); }