13e12c5d1SDavid du Colombier #include <u.h> 23e12c5d1SDavid du Colombier #include <libc.h> 33e12c5d1SDavid du Colombier 43e12c5d1SDavid du Colombier void 53e12c5d1SDavid du Colombier main(int argc, char *argv[]) 63e12c5d1SDavid du Colombier { 73e12c5d1SDavid du Colombier int nflag; 8*219b2ee8SDavid du Colombier int i, len; 9*219b2ee8SDavid du Colombier char *buf, *p; 103e12c5d1SDavid du Colombier 113e12c5d1SDavid du Colombier nflag = 0; 123e12c5d1SDavid du Colombier if(argc > 1 && strcmp(argv[1], "-n") == 0) 133e12c5d1SDavid du Colombier nflag = 1; 14*219b2ee8SDavid du Colombier 15*219b2ee8SDavid du Colombier len = 1; 163e12c5d1SDavid du Colombier for(i = 1+nflag; i < argc; i++) 17*219b2ee8SDavid du Colombier len += strlen(argv[i])+1; 18*219b2ee8SDavid du Colombier 19*219b2ee8SDavid du Colombier buf = malloc(len); 20*219b2ee8SDavid du Colombier if(buf == 0) 21*219b2ee8SDavid du Colombier exits("no memory"); 22*219b2ee8SDavid du Colombier 23*219b2ee8SDavid du Colombier p = buf; 24*219b2ee8SDavid du Colombier for(i = 1+nflag; i < argc; i++) 25*219b2ee8SDavid du Colombier p += sprint(p, i == argc-1 ? "%s":"%s ", argv[i]); 26*219b2ee8SDavid du Colombier 273e12c5d1SDavid du Colombier if(!nflag) 28*219b2ee8SDavid du Colombier sprint(p, "\n"); 29*219b2ee8SDavid du Colombier 30*219b2ee8SDavid du Colombier if(write(1, buf, strlen(buf)) < 0) 31*219b2ee8SDavid du Colombier fprint(2, "echo: write error: %r\n"); 32*219b2ee8SDavid du Colombier 333e12c5d1SDavid du Colombier exits((char *)0); 343e12c5d1SDavid du Colombier } 35