static int compat_freebsd_modcmd(modcmd_t cmd, void *arg) { int error; switch (cmd) { case MODULE_CMD_INIT: freebsd_sysctl_init(); error = exec_add(freebsd_execsw, __arraycount(freebsd_execsw)); if (error != 0) freebsd_sysctl_fini(); return error; case MODULE_CMD_FINI: error = exec_remove(freebsd_execsw, __arraycount(freebsd_execsw)); if (error == 0) freebsd_sysctl_fini(); return error; default: return ENOTTY; } }
static int compat_sunos_modcmd(modcmd_t cmd, void *arg) { switch (cmd) { case MODULE_CMD_INIT: return exec_add(&sunos_execsw, 1); case MODULE_CMD_FINI: return exec_remove(&sunos_execsw, 1); default: return ENOTTY; } }
static int exec_elf32_modcmd(modcmd_t cmd, void *arg) { switch (cmd) { case MODULE_CMD_INIT: return exec_add(exec_elf32_execsw, __arraycount(exec_elf32_execsw)); case MODULE_CMD_FINI: return exec_remove(exec_elf32_execsw, __arraycount(exec_elf32_execsw)); default: return ENOTTY; } }
static int exec_elf32_modcmd(modcmd_t cmd, void *arg) { #if ARCH_ELFSIZE == 64 /* * If we are on a 64bit system, we don't want the 32bit execsw[] to be * added in the global array, because the exec_elf32 module only works * on 32bit systems. * * However, we need the exec_elf32 module, because it will make the 32bit * functions available for netbsd32 and linux32. * * Therefore, allow this module on 64bit systems, but make it dormant. */ (void)exec_elf32_execsw; /* unused */ switch (cmd) { case MODULE_CMD_INIT: case MODULE_CMD_FINI: return 0; default: return ENOTTY; } #else /* ARCH_ELFSIZE == 64 */ switch (cmd) { case MODULE_CMD_INIT: return exec_add(exec_elf32_execsw, __arraycount(exec_elf32_execsw)); case MODULE_CMD_FINI: return exec_remove(exec_elf32_execsw, __arraycount(exec_elf32_execsw)); default: return ENOTTY; } #endif /* ARCH_ELFSIZE == 64 */ }
static int compat_svr4_modcmd(modcmd_t cmd, void *arg) { int error; switch (cmd) { case MODULE_CMD_INIT: svr4_md_init(); error = exec_add(svr4_execsw, __arraycount(svr4_execsw)); if (error != 0) svr4_md_fini(); return error; case MODULE_CMD_FINI: error = exec_remove(svr4_execsw, __arraycount(svr4_execsw)); if (error == 0) svr4_md_fini(); return error; default: return ENOTTY; } }
int execute_work_queue (void) { union op *op; int errors; Bool update_map = False; int dosync; if (verbose) { printf ("!\n"); printf ("! executing work queue\n"); printf ("!\n"); } errors = 0; dosync = 0; for (op = work_queue.head; op; op = op->generic.next) { if (verbose) print_opcode (op); /* check to see if we have to update the keyboard mapping */ if (dosync && (dosync < 0 || op->generic.type != doKeycode || !op->keycode.target_keycode)) { XSync (dpy, 0); while (XEventsQueued (dpy, QueuedAlready) > 0) { XEvent event; XNextEvent (dpy, &event); if (event.type == MappingNotify) { /* read all MappingNotify events */ while (XCheckTypedEvent (dpy, MappingNotify, &event)) ; XRefreshKeyboardMapping (&event.xmapping); } else { fprintf (stderr, "%s: unknown event %ld\n", ProgramName, (long) event.type); } } } dosync = 0; switch (op->generic.type) { case doKeycode: if (exec_keycode (&op->keycode) < 0) errors++; if (op->keycode.target_keycode) dosync = 1; else dosync = -1; break; case doAddModifier: if (exec_add (&op->addmodifier) < 0) errors++; else update_map = True; break; case doRemoveModifier: if (exec_remove (&op->removemodifier) < 0) errors++; else update_map = True; break; case doClearModifier: if (exec_clear (&op->clearmodifier) < 0) errors++; else update_map = True; break; case doPointer: if (exec_pointer (&op->pointer) < 0) errors++; break; default: fprintf (stderr, "%s: unknown opcode %d\n", ProgramName, op->generic.type); break; } } if (update_map) { if (UpdateModifierMapping (map) < 0) errors++; } return (errors > 0 ? -1 : 0); }