aboutsummaryrefslogtreecommitdiff
path: root/sys/cmd/echo/echo.c
blob: adac61157127d519cf80c351b16da9b6dce74a01 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <u.h>
#include <libn.h>

int
main(int argc, char *argv[])
{
    char *s, *b, *c; 
    int i, nnl, len;
    static char buf[2*1024];

    nnl = (argc>1) && strcmp(argv[1], "-n")==0;

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

    if (len >= arrlen(buf)) {
        s = b = calloc(len, sizeof *s);
        if (!s)
            exits("no memory");
    } else
        s = b = buf;

    for (i = 1+nnl; i < argc; i++) {
        c = argv[i];
        while(*c)
            *b++ = *c++;
        if (i < argc-1)
            *b++ = ' ';
    }

    if (!nnl)
        *b++ = '\n';

    if (write(1, s, b-s) < 0)
        exits("write error");

    exit(0);
}