void gvinum_stop(int argc, char **argv) { int err, fileid; fileid = kldfind(GVINUMMOD); if (fileid == -1) { warn("cannot find " GVINUMMOD); return; } /* * This little hack prevents that we end up in an infinite loop in * g_unload_class(). gv_unload() will return EAGAIN so that the GEOM * event thread will be free for the g_wither_geom() call from * gv_unload(). It's silly, but it works. */ printf("unloading " GVINUMMOD " kernel module... "); fflush(stdout); if ((err = kldunload(fileid)) != 0 && (errno == EAGAIN)) { sleep(1); err = kldunload(fileid); } if (err != 0) { printf(" failed!\n"); warn("cannot unload " GVINUMMOD); return; } printf("done\n"); exit(0); }
int main( int argc, char** argv ) { struct kld_file_stat stat; int c, fileid, force, opt; char *filename; filename = NULL; opt = OPT_NULL; while ( ( c = getopt( argc, argv, "finv" ) ) != -1 ) { switch ( c ) { case 'f': opt |= OPT_FORCE; break; case 'i': opt |= OPT_ID; break; case 'n': break; case 'v': opt |= OPT_VERBOSE; break; default: usage(); } } argc -= optind; argv += optind; if ( argc == 0 ) usage(); while ( ( filename = *argv++ ) != NULL ) { if ( opt & OPT_ID ) { fileid = atoi( filename ); if ( fileid < 0 ) errx( EXIT_FAILURE, "Invalid ID %s", optarg ); } else { if ( ( fileid = kldfind( filename ) ) < 0 ) errx( EXIT_FAILURE, "can't find file %s", filename ); } if ( opt & OPT_VERBOSE ) { stat.version = sizeof( stat ); if ( kldstat( fileid, &stat ) < 0 ) err( EXIT_FAILURE, "can't stat file" ); (void) printf( "Unloading %s, id=%d\n", stat.name, fileid ); } if ( opt & OPT_FORCE ) force = LINKER_UNLOAD_FORCE; else force = LINKER_UNLOAD_NORMAL; if ( kldunloadf( fileid, force ) < 0 ) err( EXIT_FAILURE, "can't unload file" ); } return ( EXIT_SUCCESS ); }
int main(int argc, char **argv) { int line, tokens; char buffer[BUFSIZ], *inputline, *token[GV_MAXARGS]; /* Load the module if necessary. */ if (kldfind(GVINUMMOD) < 0 && kldload(GVINUMMOD) < 0) err(1, GVINUMMOD ": Kernel module not available"); /* Arguments given on the command line. */ if (argc > 1) { argc--; argv++; parseline(argc, argv); /* Interactive mode. */ } else { for (;;) { inputline = readline("gvinum -> "); if (inputline == NULL) { if (ferror(stdin)) { err(1, "can't read input"); } else { printf("\n"); exit(0); } } else if (*inputline) { add_history(inputline); strcpy(buffer, inputline); free(inputline); line++; /* count the lines */ tokens = gv_tokenize(buffer, token, GV_MAXARGS); if (tokens) parseline(tokens, token); } } } exit(0); }
int main(int argc, char** argv) { int c; int verbose = 0; int fileid = 0; int quiet = 0; char* filename = NULL; char* modname = NULL; char* p; while ((c = getopt(argc, argv, "i:m:n:qv")) != -1) switch (c) { case 'i': fileid = (int)strtoul(optarg, &p, 10); if (*p != '\0') usage(); break; case 'm': modname = optarg; break; case 'n': filename = optarg; break; case 'q': quiet = 1; break; case 'v': verbose = 1; break; default: usage(); } argc -= optind; argv += optind; if (argc != 0) usage(); if (modname != NULL) { int modid; struct module_stat stat; if ((modid = modfind(modname)) < 0) { if (!quiet) warn("can't find module %s", modname); return 1; } else if (quiet) { return 0; } stat.version = sizeof(struct module_stat); if (modstat(modid, &stat) < 0) warn("can't stat module id %d", modid); else { printf("Id Refs Name\n"); printf("%3d %4d %s\n", stat.id, stat.refs, stat.name); } return 0; } if (filename != NULL) { if ((fileid = kldfind(filename)) < 0) err(1, "can't find file %s", filename); } printf("Id Refs Address%*c Size Name\n", POINTER_WIDTH - 7, ' '); if (fileid != 0) printfile(fileid, verbose); else for (fileid = kldnext(0); fileid > 0; fileid = kldnext(fileid)) printfile(fileid, verbose); return 0; }
int main(int argc, char** argv) { int c; int humanized = 0; int verbose = 0; int fileid = 0; int quiet = 0; char* filename = NULL; char* modname = NULL; char* p; while ((c = getopt(argc, argv, "dhi:m:n:qv")) != -1) switch (c) { case 'd': showdata = 1; break; case 'h': humanized = 1; break; case 'i': fileid = (int)strtoul(optarg, &p, 10); if (*p != '\0') usage(); break; case 'm': modname = optarg; break; case 'n': filename = optarg; break; case 'q': quiet = 1; break; case 'v': verbose = 1; break; default: usage(); } argc -= optind; argv += optind; if (argc != 0) usage(); if (modname != NULL) { int modid; struct module_stat stat; if ((modid = modfind(modname)) < 0) { if (!quiet) warn("can't find module %s", modname); return 1; } else if (quiet) { return 0; } stat.version = sizeof(struct module_stat); if (modstat(modid, &stat) < 0) warn("can't stat module id %d", modid); else { if (showdata) { printf("Id Refs Name data..(int, uint, ulong)\n"); printf("%3d %4d %s (%d, %u, 0x%lx)\n", stat.id, stat.refs, stat.name, stat.data.intval, stat.data.uintval, stat.data.ulongval); } else { printf("Id Refs Name\n"); printf("%3d %4d %s\n", stat.id, stat.refs, stat.name); } } return 0; } if (filename != NULL) { if ((fileid = kldfind(filename)) < 0) { if (!quiet) warn("can't find file %s", filename); return 1; } else if (quiet) { return 0; } } if (humanized) printf("Id Refs Address%*c %5s Name\n", POINTER_WIDTH - 7, ' ', "Size"); else printf("Id Refs Address%*c %8s Name\n", POINTER_WIDTH - 7, ' ', "Size"); if (fileid != 0) printfile(fileid, verbose, humanized); else for (fileid = kldnext(0); fileid > 0; fileid = kldnext(fileid)) printfile(fileid, verbose, humanized); return 0; }