Ignore:
File:
1 edited

Legend:

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

    rdf747bd8 rdd567c6  
    4040#include <stdio.h>
    4141#include <task.h>
     42#include <str_error.h>
     43#include <errno.h>
    4244#include "version.h"
     45#include "welcome.h"
     46
     47#define APP_NAME  "getterm"
    4348
    4449static void usage(void)
    4550{
    46         printf("Usage: getterm <terminal> <path>\n");
     51        printf("Usage: %s <terminal> [-w] <command> [<arguments...>]\n", APP_NAME);
    4752}
    4853
     
    6974}
    7075
    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 
    8676int main(int argc, char *argv[])
    8777{
    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) {
    8989                usage();
    9090                return -1;
    9191        }
     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;
    92109       
    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");
    96113       
    97114        /*
     
    110127                return -4;
    111128       
    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;
    121138        }
    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;
    124148}
    125149
Note: See TracChangeset for help on using the changeset viewer.