xref: /plan9/sys/src/cmd/echo.c (revision 0809e9a7eb19e11e5c17875a07c90287d0fe3e31)
13e12c5d1SDavid du Colombier #include <u.h>
23e12c5d1SDavid du Colombier #include <libc.h>
33e12c5d1SDavid du Colombier 
43e12c5d1SDavid du Colombier void
main(int argc,char * argv[])53e12c5d1SDavid du Colombier main(int argc, char *argv[])
63e12c5d1SDavid du Colombier {
73e12c5d1SDavid du Colombier 	int nflag;
8219b2ee8SDavid du Colombier 	int i, len;
9219b2ee8SDavid 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;
14219b2ee8SDavid du Colombier 
15219b2ee8SDavid du Colombier 	len = 1;
163e12c5d1SDavid du Colombier 	for(i = 1+nflag; i < argc; i++)
17219b2ee8SDavid du Colombier 		len += strlen(argv[i])+1;
18219b2ee8SDavid du Colombier 
19219b2ee8SDavid du Colombier 	buf = malloc(len);
20219b2ee8SDavid du Colombier 	if(buf == 0)
21219b2ee8SDavid du Colombier 		exits("no memory");
22219b2ee8SDavid du Colombier 
23219b2ee8SDavid du Colombier 	p = buf;
249a747e4fSDavid du Colombier 	for(i = 1+nflag; i < argc; i++){
259a747e4fSDavid du Colombier 		strcpy(p, argv[i]);
269a747e4fSDavid du Colombier 		p += strlen(p);
279a747e4fSDavid du Colombier 		if(i < argc-1)
289a747e4fSDavid du Colombier 			*p++ = ' ';
299a747e4fSDavid du Colombier 	}
30219b2ee8SDavid du Colombier 
313e12c5d1SDavid du Colombier 	if(!nflag)
329a747e4fSDavid du Colombier 		*p++ = '\n';
33219b2ee8SDavid du Colombier 
34*0809e9a7SDavid du Colombier 	if(write(1, buf, p-buf) < 0){
35219b2ee8SDavid du Colombier 		fprint(2, "echo: write error: %r\n");
36*0809e9a7SDavid du Colombier 		exits("write error");
37*0809e9a7SDavid du Colombier 	}
38219b2ee8SDavid du Colombier 
393e12c5d1SDavid du Colombier 	exits((char *)0);
403e12c5d1SDavid du Colombier }
41