int main(int argc, char *argv[]) { int status; while(TRUE){ printf("FERNANDO&BRUNO@SHELL$ "); str = (char *)calloc(MAX_COM, sizeof (char)); command = (char *)calloc(MAX_PAR, sizeof (char)); parameters = aloca(MAX_PAR, MAX_PAR); read_commandline(str); if(!strcasecmp("exit\n", str)) break; if(!strcasecmp("\n", str)) continue; if(fork()==0){ cont = conta_pipe(str); if(cont > 0){ cria_pipe(); } else{ read_command(str, command, parameters); execvp(command, parameters); } } else wait(&status); } return 0; }
static int read_options(options& opt, std::vector<std::string> const& args) { auto tmp_args(args); int ret_commandline = read_commandline(opt, tmp_args); if(ret_commandline != EXIT_SUCCESS) return ret_commandline; int ret_action = read_action(opt, tmp_args); if(!tmp_args.empty()) { std::cerr << "Unrecognized commandline argument(s):"; for(auto const& arg : tmp_args) std::cerr << ' ' << arg; std::cerr << std::endl; return EXIT_FAILURE; } return ret_action; }
int main(int ac, char *av[]) { int r; FILE *f; /* read command line */ cmd = read_commandline(ac, av); /* if --keyfile requested, read one (normal mode) or two (change key mode) keywords from file, which may be "-" for stdin. Note that in this case, we ignore any keywords given on the command line etc. */ if (cmd.keyfile) { if (strcmp(cmd.keyfile, "-")==0) { f = stdin; } else { f = fopen(cmd.keyfile, "r"); if (!f) { fprintf(stderr, "%s: could not read key from %s: %s\n", cmd.name, cmd.keyfile, strerror(errno)); exit(1); } } cmd.keyword = xreadline(f, cmd.name); if (cmd.keyword==NULL) { /* end of file */ fprintf(stderr, "%s: error reading keyfile\n", cmd.name); exit(1); } if (cmd.mode==KEYCHANGE) { cmd.keyword2 = xreadline(f, cmd.name); if (cmd.keyword2==NULL) { /* end of file */ fprintf(stderr, "%s: error reading keyfile\n", cmd.name); exit(1); } } if (strcmp(cmd.keyfile, "-")!=0) { fclose(f); } } /* read keyword from terminal if necessary */ if (cmd.keyword==NULL) { if (!cmd.prompt) { switch (cmd.mode) { case ENCRYPT: default: cmd.prompt = "Enter encryption key: "; break; case DECRYPT: case CAT: cmd.prompt = "Enter decryption key: "; break; case KEYCHANGE: cmd.prompt = "Enter old key: "; break; case UNIXCRYPT: cmd.prompt = "Enter key: "; break; } } cmd.keyword = readkey(cmd.prompt, "", cmd.name); if (cmd.keyword==NULL) { /* end of file: exit gracefully */ exit(0); } /* in some circumstances, prompt for the key a second time */ if (cmd.timid && cmd.mode==ENCRYPT) { char *repeat; repeat = readkey(cmd.prompt, "(repeat) ", cmd.name); if (repeat==NULL || strcmp(repeat, cmd.keyword)!=0) { fprintf(stderr, "Sorry, the keys you entered did not match.\n"); exit(7); } } } /* read keyword2 from terminal if necessary */ if (cmd.mode==KEYCHANGE && cmd.keyword2==NULL) { if (cmd.prompt2 == NULL) { cmd.prompt2 = "Enter new key: "; } cmd.keyword2 = readkey(cmd.prompt2, "", cmd.name); if (cmd.keyword2==NULL) { /* end of file: exit gracefully */ exit(0); } /* in some circumstances, prompt for the key a second time */ if (cmd.timid) { char *repeat; repeat = readkey(cmd.prompt2, "(repeat) ", cmd.name); if (repeat==NULL || strcmp(repeat, cmd.keyword2)!=0) { fprintf(stderr, "Sorry, the keys you entered did not match.\n"); exit(7); } } } #ifdef __CYGWIN__ /* reset stdin/stdout to binary mode under Windows */ setmode(0,O_BINARY); setmode(1,O_BINARY); #endif /* filter mode */ if (cmd.filter) { switch (cmd.mode) { case ENCRYPT: default: r = ccencrypt_streams(stdin, stdout, cmd.keyword); break; case DECRYPT: case CAT: r = ccdecrypt_streams(stdin, stdout, cmd.keyword); break; case KEYCHANGE: r = cckeychange_streams(stdin, stdout, cmd.keyword, cmd.keyword2); break; case UNIXCRYPT: r = unixcrypt_streams(stdin, stdout, cmd.keyword); break; } if (r) { fprintf(stderr, "%s: %s\n", cmd.name, ccrypt_error(r)); if (r==-2 && (ccrypt_errno==CCRYPT_EFORMAT || ccrypt_errno==CCRYPT_EMISMATCH)) { return 4; } else { return 3; } } fflush(stdout); return 0; } /* non-filter mode: traverse files */ r = traverse_toplevel(cmd.infiles, cmd.count); if (r==1) { return 4; } else if (r) { return 8; } else { return 0; } }
int main(int ac, char *av[]) { int r; FILE *f; #if ENABLE_NLS setlocale (LC_ALL, ""); bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain(GETTEXT_PACKAGE); #endif /* read command line */ cmd = read_commandline(ac, av); /* if --keyfile requested, read one (normal mode) or two (change key mode) keywords from file, which may be "-" for stdin. Note that in this case, we ignore any keywords given on the command line etc. */ if (cmd.keyfile) { if (strcmp(cmd.keyfile, "-")==0) { f = stdin; } else { f = fopen(cmd.keyfile, "r"); if (!f) { fprintf(stderr, _("%s: could not read key from %s: %s\n"), cmd.name, cmd.keyfile, strerror(errno)); exit(9); } } cmd.keyword = xreadline(f, cmd.name); if (cmd.keyword==NULL) { /* end of file */ fprintf(stderr, _("%s: error reading keyfile\n"), cmd.name); exit(9); } if (cmd.mode==KEYCHANGE) { cmd.keyword2 = xreadline(f, cmd.name); if (cmd.keyword2==NULL) { /* end of file */ fprintf(stderr, _("%s: error reading keyfile\n"), cmd.name); exit(9); } } if (strcmp(cmd.keyfile, "-")!=0) { fclose(f); } } /* read keyword from terminal if necessary */ if (cmd.keyword==NULL) { if (!cmd.prompt) { switch (cmd.mode) { case ENCRYPT: default: cmd.prompt = _("Enter encryption key: "); break; case DECRYPT: case CAT: cmd.prompt = _("Enter decryption key: "); break; case KEYCHANGE: cmd.prompt = _("Enter old key: "); break; case UNIXCRYPT: cmd.prompt = _("Enter key: "); break; } } cmd.keyword = readkey(cmd.prompt, "", cmd.name); if (cmd.keyword==NULL) { /* end of file: exit gracefully */ fprintf(stderr, _("%s: no key given\n"), cmd.name); exit(9); } /* in some circumstances, prompt for the key a second time */ if (cmd.timid && cmd.mode==ENCRYPT) { char *repeat; repeat = readkey(cmd.prompt, _("(repeat) "), cmd.name); if (repeat==NULL || strcmp(repeat, cmd.keyword)!=0) { fprintf(stderr, _("Sorry, the keys you entered did not match.\n")); exit(7); } } } /* read keyword2 from terminal if necessary */ if (cmd.mode==KEYCHANGE && cmd.keyword2==NULL) { if (cmd.prompt2 == NULL) { cmd.prompt2 = _("Enter new key: "); } cmd.keyword2 = readkey(cmd.prompt2, "", cmd.name); if (cmd.keyword2==NULL) { /* end of file: exit gracefully */ fprintf(stderr, _("%s: no key given\n"), cmd.name); exit(9); } /* in some circumstances, prompt for the key a second time */ if (cmd.timid) { char *repeat; repeat = readkey(cmd.prompt2, _("(repeat) "), cmd.name); if (repeat==NULL || strcmp(repeat, cmd.keyword2)!=0) { fprintf(stderr, _("Sorry, the keys you entered did not match.\n")); exit(7); } } } /* reset stdin/stdout to binary mode under Windows */ setmode(0,O_BINARY); setmode(1,O_BINARY); /* if --keyref given, check encryption keys against named file */ if (cmd.keyref && (cmd.mode == ENCRYPT || cmd.mode == KEYCHANGE)) { f = fopen(cmd.keyref, "rb"); if (!f) { fprintf(stderr, _("%s: could not open %s: %s\n"), cmd.name, cmd.keyref, strerror(errno)); exit(10); } if (cmd.mode == ENCRYPT) { r = keycheck_stream(f, cmd.keyword); } else { r = keycheck_stream(f, cmd.keyword2); } if (r == -2 && (ccrypt_errno == CCRYPT_EFORMAT || ccrypt_errno == CCRYPT_EMISMATCH)) { fprintf(stderr, _("The encryption key does not match the reference file.\n")); exit(10); } else if (r==-2 || r==-1) { /* e.g. i/o error: fatal */ fprintf(stderr, "%s: %s: %s\n", cmd.name, cmd.keyref, ccrypt_error(r)); exit(10); } } /* filter mode */ if (cmd.filter) { switch (cmd.mode) { case ENCRYPT: default: r = ccencrypt_streams(stdin, stdout, cmd.keyword); break; case DECRYPT: case CAT: r = ccdecrypt_streams(stdin, stdout, cmd.keyword); break; case KEYCHANGE: r = cckeychange_streams(stdin, stdout, cmd.keyword, cmd.keyword2); break; case UNIXCRYPT: r = unixcrypt_streams(stdin, stdout, cmd.keyword); break; } if (r) { fprintf(stderr, "%s: %s\n", cmd.name, ccrypt_error(r)); if (r==-2 && (ccrypt_errno==CCRYPT_EFORMAT || ccrypt_errno==CCRYPT_EMISMATCH)) { return 4; } else { return 3; } } fflush(stdout); return 0; } /* non-filter mode: traverse files */ r = traverse_toplevel(cmd.infiles, cmd.count); if (r==1) { return 4; } else if (r) { return 8; } else { return 0; } }