]> granicus.if.org Git - file/commitdiff
new files for lib
authorChristos Zoulas <christos@zoulas.com>
Sun, 23 Mar 2003 04:07:05 +0000 (04:07 +0000)
committerChristos Zoulas <christos@zoulas.com>
Sun, 23 Mar 2003 04:07:05 +0000 (04:07 +0000)
src/Makefile.am [new file with mode: 0644]
src/Makefile.in [new file with mode: 0644]
src/funcs.c [new file with mode: 0644]
src/magic.c [new file with mode: 0644]
src/magic.h [new file with mode: 0644]
src/test.c [new file with mode: 0644]

diff --git a/src/Makefile.am b/src/Makefile.am
new file mode 100644 (file)
index 0000000..4b719ea
--- /dev/null
@@ -0,0 +1,15 @@
+lib_LTLIBRARIES = libmagic.la
+include_HEADERS = magic.h
+
+bin_PROGRAMS = file
+
+MAGIC   = $(datadir)/magic
+AM_CPPFLAGS = -DMAGIC='"$(MAGIC)"'
+
+libmagic_la_SOURCES = magic.c apprentice.c softmagic.c ascmagic.c \
+       compress.c is_tar.c readelf.c print.c fsmagic.c \
+       funcs.c file.h names.h patchlevel.h readelf.h tar.h
+libmagic_la_LDFLAGS = -version-info 1:0:0
+
+file_SOURCES = file.c
+file_LDFLAGS = -lmagic
diff --git a/src/Makefile.in b/src/Makefile.in
new file mode 100644 (file)
index 0000000..4d8bd2f
--- /dev/null
@@ -0,0 +1,515 @@
+# Makefile.in generated by automake 1.7.3 from Makefile.am.
+# @configure_input@
+
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+# Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_triplet = @host@
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FSECT5_FALSE = @FSECT5_FALSE@
+FSECT5_TRUE = @FSECT5_TRUE@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+fsect = @fsect@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+lib_LTLIBRARIES = libmagic.la
+include_HEADERS = magic.h
+
+bin_PROGRAMS = file
+
+MAGIC = $(datadir)/magic
+AM_CPPFLAGS = -DMAGIC='"$(MAGIC)"'
+
+libmagic_la_SOURCES = magic.c apprentice.c softmagic.c ascmagic.c \
+       compress.c is_tar.c readelf.c print.c fsmagic.c \
+       funcs.c file.h names.h patchlevel.h readelf.h tar.h
+
+libmagic_la_LDFLAGS = -version-info 1:0:0
+
+file_SOURCES = file.c
+file_LDFLAGS = -lmagic
+subdir = src
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+LTLIBRARIES = $(lib_LTLIBRARIES)
+
+libmagic_la_LIBADD =
+am_libmagic_la_OBJECTS = magic.lo apprentice.lo softmagic.lo ascmagic.lo \
+       compress.lo is_tar.lo readelf.lo print.lo fsmagic.lo funcs.lo
+libmagic_la_OBJECTS = $(am_libmagic_la_OBJECTS)
+bin_PROGRAMS = file$(EXEEXT)
+PROGRAMS = $(bin_PROGRAMS)
+
+am_file_OBJECTS = file.$(OBJEXT)
+file_OBJECTS = $(am_file_OBJECTS)
+file_LDADD = $(LDADD)
+file_DEPENDENCIES =
+
+DEFAULT_INCLUDES =  -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/apprentice.Plo \
+@AMDEP_TRUE@   ./$(DEPDIR)/ascmagic.Plo ./$(DEPDIR)/compress.Plo \
+@AMDEP_TRUE@   ./$(DEPDIR)/file.Po ./$(DEPDIR)/fsmagic.Plo \
+@AMDEP_TRUE@   ./$(DEPDIR)/funcs.Plo ./$(DEPDIR)/is_tar.Plo \
+@AMDEP_TRUE@   ./$(DEPDIR)/magic.Plo ./$(DEPDIR)/print.Plo \
+@AMDEP_TRUE@   ./$(DEPDIR)/readelf.Plo ./$(DEPDIR)/softmagic.Plo
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) \
+       $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(AM_LDFLAGS) $(LDFLAGS) -o $@
+DIST_SOURCES = $(libmagic_la_SOURCES) $(file_SOURCES)
+HEADERS = $(include_HEADERS)
+
+DIST_COMMON = $(include_HEADERS) Makefile.am Makefile.in
+SOURCES = $(libmagic_la_SOURCES) $(file_SOURCES)
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  Makefile.am  $(top_srcdir)/configure.in $(ACLOCAL_M4)
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  src/Makefile
+Makefile:  $(srcdir)/Makefile.in  $(top_builddir)/config.status
+       cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
+libLTLIBRARIES_INSTALL = $(INSTALL)
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+       @$(NORMAL_INSTALL)
+       $(mkinstalldirs) $(DESTDIR)$(libdir)
+       @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+         if test -f $$p; then \
+           f="`echo $$p | sed -e 's|^.*/||'`"; \
+           echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(libdir)/$$f"; \
+           $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(libdir)/$$f; \
+         else :; fi; \
+       done
+
+uninstall-libLTLIBRARIES:
+       @$(NORMAL_UNINSTALL)
+       @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+           p="`echo $$p | sed -e 's|^.*/||'`"; \
+         echo " $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p"; \
+         $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p; \
+       done
+
+clean-libLTLIBRARIES:
+       -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+       @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" = "$$p" && dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+libmagic.la: $(libmagic_la_OBJECTS) $(libmagic_la_DEPENDENCIES) 
+       $(LINK) -rpath $(libdir) $(libmagic_la_LDFLAGS) $(libmagic_la_OBJECTS) $(libmagic_la_LIBADD) $(LIBS)
+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+install-binPROGRAMS: $(bin_PROGRAMS)
+       @$(NORMAL_INSTALL)
+       $(mkinstalldirs) $(DESTDIR)$(bindir)
+       @list='$(bin_PROGRAMS)'; for p in $$list; do \
+         p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         if test -f $$p \
+            || test -f $$p1 \
+         ; then \
+           f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+          echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f"; \
+          $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f || exit 1; \
+         else :; fi; \
+       done
+
+uninstall-binPROGRAMS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(bin_PROGRAMS)'; for p in $$list; do \
+         f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+         echo " rm -f $(DESTDIR)$(bindir)/$$f"; \
+         rm -f $(DESTDIR)$(bindir)/$$f; \
+       done
+
+clean-binPROGRAMS:
+       @list='$(bin_PROGRAMS)'; for p in $$list; do \
+         f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         echo " rm -f $$p $$f"; \
+         rm -f $$p $$f ; \
+       done
+file$(EXEEXT): $(file_OBJECTS) $(file_DEPENDENCIES) 
+       @rm -f file$(EXEEXT)
+       $(LINK) $(file_LDFLAGS) $(file_OBJECTS) $(file_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT) core *.core
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/apprentice.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ascmagic.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/compress.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fsmagic.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/funcs.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/is_tar.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/magic.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/readelf.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/softmagic.Plo@am__quote@
+
+distclean-depend:
+       -rm -rf ./$(DEPDIR)
+
+.c.o:
+@am__fastdepCC_TRUE@   if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
+@am__fastdepCC_TRUE@     -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
+@am__fastdepCC_TRUE@   then mv "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
+@am__fastdepCC_TRUE@   else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
+@am__fastdepCC_TRUE@   fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$<
+
+.c.obj:
+@am__fastdepCC_TRUE@   if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
+@am__fastdepCC_TRUE@     -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \
+@am__fastdepCC_TRUE@   then mv "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
+@am__fastdepCC_TRUE@   else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
+@am__fastdepCC_TRUE@   fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`
+
+.c.lo:
+@am__fastdepCC_TRUE@   if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
+@am__fastdepCC_TRUE@     -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
+@am__fastdepCC_TRUE@   then mv "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; \
+@am__fastdepCC_TRUE@   else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
+@am__fastdepCC_TRUE@   fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+distclean-libtool:
+       -rm -f libtool
+uninstall-info-am:
+includeHEADERS_INSTALL = $(INSTALL_HEADER)
+install-includeHEADERS: $(include_HEADERS)
+       @$(NORMAL_INSTALL)
+       $(mkinstalldirs) $(DESTDIR)$(includedir)
+       @list='$(include_HEADERS)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f="`echo $$p | sed -e 's|^.*/||'`"; \
+         echo " $(includeHEADERS_INSTALL) $$d$$p $(DESTDIR)$(includedir)/$$f"; \
+         $(includeHEADERS_INSTALL) $$d$$p $(DESTDIR)$(includedir)/$$f; \
+       done
+
+uninstall-includeHEADERS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(include_HEADERS)'; for p in $$list; do \
+         f="`echo $$p | sed -e 's|^.*/||'`"; \
+         echo " rm -f $(DESTDIR)$(includedir)/$$f"; \
+         rm -f $(DESTDIR)$(includedir)/$$f; \
+       done
+
+ETAGS = etags
+ETAGSFLAGS =
+
+CTAGS = ctags
+CTAGSFLAGS =
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       mkid -fID $$unique
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(ETAGS_ARGS)$$tags$$unique" \
+         || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+            $$tags $$unique
+
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+
+top_distdir = ..
+distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+       list='$(DISTFILES)'; for file in $$list; do \
+         case $$file in \
+           $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+           $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+         esac; \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+         if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+           dir="/$$dir"; \
+           $(mkinstalldirs) "$(distdir)$$dir"; \
+         else \
+           dir=''; \
+         fi; \
+         if test -d $$d/$$file; then \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(HEADERS)
+install-binPROGRAMS: install-libLTLIBRARIES
+
+
+installdirs:
+       $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(bindir) $(DESTDIR)$(includedir)
+
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -rm -f Makefile $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \
+       clean-libtool mostlyclean-am
+
+distclean: distclean-am
+
+distclean-am: clean-am distclean-compile distclean-depend \
+       distclean-generic distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-includeHEADERS
+
+install-exec-am: install-binPROGRAMS install-libLTLIBRARIES
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS uninstall-includeHEADERS \
+       uninstall-info-am uninstall-libLTLIBRARIES
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+       clean-generic clean-libLTLIBRARIES clean-libtool ctags \
+       distclean distclean-compile distclean-depend distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am info \
+       info-am install install-am install-binPROGRAMS install-data \
+       install-data-am install-exec install-exec-am \
+       install-includeHEADERS install-info install-info-am \
+       install-libLTLIBRARIES install-man install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags uninstall uninstall-am uninstall-binPROGRAMS \
+       uninstall-includeHEADERS uninstall-info-am \
+       uninstall-libLTLIBRARIES
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/funcs.c b/src/funcs.c
new file mode 100644 (file)
index 0000000..e216dfd
--- /dev/null
@@ -0,0 +1,116 @@
+#include "magic.h"
+#include "file.h"
+#include <stdarg.h>
+#include <stdlib.h>
+#include <string.h>
+/*
+ * Like printf, only we print to a buffer and advance it.
+ */
+protected int
+file_printf(struct magic_set *ms, const char *fmt, ...)
+{
+       va_list ap;
+       int len;
+       char *buf;
+
+       va_start(ap, fmt);
+
+       if ((len = vsnprintf(ms->o.ptr, ms->o.len, fmt, ap)) >= ms->o.len) {
+               va_end(ap);
+               if ((buf = realloc(ms->o.buf, len + 1024)) == NULL) {
+                       file_oomem(ms);
+                       return -1;
+               }
+               ms->o.ptr = buf + (ms->o.ptr - ms->o.buf);
+               ms->o.buf = buf;
+               ms->o.len = ms->o.size - (ms->o.ptr - ms->o.buf);
+               ms->o.size = len + 1024;
+
+               va_start(ap, fmt);
+               len = vsnprintf(ms->o.ptr, ms->o.len, fmt, ap);
+       }
+       ms->o.ptr += len;
+       ms->o.len -= len;
+       va_end(ap);
+       return 0;
+}
+
+/*
+ * error - print best error message possible
+ */
+/*VARARGS*/
+protected void
+#ifdef __STDC__
+file_error(struct magic_set *ms, const char *f, ...)
+#else
+error(va_alist)
+       va_dcl
+#endif
+{
+       va_list va;
+#ifdef __STDC__
+       va_start(va, f);
+#else
+       const char *f;
+       va_start(va);
+       f = va_arg(va, const char *);
+#endif
+       /* cuz we use stdout for most, stderr here */
+       (void) fflush(stdout); 
+
+       (void) vsnprintf(ms->o.buf, ms->o.size, f, va);
+       ms->haderr++;
+       va_end(va);
+}
+
+
+protected void
+file_oomem(struct magic_set *ms)
+{
+       file_error(ms, "%s", strerror(errno));
+}
+
+protected void
+file_badseek(struct magic_set *ms)
+{
+       file_error(ms, "Error seeking (%s)", strerror(errno));
+}
+
+protected void
+file_badread(struct magic_set *ms)
+{
+       file_error(ms, "Error reading (%s)", strerror(errno));
+}
+
+protected int
+file_buf(struct magic_set *ms, const void *buf, size_t nb)
+{
+    int m;
+    /* try compression stuff */
+    if ((m = file_zmagic(ms, buf, nb)) == 0) {
+       /* try tests in /etc/magic (or surrogate magic file) */
+       if ((m = file_softmagic(ms, buf, nb)) == 0) {
+           /* try known keywords, check whether it is ASCII */
+           if ((m = file_ascmagic(ms, buf, nb)) == 0) {
+               /* abandon hope, all ye who remain here */
+               if (file_printf(ms, ms->flags & MAGIC_MIME ?
+                   "application/octet-stream" : "data") == -1)
+                       return -1;
+               m = 1;
+           }
+       }
+    }
+    return m;
+}
+
+protected int
+file_reset(struct magic_set *ms)
+{
+       if (ms->mlist == NULL) {
+               file_error(ms, "No magic files loaded");
+               return -1;
+       }
+       ms->o.ptr = ms->o.buf;
+       ms->haderr = 0;
+       return 0;
+}
diff --git a/src/magic.c b/src/magic.c
new file mode 100644 (file)
index 0000000..0938f61
--- /dev/null
@@ -0,0 +1,271 @@
+/*
+ * file - find type of a file or files - main program.
+ *
+ * Copyright (c) Ian F. Darwin, 1987.
+ * Written by Ian F. Darwin.
+ *
+ * This software is not subject to any license of the American Telephone
+ * and Telegraph Company or of the Regents of the University of California.
+ *
+ * Permission is granted to anyone to use this software for any purpose on
+ * any computer system, and to alter it and redistribute it freely, subject
+ * to the following restrictions:
+ *
+ * 1. The author is not responsible for the consequences of use of this
+ *    software, no matter how awful, even if they arise from flaws in it.
+ *
+ * 2. The origin of this software must not be misrepresented, either by
+ *    explicit claim or by omission.  Since few users ever read sources,
+ *    credits must appear in the documentation.
+ *
+ * 3. Altered versions must be plainly marked as such, and must not be
+ *    misrepresented as being the original software.  Since few users
+ *    ever read sources, credits must appear in the documentation.
+ *
+ * 4. This notice may not be removed or altered.
+ */
+
+#include "magic.h"
+#include "file.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/param.h> /* for MAXPATHLEN */
+#include <sys/stat.h>
+#include <fcntl.h>     /* for open() */
+#ifdef QUICK
+#include <sys/mman.h>
+#endif
+#ifdef RESTORE_TIME
+# if (__COHERENT__ >= 0x420)
+#  include <sys/utime.h>
+# else
+#  ifdef USE_UTIMES
+#   include <sys/time.h>
+#  else
+#   include <utime.h>
+#  endif
+# endif
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>    /* for read() */
+#endif
+#ifdef HAVE_LOCALE_H
+#include <locale.h>
+#endif
+
+#include <netinet/in.h>                /* for byte swapping */
+
+#include "patchlevel.h"
+
+#ifndef        lint
+FILE_RCSID("@(#)$Id: magic.c,v 1.1 2003/03/23 04:07:05 christos Exp $")
+#endif /* lint */
+
+
+#ifndef MAGIC
+# define MAGIC "/etc/magic"
+#endif
+
+private void free_mlist(struct mlist *);
+
+public struct magic_set *
+magic_open(int flags)
+{
+       struct magic_set *ms;
+
+       if ((ms = malloc(sizeof(struct magic_set))) == NULL)
+               return NULL;
+       ms->o.ptr = ms->o.buf = malloc(ms->o.size = 1024);
+       ms->o.len = 0;
+       if (ms->o.buf == NULL) {
+               free(ms);
+               return NULL;
+       }
+       ms->c.off = malloc((ms->c.len = 10) * sizeof(*ms->c.off));
+       if (ms->c.off == NULL) {
+               free(ms->o.buf);
+               free(ms);
+               return NULL;
+       }
+       ms->flags = flags;
+       ms->haderr = 0;
+       return ms;
+}
+
+/*
+ * load a magic file
+ */
+public int
+magic_load(struct magic_set *ms, const char *magicfile)
+{
+       struct mlist *ml;
+
+       if (magicfile == NULL)
+               magicfile = (ms->flags & MAGIC_MIME) ? MAGIC ".mime" : MAGIC;
+
+       ml = file_apprentice(ms, magicfile, 0);
+       if (ml == NULL) 
+               return -1;
+       ms->mlist = ml;
+       return 0;
+}
+
+private void
+free_mlist(struct mlist *mlist)
+{
+       struct mlist *ml;
+
+       if (mlist == NULL)
+               return;
+
+       for (ml = mlist->next; ml != mlist;) {
+               struct mlist *next = ml->next;
+               struct magic *mg = ml->magic;
+               switch (ml->mapped) {
+               case 0:
+                       free(mg);
+                       break;
+               case 1:
+                       mg--;
+                       free(mg);
+                       break;
+               case 2:
+                       mg--;
+                       (void)munmap(mg, sizeof(*mg) * (ml->nmagic + 1));
+                       break;
+               }
+               free(ml);
+               ml = next;
+       }
+       free(ml);
+}
+
+public void
+magic_close(ms)
+    struct magic_set *ms;
+{
+       free_mlist(ms->mlist);
+       free(ms->o.buf);
+       free(ms->c.off);
+       free(ms);
+}
+
+public int
+magic_compile(struct magic_set *ms, const char *magicfile)
+{
+       struct mlist *ml = file_apprentice(ms, magicfile, COMPILE);
+       if(ml == NULL)
+               return -1;
+       free_mlist(ml);
+       return ml ? 0 : -1;
+}
+
+public int
+magic_check(struct magic_set *ms, const char *magicfile)
+{
+       struct mlist *ml = file_apprentice(ms, magicfile, CHECK);
+       if(ml == NULL)
+               return -1;
+       free_mlist(ml);
+       return ml ? 0 : -1;
+}
+
+/*
+ * find type of named file
+ */
+public const char *
+magic_file(struct magic_set *ms, const char *inname)
+{
+       int     fd = 0;
+       unsigned char buf[HOWMANY+1];   /* one extra for terminating '\0' */
+       struct stat     sb;
+       int nbytes = 0; /* number of bytes read from a datafile */
+
+       if (file_reset(ms) == -1)
+               return NULL;
+
+       switch (file_fsmagic(ms, inname, &sb)) {
+       case -1:
+               return NULL;
+       case 0:
+               break;
+       default:
+               return ms->o.buf;
+       }
+
+       if ((fd = open(inname, O_RDONLY)) < 0) {
+               /* We can't open it, but we were able to stat it. */
+               if (sb.st_mode & 0002)
+                       if (file_printf(ms, "writeable, ") == -1)
+                               return NULL;
+               if (sb.st_mode & 0111)
+                       if (file_printf(ms, "executable, ") == -1)
+                               return NULL;
+               return ms->o.buf;
+       }
+
+       /*
+        * try looking at the first HOWMANY bytes
+        */
+       if ((nbytes = read(fd, (char *)buf, HOWMANY)) == -1) {
+               file_error(ms, "Cannot read `%s' %s", inname, strerror(errno));
+               return NULL;
+       }
+
+       if (nbytes == 0){
+               if (file_printf(ms, (ms->flags & MAGIC_MIME) ?
+                   "application/x-empty" : "empty") == -1)
+                       return NULL;
+       } else {
+               buf[nbytes++] = '\0';   /* null-terminate it */
+               if (file_buf(ms, buf, nbytes) == -1)
+                       return NULL;
+#ifdef BUILTIN_ELF
+               if (nbytes > 5) {
+                       /*
+                        * We matched something in the file, so this *might*
+                        * be an ELF file, and the file is at least 5 bytes
+                        * long, so if it's an ELF file it has at least one
+                        * byte past the ELF magic number - try extracting
+                        * information from the ELF headers that can't easily
+                        * be extracted with rules in the magic file.
+                        */
+                       file_tryelf(ms, fd, buf, nbytes);
+               }
+#endif
+       }
+
+       return ms->haderr ? NULL : ms->o.buf;
+}
+
+
+public const char *
+magic_buf(struct magic_set *ms, const void *buf, size_t nb)
+{
+       if (file_reset(ms) == -1)
+               return NULL;
+       /*
+        * The main work is done here!
+        * We have the file name and/or the data buffer to be identified. 
+        */
+       if (file_buf(ms, buf, nb) == -1) {
+               return NULL;
+       }
+       return ms->haderr ? NULL : ms->o.buf;
+}
+
+public const char *
+magic_error(struct magic_set *ms)
+{
+       return ms->haderr ? ms->o.buf : NULL;
+}
+
+public void
+magic_setflags(struct magic_set *ms, int flags)
+{
+       ms->flags = flags;
+}
diff --git a/src/magic.h b/src/magic.h
new file mode 100644 (file)
index 0000000..9442518
--- /dev/null
@@ -0,0 +1,30 @@
+#ifndef _MAGIC_H
+#define _MAGIC_H
+
+#include <sys/types.h>
+
+#define        MAGIC_NONE      0x00    /* No flags */
+#define        MAGIC_DEBUG     0x01    /* Turn on debugging */
+#define        MAGIC_SYMLINK   0x02    /* Follow symlinks */
+#define        MAGIC_COMPRESS  0x04    /* Check inside compressed files */
+#define        MAGIC_DEVICES   0x08    /* Look at the contents of devices */
+#define        MAGIC_MIME      0x10    /* Return a mime string */
+#define        MAGIC_CONTINUE  0x20    /* Return all matches, not just the first */
+#define        MAGIC_CHECK     0x40    /* Print warnings to stderr */
+
+struct magic_set;
+
+struct magic_set *magic_open(int flags);
+void magic_close(struct magic_set *);
+
+const char *magic_file(struct magic_set *, const char *);
+const char *magic_buf(struct magic_set *, const void *, size_t);
+
+const char *magic_error(struct magic_set *);
+void magic_setflags(struct magic_set *, int);
+
+int magic_load(struct magic_set *, const char *);
+int magic_compile(struct magic_set *, const char *);
+int magic_check(struct magic_set *, const char *);
+
+#endif
diff --git a/src/test.c b/src/test.c
new file mode 100644 (file)
index 0000000..a109243
--- /dev/null
@@ -0,0 +1,33 @@
+#include <stdio.h>
+#include "magic.h"
+
+int
+main(int argc, char **argv)
+{
+    struct magic_set *ms;
+    const char *m;
+    int i;
+
+    if(argc < 2)
+       return 1;
+
+    ms = magic_open(MAGIC_NONE);
+    if (ms == NULL) {
+       printf("ERROR: out of memory\n");
+       return 1;
+    }
+    if (magic_load(ms, NULL) == -1) {
+       printf("ERROR: %s\n", magic_error(ms));
+       return 1;
+    }
+
+    for (i = 1; i < argc; i++) {
+       if ((m = magic_file(ms, argv[i])) == NULL)
+           printf("ERROR: %s\n", magic_error(ms));
+       else
+           printf("%s: %s\n", argv[i], m);
+    }
+
+    magic_close(ms);
+    return 0;
+}