Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

Worst programmer ever?

Name: Anonymous 2007-07-26 10:03 ID:4JryrsBt

So I wrote a function to copy a specified number of bytes
from one stream to another:

void vCopyFile(FILE *fIn, FILE *fOut, int iNum) {
    while (iNum--)
        (void)fputc(fgetc(fIn), fOut);
}

I was told the following:
20:34:53 < dinesh> wow
20:35:00 < dinesh> probably one of the worst function i ever saw

So I changed it to this:

void vCopyFile(FILE *fIn, FILE *fOut, int iNum) {
    char *cBuf = (char*)malloc(iNum);
    int iRead;

    iRead = fread(cBuf, 1, iNum, fIn);
    fwrite(cBuf, 1, iRead, fOut);
}

Both functions work on Linux but seem to skip bytes when
crosscompiled with mingw32-gcc or visual studio.

What am I doing wrong?

Name: Anonymous 2007-07-26 10:18 ID:Heaven

you're an awful programmer.

Do you know what fgetc() returns if EOF is reached?
What if iNum is negative?
Do not cast your mallocs
If you're going to store the return value of fread, better error check it.


int vCopyFile(FILE *fp, FILE *dest, int nsize) {
    int c;
    int n = 0;
    if(fp == NULL || dest == NULL)
        return -1;
    for(c = getc(fp); c != EOF && n < nsize;
               n++, c = getc(fp))
        putc(c, fp);

    return n;
}

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List