/* cat.c:    concatenate files */

#include <stdio.h>
#include <assert.h>

void copy(FILE *, FILE *);

main(int argc, char **argv)
{
    int i;
    FILE *f;
    FILE *std_out = fdopen(fileno(stdout),"wb");

    assert(std_out != NULL);
    for (i = 1; i < argc; ++i)
        if ((f = fopen(argv[i],"rb")) == NULL)
            fprintf(stderr,"cat: Can't open %s\n",argv[i]);
        else 
        {
            copy(f,std_out);
            fclose(f);
        }
    return 0;
}

void copy(FILE *from, FILE *to)
{
    size_t count;
    static char buf[BUFSIZ];

    while (!feof(from))
    {
        count = fread(buf,1,BUFSIZ,from);
        assert(ferror(from) == 0);
        assert(fwrite(buf,1,count,to) == count);
        assert(ferror(to) == 0);
    }
}
