static void close_device (ply_renderer_backend_t *backend) { ply_trace ("closing device"); free_heads (backend); ply_terminal_stop_watching_for_active_vt_change (backend->terminal, (ply_terminal_active_vt_changed_handler_t) on_active_vt_changed, backend); unload_driver (backend); }
int wifi_handler(WINDOW *win, void *ptr) { CDKSCREEN *screen; screen = initCDKScreen(win); load_driver(); show_info(screen); unload_driver(); destroyCDKScreen(screen); return 0; }
CRYSTAX_LOCAL int umount(const char *target, int flags) { DBG("target=%s, flags=%d", target, flags); if (target == NULL || *target == '\0') { ERR("empty target"); errno = EINVAL; return -1; } scope_lock_t lock(mount_table_mutex); abspath_t abspath(target); for (size_t i = mount_table_pos; i > 0; --i) { driver_t *d = mount_table[i - 1]; if (d->root().length() > abspath.length() && d->root().subpath(abspath)) { ERR("unmount failed: %s busy", abspath.c_str()); errno = EBUSY; return -1; } if (d->root() == abspath) { DBG("unmount target %s", abspath.c_str()); unload_driver(d); // Shift above records for (size_t j = i - 1; j < (size_t)mount_table_pos - 1; ++j) mount_table[j] = mount_table[j + 1]; --mount_table_pos; return 0; } } return system_umount2(target, flags); }