Changes in uspace/app/getterm/getterm.c [df747bd8:dd567c6] in mainline
- File:
-
- 1 edited
-
uspace/app/getterm/getterm.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/getterm/getterm.c
rdf747bd8 rdd567c6 40 40 #include <stdio.h> 41 41 #include <task.h> 42 #include <str_error.h> 43 #include <errno.h> 42 44 #include "version.h" 45 #include "welcome.h" 46 47 #define APP_NAME "getterm" 43 48 44 49 static void usage(void) 45 50 { 46 printf("Usage: getterm <terminal> <path>\n");51 printf("Usage: %s <terminal> [-w] <command> [<arguments...>]\n", APP_NAME); 47 52 } 48 53 … … 69 74 } 70 75 71 static task_id_t spawn(char *fname)72 {73 char *args[2];74 75 args[0] = fname;76 args[1] = NULL;77 78 task_id_t id = task_spawn(fname, args);79 80 if (id == 0)81 printf("Error spawning %s\n", fname);82 83 return id;84 }85 86 76 int main(int argc, char *argv[]) 87 77 { 88 if (argc < 3) { 78 int rc; 79 task_exit_t texit; 80 int retval; 81 task_id_t id; 82 char *fname, *term; 83 char **cmd_args; 84 bool print_wmsg; 85 86 argv++; 87 argc--; 88 if (argc < 1) { 89 89 usage(); 90 90 return -1; 91 91 } 92 93 if (str_cmp(*argv, "-w") == 0) { 94 print_wmsg = true; 95 argv++; 96 argc--; 97 } else { 98 print_wmsg = false; 99 } 100 101 if (argc < 2) { 102 usage(); 103 return -1; 104 } 105 106 term = *argv++; 107 fname = *argv; 108 cmd_args = argv; 92 109 93 reopen(&stdin, 0, argv[1], O_RDONLY, "r");94 reopen(&stdout, 1, argv[1], O_WRONLY, "w");95 reopen(&stderr, 2, argv[1], O_WRONLY, "w");110 reopen(&stdin, 0, term, O_RDONLY, "r"); 111 reopen(&stdout, 1, term, O_WRONLY, "w"); 112 reopen(&stderr, 2, term, O_WRONLY, "w"); 96 113 97 114 /* … … 110 127 return -4; 111 128 112 version_print( argv[1]);113 task_id_t id = spawn(argv[2]);114 115 if (id != 0) { 116 task_exit_t texit;117 int retval;118 task_wait(id, &texit, &retval);119 120 return 0;129 version_print(term); 130 if (print_wmsg) 131 welcome_msg_print(); 132 133 rc = task_spawnv(&id, fname, (const char * const *) cmd_args); 134 if (rc != EOK) { 135 printf("%s: Error spawning %s (%s)\n", APP_NAME, fname, 136 str_error(rc)); 137 return -5; 121 138 } 122 123 return -5; 139 140 rc = task_wait(id, &texit, &retval); 141 if (rc != EOK) { 142 printf("%s: Error waiting for %s (%s)\n", APP_NAME, fname, 143 str_error(rc)); 144 return -6; 145 } 146 147 return 0; 124 148 } 125 149
Note:
See TracChangeset
for help on using the changeset viewer.
