"Fossies" - the Fresh Open Source Software Archive

Member "file-5.35/tests/test.c" (25 May 2017, 3270 Bytes) of package /linux/misc/file-5.35.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. See also the last Fossies "Diffs" side-by-side code changes report for "test.c": 5.31_vs_5.32.

    1 /*
    2  * Copyright (c) Christos Zoulas 2003.
    3  * All Rights Reserved.
    4  * 
    5  * Redistribution and use in source and binary forms, with or without
    6  * modification, are permitted provided that the following conditions
    7  * are met:
    8  * 1. Redistributions of source code must retain the above copyright
    9  *    notice immediately at the beginning of the file, without modification,
   10  *    this list of conditions, and the following disclaimer.
   11  * 2. Redistributions in binary form must reproduce the above copyright
   12  *    notice, this list of conditions and the following disclaimer in the
   13  *    documentation and/or other materials provided with the distribution.
   14  *  
   15  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
   16  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   17  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   18  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
   19  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   20  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   21  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   22  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   23  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   24  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   25  * SUCH DAMAGE.
   26  */
   27 
   28 #include <stdio.h>
   29 #include <stdlib.h>
   30 #include <string.h>
   31 #include "magic.h"
   32 
   33 static void *
   34 xrealloc(void *p, size_t n)
   35 {
   36     p = realloc(p, n);
   37     if (p == NULL) {
   38         (void)fprintf(stderr, "ERROR slurping file: out of memory\n");
   39         exit(10);
   40     }
   41     return p;
   42 }
   43 
   44 static char *
   45 slurp(FILE *fp, size_t *final_len)
   46 {
   47     size_t len = 256;
   48     int c;
   49     char *l = (char *)xrealloc(NULL, len), *s = l;
   50 
   51     for (c = getc(fp); c != EOF; c = getc(fp)) {
   52         if (s == l + len) {
   53             l = (char *)xrealloc(l, len * 2);
   54             len *= 2;
   55         }
   56         *s++ = c;
   57     }
   58     if (s == l + len)
   59         l = (char *)xrealloc(l, len + 1);
   60     *s++ = '\0';
   61 
   62     *final_len = s - l;
   63     l = (char *)xrealloc(l, s - l);
   64     return l;
   65 }
   66 
   67 int
   68 main(int argc, char **argv)
   69 {
   70     struct magic_set *ms;
   71     const char *result;
   72     char *desired;
   73     size_t desired_len;
   74     int i;
   75     FILE *fp;
   76 
   77     ms = magic_open(MAGIC_NONE);
   78     if (ms == NULL) {
   79         (void)fprintf(stderr, "ERROR opening MAGIC_NONE: out of memory\n");
   80         return 10;
   81     }
   82     if (magic_load(ms, NULL) == -1) {
   83         (void)fprintf(stderr, "ERROR loading with NULL file: %s\n",
   84             magic_error(ms));
   85         return 11;
   86     }
   87 
   88     if (argc > 1) {
   89         if (argc != 3) {
   90             (void)fprintf(stderr, "Usage: test TEST-FILE RESULT\n");
   91         } else {
   92             if ((result = magic_file(ms, argv[1])) == NULL) {
   93                 (void)fprintf(stderr, "ERROR loading file %s: %s\n", argv[1], magic_error(ms));
   94                 return 12;
   95             } else {
   96                 fp = fopen(argv[2], "r");
   97                 if (fp == NULL) {
   98                     (void)fprintf(stderr, "ERROR opening `%s': ", argv[2]);
   99                     perror(NULL);
  100                     return 13;
  101                 }
  102                 desired = slurp(fp, &desired_len);
  103                 fclose(fp);
  104                 (void)printf("%s: %s\n", argv[1], result);
  105                                 if (strcmp(result, desired) != 0) {
  106                     (void)fprintf(stderr, "Error: result was\n%s\nexpected:\n%s\n", result, desired);
  107                     return 1;
  108                                 }
  109             }
  110         }
  111     }
  112 
  113     magic_close(ms);
  114     return 0;
  115 }