|
|
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.