* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
+
#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
#include "magic.h"
+static void *
+xrealloc(void *p, size_t n)
+{
+ p = realloc(p, n);
+ if (p == NULL) {
+ fprintf(stderr, "ERROR slurping file: out of memory\n");
+ exit(10);
+ }
+ return p;
+}
+
+static char *
+slurp(FILE *fp, size_t *final_len)
+{
+ size_t len = 256;
+ int c;
+ char *l = (char *)xrealloc(NULL, len), *s = l;
+
+ for (c = getc(fp); c != EOF; c = getc(fp)) {
+ if (s == l + len) {
+ l = (char *)xrealloc(l, len * 2);
+ len *= 2;
+ }
+ *s++ = c;
+ }
+ if (s == l + len)
+ l = (char *)xrealloc(l, len + 1);
+ *s++ = '\0';
+
+ *final_len = s - l;
+ l = (char *)xrealloc(l, s - l);
+ return l;
+}
+
int
main(int argc, char **argv)
{
struct magic_set *ms;
- const char *m;
+ const char *result;
+ char *desired;
+ size_t desired_len;
int i;
+ FILE *fp;
ms = magic_open(MAGIC_NONE);
if (ms == NULL) {
fprintf(stderr, "ERROR opening MAGIC_NONE: out of memory\n");
- return 1;
+ return 10;
}
if (magic_load(ms, NULL) == -1) {
fprintf(stderr, "ERROR loading with NULL file: %s\n", magic_error(ms));
- return 2;
+ return 11;
}
if (argc > 1) {
if (argc != 3) {
fprintf(stderr, "Usage: test TEST-FILE RESULT\n");
} else {
- if ((m = magic_file(ms, argv[1])) == NULL) {
+ if ((result = magic_file(ms, argv[1])) == NULL) {
fprintf(stderr, "ERROR loading file %s: %s\n", argv[1], magic_error(ms));
- return 3;
+ return 12;
} else {
- printf("%s: %s\n", argv[1], m);
- /* Compare m with contents of argv[3] */
+ fp = fopen(argv[2], "r");
+ if (fp == NULL) {
+ fprintf(stderr, "ERROR opening `%s': ", argv[2]);
+ perror(NULL);
+ return 13;
+ }
+ desired = slurp(fp, &desired_len);
+ fclose(fp);
+ printf("%s: %s\n", argv[1], result);
+ if (strcmp(result, desired) != 0) {
+ fprintf(stderr, "Error: result was\n%s\nexpected:\n%s\n", result, desired);
+ return 1;
+ }
}
}
}