Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/getterm/getterm.c

    r0485135 r4deb8b5  
    4343#include <errno.h>
    4444#include "version.h"
     45#include "welcome.h"
    4546
    4647#define APP_NAME  "getterm"
     
    4849static void usage(void)
    4950{
    50         printf("Usage: %s <terminal> <path>\n", APP_NAME);
     51        printf("Usage: %s <terminal> [-w] <command> [<arguments...>]\n", APP_NAME);
    5152}
    5253
     
    7374}
    7475
    75 static task_id_t spawn(const char *fname)
    76 {
    77         task_id_t id;
    78         int rc;
    79        
    80         rc = task_spawnl(&id, fname, fname, NULL);
    81         if (rc != EOK) {
    82                 printf("%s: Error spawning %s (%s)\n", APP_NAME, fname,
    83                     str_error(rc));
    84                 return 0;
    85         }
    86        
    87         return id;
    88 }
    89 
    9076int main(int argc, char *argv[])
    9177{
    92         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; --argc;
     87        if (argc < 1) {
    9388                usage();
    9489                return -1;
    9590        }
     91
     92        if (str_cmp(*argv, "-w") == 0) {
     93                print_wmsg = true;
     94                ++argv; --argc;
     95        } else {
     96                print_wmsg = false;
     97        }
     98
     99        if (argc < 2) {
     100                usage();
     101                return -1;
     102        }
     103
     104        term = *argv++;
     105        fname = *argv;
     106        cmd_args = argv;
    96107       
    97         reopen(&stdin, 0, argv[1], O_RDONLY, "r");
    98         reopen(&stdout, 1, argv[1], O_WRONLY, "w");
    99         reopen(&stderr, 2, argv[1], O_WRONLY, "w");
     108        reopen(&stdin, 0, term, O_RDONLY, "r");
     109        reopen(&stdout, 1, term, O_WRONLY, "w");
     110        reopen(&stderr, 2, term, O_WRONLY, "w");
    100111       
    101112        /*
     
    114125                return -4;
    115126       
    116         version_print(argv[1]);
    117         task_id_t id = spawn(argv[2]);
    118        
    119         if (id != 0) {
    120                 task_exit_t texit;
    121                 int retval;
    122                 task_wait(id, &texit, &retval);
    123                
    124                 return 0;
     127        version_print(term);
     128        if (print_wmsg)
     129                welcome_msg_print();
     130
     131        rc = task_spawnv(&id, fname, (const char * const *) cmd_args);
     132        if (rc != EOK) {
     133                printf("%s: Error spawning %s (%s)\n", APP_NAME, fname,
     134                    str_error(rc));
     135                return -5;
    125136        }
    126        
    127         return -5;
     137
     138        rc = task_wait(id, &texit, &retval);
     139        if (rc != EOK) {
     140                printf("%s: Error waiting for %s (%s)\n", APP_NAME, fname,
     141                    str_error(rc));
     142                return -6;
     143        }
     144
     145        return 0;
    128146}
    129147
Note: See TracChangeset for help on using the changeset viewer.