|
|
1.1 ! root 1: #include <stddef.h> ! 2: #include <stdio.h> ! 3: #include <stdlib.h> ! 4: #include <time.h> ! 5: #include "lib.h" ! 6: ! 7: #define MIN(A, B) ((A) < (B) ? (A) : (B)) ! 8: ! 9: void * ! 10: xmalloc(size_t size) ! 11: { ! 12: void *result; ! 13: ! 14: result = malloc(size); ! 15: if (size && !result) { ! 16: eprintf("malloc failure"); ! 17: exit(1); ! 18: } ! 19: return result; ! 20: } ! 21: ! 22: void * ! 23: xrealloc(void *ptr, size_t size) ! 24: { ! 25: void *result; ! 26: ! 27: result = realloc(ptr, size); ! 28: if (size && !result) { ! 29: eprintf("realloc failure"); ! 30: exit(1); ! 31: } ! 32: return result; ! 33: } ! 34: ! 35: char * ! 36: xstrdup(char *s) ! 37: { ! 38: char *t; ! 39: ! 40: t = xmalloc(strlen(s) + 1); ! 41: strcpy(t, s); ! 42: return t; ! 43: } ! 44: ! 45: long ! 46: fpcopy(FILE *dst, FILE *src, long size) ! 47: { ! 48: char buf[4096]; ! 49: long cc, total; ! 50: ! 51: total = 0; ! 52: while (total < size) { ! 53: cc = fread(buf, 1, MIN(sizeof buf, size - total), src); ! 54: if (cc <= 0) ! 55: break; ! 56: if (fwrite(buf, 1, cc, dst) != cc) ! 57: break; ! 58: total += cc; ! 59: } ! 60: if (ferror(dst) || ferror(src)) ! 61: return -1; ! 62: return total; ! 63: } ! 64: ! 65: void ! 66: discard(FILE *fp, long n) ! 67: { ! 68: char buf[4096]; ! 69: long cc; ! 70: ! 71: while (n >= sizeof buf) { ! 72: cc = fread(buf, 1, sizeof buf, fp); ! 73: if (cc <= 0) ! 74: return; ! 75: n -= cc; ! 76: } ! 77: fread(buf, 1, n, fp); ! 78: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.