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;
	}
}
示例#3
0
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;
        }
}
示例#4
0
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 */
}
示例#5
0
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;
	}
}
示例#6
0
文件: handle.c 项目: aosm/X11apps
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);
}