Equivalently (tried but not much, cleaner).

#include <u.h>
#include <libc.h>

void
main(int argc, char *argv[])
{
       int nflag, argi;
       int i, len;
       char *buf, *p;

       nflag = 0;
       argi = 0;
       for(i = 1; i < argc; i++){
                if(argv[i][0] != '-' )
                       break;
                if (strcmp(argv[i], "--") == 0){
                        argi++;
                        break;
                 }
                 if(strcmp(argv[i], "-n") == 0){
                        argi++;
                        nflag++;
                  }
         }


       len = 1;
       for(i = 1+argi; i < argc; i++)
               len += strlen(argv[i])+1;

       buf = malloc(len);
       if(buf == 0)
               exits("no memory");

       p = buf;
       for(i = 1+argi; i < argc; i++){
               strcpy(p, argv[i]);
               p += strlen(p);
               if(i < argc-1)
                       *p++ = ' ';
       }

       if(!nflag)
               *p++ = '\n';

       if(write(1, buf, p-buf) < 0)
               fprint(2, "echo: write error: %r\n");

       exits((char *)0);
}


-- 
- curiosity sKilled the cat

Reply via email to