Annotation of researchv10no/cmd/odist/tar/util.c, revision 1.1.1.1

1.1       root        1: #include <stddef.h>
                      2: #include <stdio.h>
                      3: #include <stdlib.h>
                      4: #include "misc.h"
                      5: 
                      6: #define MIN(A, B) ((A) < (B) ? (A) : (B))
                      7: 
                      8: char *prog;
                      9: 
                     10: void *
                     11: xmalloc(size_t size)
                     12: {
                     13:        void *result;
                     14: 
                     15:        result = malloc(size);
                     16:        if (size && !result) {
                     17:                fprintf(stderr, "%s: malloc failure\n", prog);
                     18:                exit(1);
                     19:        }
                     20:        return result;
                     21: }
                     22: 
                     23: char *
                     24: xstrdup(char *s)
                     25: {
                     26:        char *t;
                     27: 
                     28:        t = xmalloc(strlen(s) + 1);
                     29:        strcpy(t, s);
                     30:        return t;
                     31: }
                     32: 
                     33: long
                     34: fpcopy(FILE *dst, FILE *src, long size)
                     35: {
                     36:        char buf[4096];
                     37:        long cc, total;
                     38: 
                     39:        total = 0;
                     40:        while (total < size) {
                     41:                cc = fread(buf, 1, MIN(sizeof buf, size - total), src);
                     42:                if (cc <= 0)
                     43:                        break;
                     44:                if (fwrite(buf, 1, cc, dst) != cc)
                     45:                        break;
                     46:                total += cc;
                     47:        }
                     48:        if (ferror(dst) || ferror(src))
                     49:                return -1;
                     50:        return total;
                     51: }
                     52: 
                     53: void
                     54: discard(FILE *fp, long n)
                     55: {
                     56:        char buf[4096];
                     57:        long cc;
                     58: 
                     59:        while (n >= sizeof buf) {
                     60:                cc = fread(buf, 1, sizeof buf, fp);
                     61:                if (cc <= 0)
                     62:                        return;
                     63:                n -= cc;
                     64:        }
                     65:        fread(buf, 1, n, fp);
                     66: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.