/* Main entry point for rm, accepts an array of arguments */ int cmd_rm(char **argv) { unsigned int argc; unsigned int i, scope, ret = 0; int c, opt_ind; size_t len; char *buff = NULL; argc = cli_count_args(argv); if (argc < 2) { cli_error(CL_EFAIL, "%s: insufficient arguments. Try %s --help", cmdname, cmdname); return CMD_FAILURE; } if (!rm_start(&rm)) { cli_error(CL_ENOMEM, "%s: could not initialize", cmdname); rm_end(&rm); return CMD_FAILURE; } for (c = 0, optreset = 1, optind = 0, opt_ind = 0; c != -1;) { c = getopt_long(argc, argv, "hvrfs", long_options, &opt_ind); switch (c) { case 'h': help_cmd_rm(HELP_LONG); return CMD_SUCCESS; case 'v': printf("%s\n", RM_VERSION); return CMD_SUCCESS; case 'r': rm.recursive = 1; break; case 'f': rm.force = 1; break; case 's': rm.safe = 1; break; } } if ((unsigned) optind == argc) { cli_error(CL_EFAIL, "%s: insufficient arguments. Try %s --help", cmdname, cmdname); rm_end(&rm); return CMD_FAILURE; } i = optind; while (NULL != argv[i]) { len = str_size(argv[i]) + 2; buff = (char *) realloc(buff, len); if (buff == NULL) { printf("rm: out of memory\n"); ret = 1; break; } memset(buff, 0, len); snprintf(buff, len, "%s", argv[i]); scope = rm_scope(buff); switch (scope) { case RM_BOGUS: /* FIXME */ case RM_FILE: ret += rm_single(buff); break; case RM_DIR: if (! rm.recursive) { printf("%s is a directory, use -r to remove it.\n", buff); ret ++; } else { ret += rm_recursive(buff); } break; } i++; } if (NULL != buff) free(buff); rm_end(&rm); if (ret) return CMD_FAILURE; else return CMD_SUCCESS; }
void KERNEL_CALL os_main() { vga_install(); BRAG("Eve successfully switched to P-mode with paging enabled\n"); put_logo(); idt_install(); BRAG("ISRs & IRQs are on-line\n"); sys_call_table_install(); BRAG("System call table installed\n"); timer_install(); BRAG("PIT firing rate is %d Hz\n", _TIMER_RATE); mm_install(); BRAG("Memory manager is installed\n", _TIMER_RATE); //mm_print_info(); /*{ char* p; SEPARATE DBG_DUMP(p = sbrk(2)); DBG_DUMP(sbrk(0)); DBG_DUMP(*p); DBG_DUMP(p[1]); DBG_DUMP(p[4095]); // possable page fault //DBG_DUMP(p[4096]); // page fault for sure SEPARATE DBG_DUMP(p = sbrk(4 * MEGABYTE)); DBG_DUMP(sbrk(0)); DBG_DUMP(p[0]); DBG_DUMP(p[MEGABYTE]); DBG_DUMP(p[4 * MEGABYTE]); // possable page fault //DBG_DUMP(p[5 * MEGABYTE]); // page fault for sure SEPARATE DBG_DUMP(sbrk(-4 * MEGABYTE)); DBG_DUMP(p = sbrk(0)); DBG_DUMP(p[0]); // possable page fault //DBG_DUMP(p[MEGABYTE]); // page fault for sure DBG_DUMP(sbrk(-2)); DBG_DUMP(p = sbrk(0)); //DBG_DUMP(p[0]); // page fault for sure }*/ /*{ char* p; SEPARATE; DUMP(sbrk(0)); DUMP(p = malloc(2)); DUMP(sbrk(0)); DUMP(*p); DUMP(p[1]); //DUMP(p[4095]); // possable page fault //DUMP(p[4096]); // page fault for sure char* q; SEPARATE; DUMP(q = malloc(4 * MEGABYTE)); DUMP(sbrk(0)); DUMP(q[0]); DUMP(q[MEGABYTE]); DUMP(q[4 * MEGABYTE]); // possable page fault //DUMP(p[5 * MEGABYTE]); // page fault for sure SEPARATE; MARK(free(q)); DUMP(sbrk(0)); //DUMP(q[0]); // possable page fault //DUMP(p[MEGABYTE]); // page fault for sure MARK(free(p)); DUMP(sbrk(0)); //DUMP(p[0]); // page fault for sure }*/ keyboard_install(); BRAG("Keyboard is on-line (US layout)\n"); // prepare tss segment tss_install(); //BRAG("TSS is loaded\n"); // install resource manager before starting multitasking rm_install(); // task manager task_ring_node_t* pKernelNode = tm_install(); BRAG("Multitasking is enabled\n"); //print_task_tree(); // load shell app gEshTaskOffset = (dword_t)&gKernelEnd; tm_load_task((pointer_t) gEshTaskOffset, pKernelNode, ACC_USER, PRIOR_LOW, TRUE); extern dword_t gNextTaskOffset; gPingTaskOffset = gNextTaskOffset; /* from this point on Kernel process will serve as a resources manager */ rm_start(); for (;;); }