char buffer[BUFMAX];
size_t nread = fread (buffer, 1, BUFMAX, fdsrc);
VERBOSE (DEBUG, fprintf (stderr, "read %d bytes\n", (int)nread));
- if (nread <= 0) {
- break;
- }
-
- size_t nwritten = fwrite (buffer, 1, nread, fddest);
- VERBOSE (DEBUG, fprintf (stderr, "wrote %d bytes\n", (int)nwritten));
- if (nwritten != nread) {
- msg = strdupcat ("Can't write file '", dest, "'", NULL);
+ if (ferror (fdsrc)) {
+ msg = strdupcat ("Can't read file '", src, "'", NULL);
+ } else {
+ size_t nwritten = fwrite (buffer, 1, nread, fddest);
+ VERBOSE (DEBUG, fprintf (stderr, "wrote %d bytes\n", (int)nwritten));
+ if (nwritten != nread) {
+ msg = strdupcat ("Can't write file '", dest, "'", NULL);
+ }
}
- } while (msg == NULL);
+ } while ((msg == NULL) && (!feof (fdsrc)));
if ((fclose (fddest) != 0) && (msg == NULL)) {
msg = strdupcat ("Can't close file '", dest, "'", NULL);
buffer = (char *) realloc (buffer, size);
memset (buffer + size - BUFMAX - 1, 0, BUFMAX + 1);
blocklen = fread (buffer + size - BUFMAX - 1, 1, BUFMAX, sd);
+ VERBOSE (DEBUG, fprintf (stderr, "read %d bytes\n", (int)blocklen));
_length += blocklen;
- } while (blocklen > 0);
+ if (ferror (sd)) {
+ VERBOSE (WARNING, fprintf (stderr, "error on reading\n"));
+ clearerr (sd);
+ blocklen = 0;
+ }
+ } while ((blocklen > 0) && (!feof (sd)));
/* check size */
VERBOSE (DEBUG, fprintf (stderr, "length: %d\n", _length));