int cmd_create(void) { if( opt_verbosity > 0 ) { fprintf(stderr, "Creating Channel %s\n", opt_chan_name); } if( opt_msg_cnt < 1 ) { fprintf(stderr, "Message count must be greater than zero, not %"PRIuPTR".\n", opt_msg_cnt); return -1; } if( opt_msg_size < 1 ) { fprintf(stderr, "Message size must be greater than zero, not %"PRIuPTR".\n", opt_msg_size); return -1; } ach_status_t i; { ach_create_attr_t attr; ach_create_attr_init(&attr); if( opt_truncate ) attr.truncate = 1; i = ach_create( opt_chan_name, opt_msg_cnt, opt_msg_size, &attr ); } if( ! (opt_1 && i == ACH_EEXIST) ) { check_status( i, "Error creating channel '%s'", opt_chan_name ); } else i = ACH_OK; if( opt_mode > 0 ) { i = cmd_chmod(); } return i; }
int main(int argc, const char *argv[]) { io_func* io; Volume* volume; TestByteOrder(); if(argc < 3) { printf("usage: %s <image-file> <ls|cat|mv|symlink|mkdir|add|rm|chmod|extract|extractall|rmall|addall|grow|getattr|debug> <arguments>\n", argv[0]); return 0; } io = openFlatFile(argv[1]); if(io == NULL) { fprintf(stderr, "error: Cannot open image-file.\n"); return 1; } volume = openVolume(io); if(volume == NULL) { fprintf(stderr, "error: Cannot open volume.\n"); CLOSE(io); return 1; } if(argc > 1) { if(strcmp(argv[2], "ls") == 0) { cmd_ls(volume, argc - 2, argv + 2); } else if(strcmp(argv[2], "cat") == 0) { cmd_cat(volume, argc - 2, argv + 2); } else if(strcmp(argv[2], "mv") == 0) { cmd_mv(volume, argc - 2, argv + 2); } else if(strcmp(argv[2], "symlink") == 0) { cmd_symlink(volume, argc - 2, argv + 2); } else if(strcmp(argv[2], "mkdir") == 0) { cmd_mkdir(volume, argc - 2, argv + 2); } else if(strcmp(argv[2], "add") == 0) { cmd_add(volume, argc - 2, argv + 2); } else if(strcmp(argv[2], "rm") == 0) { cmd_rm(volume, argc - 2, argv + 2); } else if(strcmp(argv[2], "chmod") == 0) { cmd_chmod(volume, argc - 2, argv + 2); } else if(strcmp(argv[2], "extract") == 0) { cmd_extract(volume, argc - 2, argv + 2); } else if(strcmp(argv[2], "extractall") == 0) { cmd_extractall(volume, argc - 2, argv + 2); } else if(strcmp(argv[2], "rmall") == 0) { cmd_rmall(volume, argc - 2, argv + 2); } else if(strcmp(argv[2], "addall") == 0) { cmd_addall(volume, argc - 2, argv + 2); } else if(strcmp(argv[2], "grow") == 0) { cmd_grow(volume, argc - 2, argv + 2); } else if(strcmp(argv[2], "getattr") == 0) { cmd_getattr(volume, argc - 2, argv + 2); } else if(strcmp(argv[2], "debug") == 0) { if(argc > 3 && strcmp(argv[3], "verbose") == 0) { debugBTree(volume->catalogTree, TRUE); } else { debugBTree(volume->catalogTree, FALSE); } } } closeVolume(volume); CLOSE(io); return 0; }
/* execute command */ EXPORT INT exec_cmd(B *cmd) { INT ac; B *av[N_ARGS]; ac = setup_param(cmd, av); if (ac < 1) return 0; if (strcmp(av[0], "date") == 0) { cmd_date(ac, av); } else if (strcmp(av[0], "attach") == 0) { cmd_attach(ac, av); } else if (strcmp(av[0], "detach") == 0) { cmd_detach(ac, av); } else if (strcmp(av[0], "mkdir") == 0) { cmd_mkdir(ac, av); } else if (strcmp(av[0], "rmdir") == 0) { cmd_rmdir(ac, av); } else if (strcmp(av[0], "pwd") == 0) { cmd_pwd(ac, av); } else if (strcmp(av[0], "cd") == 0) { cmd_cd(ac, av); } else if (strcmp(av[0], "rm") == 0) { cmd_rm(ac, av); } else if (strcmp(av[0], "mv") == 0) { cmd_mv(ac, av); } else if (strcmp(av[0], "ls") == 0) { cmd_ls(ac, av); } else if (strcmp(av[0], "tp") == 0 || strcmp(av[0], "tpx") == 0) { cmd_tp(ac, av); } else if (strcmp(av[0], "cp") == 0) { cmd_cp(ac, av); } else if (strcmp(av[0], "trunc") == 0) { cmd_trunc(ac, av); } else if (strcmp(av[0], "df") == 0) { cmd_df(ac, av); } else if (strcmp(av[0], "sync") == 0) { cmd_sync(ac, av); } else if (strcmp(av[0], "chmod") == 0) { cmd_chmod(ac, av); } else if (strcmp(av[0], "ref") == 0) { cmd_ref(ac, av); } else if (strcmp(av[0], "load") == 0) { cmd_load(ac, av); } else if (strcmp(av[0], "loadspg") == 0) { cmd_loadspg(ac, av); } else if (strcmp(av[0], "unload") == 0) { cmd_unload(ac, av); } else if (strcmp(av[0], "call") == 0) { cmd_call(ac, av); } else if (strncmp(av[0], "?", 1) == 0) { P("date [y m d [h m s]]\n"); P("attach devnm connm\n"); P("detach connm\n"); P("cd dir\n"); P("pwd \n"); P("ls [-t][-l][dir]\n"); P("mkdir dir [mode]\n"); P("rmdir dir\n"); P("rm path\n"); P("mv o-path n-path\n"); P("trunc path len\n"); P("df path\n"); P("sync [path [d]]\n"); P("chmod path mode\n"); P("tp path [ofs len]\n"); P("tpx path [ofs len]\n"); P("cp s-path d-path/dir [wofs [wlen]]\n"); P("ref [item]\n"); P("call addr [p1 p2 p3]\n"); P("load path\n"); P("loadspg path [arg ...]\n"); P("unload progid\n"); #ifdef NET_SAMPLE P("net execute network sample\n"); } else if (strcmp(av[0], "net") == 0) { IMPORT void net_test(void); net_test(); #endif } else { return 0; } return 1; }
int main( int argc, char **argv ) { /* Parse Options */ int c, i = 0; opterr = 0; while( (c = getopt( argc, argv, "C:U:D:F:vn:m:o:1thH?V")) != -1 ) { switch(c) { case 'C': /* create */ parse_cmd( cmd_create, optarg ); break; case 'U': /* unlink */ parse_cmd( cmd_unlink, optarg ); break; case 'D': /* dump */ parse_cmd( cmd_dump, optarg ); break; case 'F': /* file */ parse_cmd( cmd_file, optarg ); break; case 'n': /* msg-size */ opt_msg_size = (size_t)atoi( optarg ); break; case 'm': /* msg-cnt */ opt_msg_cnt = (size_t)atoi( optarg ); break; case 'o': /* mode */ opt_mode = parse_mode( optarg ); break; case 't': /* truncate */ opt_truncate++; break; case 'v': /* verbose */ opt_verbosity++; break; case '1': /* once */ opt_1++; break; case 'V': /* version */ ach_print_version("ach"); exit(EXIT_SUCCESS); case '?': /* help */ case 'h': case 'H': puts( "Usage: ach [OPTION...] [mk|rm|chmod|dump|file] [mode] [channel-name]\n" "General tool to interact with ach channels\n" "\n" "Options:\n" /* " -C CHANNEL-NAME, Create a new channel\n" */ /* " -U CHANNEL-NAME, Unlink (delete) a channel\n" */ /* " -D CHANNEL-NAME, Dump info about channel\n" */ " -1, With 'mk', accept an already created channel\n" /* " -F CHANNEL-NAME, Print filename for channel (Linux-only)\n" */ " -m MSG-COUNT, Number of messages to buffer\n" " -n MSG-SIZE, Nominal size of a message\n" " -o OCTAL, Mode for created channel\n" " -t, Truncate and reinit newly create channel.\n" " WARNING: this will clobber processes\n" " Currently using the channel.\n" " -v, Make output more verbose\n" " -?, Give program help list\n" " -V, Print program version\n" "\n" "Examples:\n" " ach mk foo Create channel 'foo' with default buffer sizes.\n" " ach mk foo -m 10 -n 256 Create channel 'foo' which can buffer up to 10\n" " messages of nominal size 256 bytes.\n" " Bigger/smaller messages are OK, up to 10*256\n" " bytes max (only one message of that size can be\n" " buffered at a time).\n" " ach rm foo Remove channel 'foo'\n" " ach mk -1 foo Create channel 'foo' unless it already exists,\n" " in which case leave it alone.\n" " ach mk foo -o 600 Create channel 'foo' with octal permissions\n" " '600'. Note that r/w (6) permission necessary\n" " for channel access in order to properly\n" " synchronize.\n" " ach chmod 666 foo Set permissions of channel 'foo' to '666'\n" " ach search foo Search mDNS for host and port of channel 'foo'\n" "\n" "Report bugs to <*****@*****.**>" ); exit(EXIT_SUCCESS); default: posarg(i++, optarg); } } while( optind < argc ) { posarg(i++, argv[optind++]); } /* Be Verbose */ if( opt_verbosity >= 2 ) { fprintf(stderr, "Verbosity: %d\n", opt_verbosity); fprintf(stderr, "Channel Name: %s\n", opt_chan_name); fprintf(stderr, "Message Size: %"PRIuPTR"\n", opt_msg_size); fprintf(stderr, "Message Cnt: %"PRIuPTR"\n", opt_msg_cnt); } /* Do Something */ int r; errno = 0; if( opt_command ) { r = opt_command(); } else if ( opt_chan_name && opt_mode >= 0 ) { r = cmd_chmod(); } else{ fprintf(stderr, "Must specify a command. Say `ach -H' for help.\n"); r = EXIT_FAILURE; } cleanup(); return r; }
int main(int argc, const char *argv[]) { io_func* io; Volume* volume; AbstractFile* image; int argOff; TestByteOrder(); if(argc < 3) { printf("usage: %s <image-file> (-k <key>) <ls|cat|mv|mkdir|add|rm|chmod|extract|extractall|rmall|addall|grow|untar> <arguments>\n", argv[0]); return 0; } argOff = 2; if(strstr(argv[1], ".dmg")) { image = createAbstractFileFromFile(fopen(argv[1], "rb")); if(argc > 3) { if(strcmp(argv[2], "-k") == 0) { image = createAbstractFileFromFileVault(image, argv[3]); argOff = 4; } } io = openDmgFilePartition(image, -1); } else { io = openFlatFile(argv[1]); } if(io == NULL) { fprintf(stderr, "error: Cannot open image-file.\n"); return 1; } volume = openVolume(io); if(volume == NULL) { fprintf(stderr, "error: Cannot open volume.\n"); CLOSE(io); return 1; } if(argc > argOff) { if(strcmp(argv[argOff], "ls") == 0) { cmd_ls(volume, argc - argOff, argv + argOff); } else if(strcmp(argv[argOff], "cat") == 0) { cmd_cat(volume, argc - argOff, argv + argOff); } else if(strcmp(argv[argOff], "mv") == 0) { cmd_mv(volume, argc - argOff, argv + argOff); } else if(strcmp(argv[2], "symlink") == 0) { cmd_symlink(volume, argc - 2, argv + 2); } else if(strcmp(argv[argOff], "mkdir") == 0) { cmd_mkdir(volume, argc - argOff, argv + argOff); } else if(strcmp(argv[argOff], "add") == 0) { cmd_add(volume, argc - argOff, argv + argOff); } else if(strcmp(argv[argOff], "rm") == 0) { cmd_rm(volume, argc - argOff, argv + argOff); } else if(strcmp(argv[argOff], "chmod") == 0) { cmd_chmod(volume, argc - argOff, argv + argOff); } else if(strcmp(argv[argOff], "extract") == 0) { cmd_extract(volume, argc - argOff, argv + argOff); } else if(strcmp(argv[argOff], "extractall") == 0) { cmd_extractall(volume, argc - argOff, argv + argOff); } else if(strcmp(argv[argOff], "rmall") == 0) { cmd_rmall(volume, argc - argOff, argv + argOff); } else if(strcmp(argv[argOff], "addall") == 0) { cmd_addall(volume, argc - argOff, argv + argOff); } else if(strcmp(argv[argOff], "grow") == 0) { cmd_grow(volume, argc - argOff, argv + argOff); } else if(strcmp(argv[argOff], "untar") == 0) { cmd_untar(volume, argc - argOff, argv + argOff); } } closeVolume(volume); CLOSE(io); return 0; }