Changes in uspace/app/getterm/getterm.c [5a6cc679:a35b458] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/getterm/getterm.c
r5a6cc679 ra35b458 42 42 #include <loc.h> 43 43 #include <vfs/vfs.h> 44 #include <str.h> 44 45 #include "version.h" 45 46 #include "welcome.h" … … 62 63 if (fclose(*stream)) 63 64 return; 64 65 65 66 *stream = NULL; 66 67 67 68 int oldfd; 68 69 errno_t rc = vfs_lookup_open(path, WALK_REGULAR, mode, &oldfd); 69 70 if (rc != EOK) 70 71 return; 71 72 72 73 if (oldfd != fd) { 73 74 int newfd; 74 75 if (vfs_clone(oldfd, fd, false, &newfd) != EOK) 75 76 return; 76 77 77 78 assert(newfd == fd); 78 79 … … 80 81 return; 81 82 } 82 83 83 84 *stream = fdopen(fd, fmode); 84 85 } … … 92 93 return 1; 93 94 } 94 95 95 96 char *term = *argv; 96 97 argv++; 97 98 argc--; 98 99 99 100 char *locfs = *argv; 100 101 argv++; 101 102 argc--; 102 103 103 104 bool print_msg = false; 104 105 bool wait = false; 105 106 106 107 while ((argc > 0) && (str_cmp(*argv, "--") != 0)) { 107 108 if (str_cmp(*argv, "--msg") == 0) { … … 113 114 return 2; 114 115 } 115 116 116 117 argv++; 117 118 argc--; 118 119 } 119 120 120 121 if (argc < 1) { 121 122 usage(); 122 123 return 3; 123 124 } 124 125 125 126 /* Skip "--" */ 126 127 argv++; 127 128 argc--; 128 129 129 130 char *cmd = *argv; 130 131 char **args = argv; 131 132 132 133 if (wait) { 133 134 /* Wait for the terminal service to be ready */ … … 140 141 } 141 142 } 142 143 143 144 char term_node[LOC_NAME_MAXLEN]; 144 145 snprintf(term_node, LOC_NAME_MAXLEN, "%s/%s", locfs, term); 145 146 146 147 reopen(&stdin, 0, term_node, MODE_READ, "r"); 147 148 reopen(&stdout, 1, term_node, MODE_WRITE, "w"); 148 149 reopen(&stderr, 2, term_node, MODE_WRITE, "w"); 149 150 150 151 if (stdin == NULL) 151 152 return 4; 152 153 153 154 if (stdout == NULL) 154 155 return 5; 155 156 156 157 if (stderr == NULL) 157 158 return 6; 158 159 159 160 /* 160 161 * FIXME: fdopen() should actually detect that we are opening a console … … 162 163 */ 163 164 setvbuf(stdout, NULL, _IOLBF, BUFSIZ); 164 165 165 166 version_print(term); 166 167 if (print_msg) 167 168 welcome_msg_print(); 168 169 169 170 task_id_t id; 170 171 task_wait_t twait; 171 172 172 173 errno_t rc = task_spawnv(&id, &twait, cmd, (const char * const *) args); 173 174 if (rc != EOK) { … … 176 177 return rc; 177 178 } 178 179 179 180 task_exit_t texit; 180 181 int retval; … … 185 186 return rc; 186 187 } 187 188 188 189 return 0; 189 190 }
Note:
See TracChangeset
for help on using the changeset viewer.