diff options
author | Xin LI <delphij@FreeBSD.org> | 2024-12-07 23:01:45 +0000 |
---|---|---|
committer | Xin LI <delphij@FreeBSD.org> | 2024-12-07 23:01:45 +0000 |
commit | 995a16e0c2eb64b0875bccf37e696bddf35c3846 (patch) | |
tree | 148abd89b24da103d417cf36ec01e9fb9c766b62 | |
parent | 72d4668c77f014e21af1db10648768e4843ce5d2 (diff) |
Vendor import of file 5.46.vendor/file/5.46vendor/file
164 files changed, 8876 insertions, 3841 deletions
diff --git a/ChangeLog b/ChangeLog index fdf1cff6e2d3..d2dfbc14b77f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,35 @@ +2024-11-27 14:44 Christos Zoulas <christos@zoulas.com> + + * release 5.46 + * Add OFFPOSITIVE + +2024-11-25 13:56 Christos Zoulas <christos@zoulas.com> + + * avoid leaking symbols in libmagic + +2024-11-10 13:56 Christos Zoulas <christos@zoulas.com> + + * PR/562: jsummers: Search/regex offsets are absolute to the + beginning of the file, so adjust them by subtracting the + offset that the "use" starts so that we don't double-count it. + + +2024-11-09 19:30 Christos Zoulas <christos@zoulas.com> + * PR/543: matshch: bump nbuf so we can get the flags into the buffer. + + +2024-11-02 14:34 Christos Zoulas <christos@zoulas.com> + + * Add Android elf notes (enh) + +2023-12-29 12:55 Christos Zoulas <christos@zoulas.com> + + * Add limit for number of magic warnings allowed + +2023-07-29 12:55 Christos Zoulas <christos@zoulas.com> + + * check regex bounds (found by clusterfuzz) + 2023-07-27 15:45 Christos Zoulas <christos@zoulas.com> * release 5.45 diff --git a/Makefile.in b/Makefile.in index 4ce98d934433..8c72613f17f9 100644 --- a/Makefile.in +++ b/Makefile.in @@ -264,6 +264,7 @@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ +FILECMD = @FILECMD@ GREP = @GREP@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ INSTALL = @INSTALL@ diff --git a/aclocal.m4 b/aclocal.m4 index 3ccd6030e97b..82f7c4bcaacb 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -14,8 +14,8 @@ m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.71],, -[m4_warning([this file was generated for autoconf 2.71. +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.72],, +[m4_warning([this file was generated for autoconf 2.72. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) diff --git a/config.h.in b/config.h.in index 5ae30c61edd1..9391b4e7dd71 100644 --- a/config.h.in +++ b/config.h.in @@ -12,10 +12,10 @@ /* Define for ELF core file support */ #undef ELFCORE -/* Define to 1 if you have the `asctime_r' function. */ +/* Define to 1 if you have the 'asctime_r' function. */ #undef HAVE_ASCTIME_R -/* Define to 1 if you have the `asprintf' function. */ +/* Define to 1 if you have the 'asprintf' function. */ #undef HAVE_ASPRINTF /* Define to 1 if you have the <byteswap.h> header file. */ @@ -24,24 +24,24 @@ /* Define to 1 if you have the <bzlib.h> header file. */ #undef HAVE_BZLIB_H -/* Define to 1 if you have the `ctime_r' function. */ +/* Define to 1 if you have the 'ctime_r' function. */ #undef HAVE_CTIME_R /* HAVE_DAYLIGHT */ #undef HAVE_DAYLIGHT -/* Define to 1 if you have the declaration of `daylight', and to 0 if you +/* Define to 1 if you have the declaration of 'daylight', and to 0 if you don't. */ #undef HAVE_DECL_DAYLIGHT -/* Define to 1 if you have the declaration of `tzname', and to 0 if you don't. +/* Define to 1 if you have the declaration of 'tzname', and to 0 if you don't. */ #undef HAVE_DECL_TZNAME /* Define to 1 if you have the <dlfcn.h> header file. */ #undef HAVE_DLFCN_H -/* Define to 1 if you have the `dprintf' function. */ +/* Define to 1 if you have the 'dprintf' function. */ #undef HAVE_DPRINTF /* Define to 1 if you have the <err.h> header file. */ @@ -50,63 +50,69 @@ /* Define to 1 if you have the <fcntl.h> header file. */ #undef HAVE_FCNTL_H -/* Define to 1 if you have the `fmtcheck' function. */ +/* Define to 1 if you have the 'fmtcheck' function. */ #undef HAVE_FMTCHECK -/* Define to 1 if you have the `fork' function. */ +/* Define to 1 if you have the 'fork' function. */ #undef HAVE_FORK -/* Define to 1 if you have the `freelocale' function. */ +/* Define to 1 if you have the 'freelocale' function. */ #undef HAVE_FREELOCALE -/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */ +/* Define to 1 if fseeko (and ftello) are declared in stdio.h. */ #undef HAVE_FSEEKO -/* Define to 1 if you have the `getline' function. */ +/* Define to 1 if you have the 'getline' function. */ #undef HAVE_GETLINE /* Define to 1 if you have the <getopt.h> header file. */ #undef HAVE_GETOPT_H -/* Define to 1 if you have the `getopt_long' function. */ +/* Define to 1 if you have the 'getopt_long' function. */ #undef HAVE_GETOPT_LONG -/* Define to 1 if you have the `getpagesize' function. */ +/* Define to 1 if you have the 'getpagesize' function. */ #undef HAVE_GETPAGESIZE -/* Define to 1 if you have the `gmtime_r' function. */ +/* Define to 1 if you have the 'gmtime_r' function. */ #undef HAVE_GMTIME_R -/* Define to 1 if the system has the type `intptr_t'. */ +/* Define to 1 if the system has the type 'intptr_t'. */ #undef HAVE_INTPTR_T /* Define to 1 if you have the <inttypes.h> header file. */ #undef HAVE_INTTYPES_H -/* Define to 1 if you have the `bz2' library (-lbz2). */ +/* Define to 1 if you have the 'bz2' library (-lbz2). */ #undef HAVE_LIBBZ2 -/* Define to 1 if you have the `gnurx' library (-lgnurx). */ +/* Define to 1 if you have the 'gnurx' library (-lgnurx). */ #undef HAVE_LIBGNURX -/* Define to 1 if you have the `lz' library (-llz). */ +/* Define to 1 if you have the 'lrzip' library (-llrzip). */ +#undef HAVE_LIBLRZIP + +/* Define to 1 if you have the 'lz' library (-llz). */ #undef HAVE_LIBLZ -/* Define to 1 if you have the `lzma' library (-llzma). */ +/* Define to 1 if you have the 'lzma' library (-llzma). */ #undef HAVE_LIBLZMA -/* Define to 1 if you have the `seccomp' library (-lseccomp). */ +/* Define to 1 if you have the 'seccomp' library (-lseccomp). */ #undef HAVE_LIBSECCOMP -/* Define to 1 if you have the `z' library (-lz). */ +/* Define to 1 if you have the 'z' library (-lz). */ #undef HAVE_LIBZ -/* Define to 1 if you have the `zstd' library (-lzstd). */ +/* Define to 1 if you have the 'zstd' library (-lzstd). */ #undef HAVE_LIBZSTD -/* Define to 1 if you have the `localtime_r' function. */ +/* Define to 1 if you have the 'localtime_r' function. */ #undef HAVE_LOCALTIME_R +/* Define to 1 if you have the <Lrzip.h> header file. */ +#undef HAVE_LRZIP_H + /* Define to 1 if you have the <lzlib.h> header file. */ #undef HAVE_LZLIB_H @@ -119,31 +125,31 @@ /* Define to 1 if <wchar.h> declares mbstate_t. */ #undef HAVE_MBSTATE_T -/* Define to 1 if you have the `memmem' function. */ +/* Define to 1 if you have the 'memmem' function. */ #undef HAVE_MEMMEM /* Define to 1 if you have the <minix/config.h> header file. */ #undef HAVE_MINIX_CONFIG_H -/* Define to 1 if you have the `mkostemp' function. */ +/* Define to 1 if you have the 'mkostemp' function. */ #undef HAVE_MKOSTEMP -/* Define to 1 if you have the `mkstemp' function. */ +/* Define to 1 if you have the 'mkstemp' function. */ #undef HAVE_MKSTEMP -/* Define to 1 if you have a working `mmap' system call. */ +/* Define to 1 if you have a working 'mmap' system call. */ #undef HAVE_MMAP -/* Define to 1 if you have the `newlocale' function. */ +/* Define to 1 if you have the 'newlocale' function. */ #undef HAVE_NEWLOCALE -/* Define to 1 if you have the `pipe2' function. */ +/* Define to 1 if you have the 'pipe2' function. */ #undef HAVE_PIPE2 -/* Define to 1 if you have the `posix_spawnp' function. */ +/* Define to 1 if you have the 'posix_spawnp' function. */ #undef HAVE_POSIX_SPAWNP -/* Define to 1 if you have the `pread' function. */ +/* Define to 1 if you have the 'pread' function. */ #undef HAVE_PREAD /* Have sig_t type */ @@ -161,7 +167,7 @@ /* Define to 1 if you have the <stdlib.h> header file. */ #undef HAVE_STDLIB_H -/* Define to 1 if you have the `strcasestr' function. */ +/* Define to 1 if you have the 'strcasestr' function. */ #undef HAVE_STRCASESTR /* Define to 1 if you have the <strings.h> header file. */ @@ -170,28 +176,28 @@ /* Define to 1 if you have the <string.h> header file. */ #undef HAVE_STRING_H -/* Define to 1 if you have the `strlcat' function. */ +/* Define to 1 if you have the 'strlcat' function. */ #undef HAVE_STRLCAT -/* Define to 1 if you have the `strlcpy' function. */ +/* Define to 1 if you have the 'strlcpy' function. */ #undef HAVE_STRLCPY -/* Define to 1 if you have the `strndup' function. */ +/* Define to 1 if you have the 'strndup' function. */ #undef HAVE_STRNDUP -/* Define to 1 if you have the `strtof' function. */ +/* Define to 1 if you have the 'strtof' function. */ #undef HAVE_STRTOF /* HAVE_STRUCT_OPTION */ #undef HAVE_STRUCT_OPTION -/* Define to 1 if `st_rdev' is a member of `struct stat'. */ +/* Define to 1 if 'st_rdev' is a member of 'struct stat'. */ #undef HAVE_STRUCT_STAT_ST_RDEV -/* Define to 1 if `tm_gmtoff' is a member of `struct tm'. */ +/* Define to 1 if 'tm_gmtoff' is a member of 'struct tm'. */ #undef HAVE_STRUCT_TM_TM_GMTOFF -/* Define to 1 if `tm_zone' is a member of `struct tm'. */ +/* Define to 1 if 'tm_zone' is a member of 'struct tm'. */ #undef HAVE_STRUCT_TM_TM_ZONE /* Define to 1 if you have the <sys/bswap.h> header file. */ @@ -233,28 +239,28 @@ /* HAVE_TZNAME */ #undef HAVE_TZNAME -/* Define to 1 if the system has the type `uintptr_t'. */ +/* Define to 1 if the system has the type 'uintptr_t'. */ #undef HAVE_UINTPTR_T /* Define to 1 if you have the <unistd.h> header file. */ #undef HAVE_UNISTD_H -/* Define to 1 if you have the `uselocale' function. */ +/* Define to 1 if you have the 'uselocale' function. */ #undef HAVE_USELOCALE -/* Define to 1 if you have the `utime' function. */ +/* Define to 1 if you have the 'utime' function. */ #undef HAVE_UTIME -/* Define to 1 if you have the `utimes' function. */ +/* Define to 1 if you have the 'utimes' function. */ #undef HAVE_UTIMES /* Define to 1 if you have the <utime.h> header file. */ #undef HAVE_UTIME_H -/* Define to 1 if you have the `vasprintf' function. */ +/* Define to 1 if you have the 'vasprintf' function. */ #undef HAVE_VASPRINTF -/* Define to 1 if you have the `vfork' function. */ +/* Define to 1 if you have the 'vfork' function. */ #undef HAVE_VFORK /* Define to 1 if you have the <vfork.h> header file. */ @@ -270,13 +276,13 @@ /* Define to 1 if you have the <wctype.h> header file. */ #undef HAVE_WCTYPE_H -/* Define to 1 if you have the `wcwidth' function. */ +/* Define to 1 if you have the 'wcwidth' function. */ #undef HAVE_WCWIDTH -/* Define to 1 if `fork' works. */ +/* Define to 1 if 'fork' works. */ #undef HAVE_WORKING_FORK -/* Define to 1 if `vfork' works. */ +/* Define to 1 if 'vfork' works. */ #undef HAVE_WORKING_VFORK /* Define to 1 if you have the <xlocale.h> header file. */ @@ -291,17 +297,20 @@ /* Define to 1 if you have the <zstd.h> header file. */ #undef HAVE_ZSTD_H +/* Enable lrziplib compression support */ +#undef LRZIPLIBSUPPORT + /* Define to the sub-directory where libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Enable lzlib compression support */ #undef LZLIBSUPPORT -/* Define to 1 if `major', `minor', and `makedev' are declared in <mkdev.h>. +/* Define to 1 if 'major', 'minor', and 'makedev' are declared in <mkdev.h>. */ #undef MAJOR_IN_MKDEV -/* Define to 1 if `major', `minor', and `makedev' are declared in +/* Define to 1 if 'major', 'minor', and 'makedev' are declared in <sysmacros.h>. */ #undef MAJOR_IN_SYSMACROS @@ -326,15 +335,15 @@ /* Define to the version of this package. */ #undef PACKAGE_VERSION -/* Define to 1 if all of the C90 standard headers exist (not just the ones +/* Define to 1 if all of the C89 standard headers exist (not just the ones required in a freestanding environment). This macro is provided for backward compatibility; new code need not use it. */ #undef STDC_HEADERS -/* Define to 1 if your <sys/time.h> declares `struct tm'. */ +/* Define to 1 if your <sys/time.h> declares 'struct tm'. */ #undef TM_IN_SYS_TIME -/* Enable extensions on AIX 3, Interix. */ +/* Enable extensions on AIX, Interix, z/OS. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif @@ -395,11 +404,15 @@ #ifndef __STDC_WANT_IEC_60559_DFP_EXT__ # undef __STDC_WANT_IEC_60559_DFP_EXT__ #endif +/* Enable extensions specified by C23 Annex F. */ +#ifndef __STDC_WANT_IEC_60559_EXT__ +# undef __STDC_WANT_IEC_60559_EXT__ +#endif /* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ #ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ # undef __STDC_WANT_IEC_60559_FUNCS_EXT__ #endif -/* Enable extensions specified by ISO/IEC TS 18661-3:2015. */ +/* Enable extensions specified by C23 Annex H and ISO/IEC TS 18661-3:2015. */ #ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ # undef __STDC_WANT_IEC_60559_TYPES_EXT__ #endif @@ -449,12 +462,15 @@ /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS -/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */ +/* Define to 1 if necessary to make fseeko visible. */ #undef _LARGEFILE_SOURCE -/* Define for large files, on AIX-style hosts. */ +/* Define to 1 on platforms where this makes off_t a 64-bit type. */ #undef _LARGE_FILES +/* Number of bits in time_t, on hosts where this is settable. */ +#undef _TIME_BITS + /* Define for Solaris 2.5.1 so the uint32_t typedef from <sys/synch.h>, <pthread.h>, or <semaphore.h> is not used. If the typedef were allowed, the #define below would cause a syntax error. */ @@ -470,6 +486,9 @@ #define below would cause a syntax error. */ #undef _UINT8_T +/* Define to 1 on platforms where this makes time_t a 64-bit type. */ +#undef __MINGW_USE_VC2005_COMPAT + /* Define to the type of a signed integer type of width exactly 32 bits if such a type exists and the standard includes do not define it. */ #undef int32_t @@ -485,13 +504,13 @@ /* Define to a type if <wchar.h> does not define. */ #undef mbstate_t -/* Define to `long int' if <sys/types.h> does not define. */ +/* Define to 'long int' if <sys/types.h> does not define. */ #undef off_t /* Define as a signed integer type capable of holding a process identifier. */ #undef pid_t -/* Define to `unsigned int' if <sys/types.h> does not define. */ +/* Define as 'unsigned int' if <stddef.h> doesn't define. */ #undef size_t /* Define to the type of an unsigned integer type of width exactly 16 bits if @@ -514,5 +533,5 @@ pointer, if such a type exists, and if the system does not define it. */ #undef uintptr_t -/* Define as `fork' if `vfork' does not work. */ +/* Define as 'fork' if 'vfork' does not work. */ #undef vfork diff --git a/configure b/configure index 8043072f56f7..cdcdd746f562 100755 --- a/configure +++ b/configure @@ -1,11 +1,11 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for file 5.45. +# Generated by GNU Autoconf 2.72 for file 5.46. # # Report bugs to <christos@astron.com>. # # -# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, +# Copyright (C) 1992-1996, 1998-2017, 2020-2023 Free Software Foundation, # Inc. # # @@ -17,7 +17,6 @@ # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh @@ -26,12 +25,13 @@ then : # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else $as_nop - case `(set -o) 2>/dev/null` in #( +else case e in #( + e) case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; +esac ;; esac fi @@ -103,7 +103,7 @@ IFS=$as_save_IFS ;; esac -# We did not find ourselves, most probably we were run as `sh COMMAND' +# We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 @@ -133,15 +133,14 @@ case $- in # (((( esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. +# out after a failed 'exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="as_nop=: -if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 + as_bourne_compatible="if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: @@ -149,12 +148,13 @@ then : # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST -else \$as_nop - case \`(set -o) 2>/dev/null\` in #( +else case e in #( + e) case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; +esac ;; esac fi " @@ -172,8 +172,9 @@ as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : -else \$as_nop - exitcode=1; echo positional parameters were not saved. +else case e in #( + e) exitcode=1; echo positional parameters were not saved. ;; +esac fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) @@ -195,14 +196,15 @@ test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes -else $as_nop - as_have_required=no +else case e in #( + e) as_have_required=no ;; +esac fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : -else $as_nop - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +else case e in #( + e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do @@ -235,12 +237,13 @@ IFS=$as_save_IFS if $as_found then : -else $as_nop - if { test -f "$SHELL" || test -f "$SHELL.exe"; } && +else case e in #( + e) if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes -fi +fi ;; +esac fi @@ -262,7 +265,7 @@ case $- in # (((( esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. +# out after a failed 'exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi @@ -282,7 +285,8 @@ $0: a modern shell, or manually run the script under such a $0: shell if you do have one." fi exit 1 -fi +fi ;; +esac fi fi SHELL=${CONFIG_SHELL-/bin/sh} @@ -321,14 +325,6 @@ as_fn_exit () as_fn_set_status $1 exit $1 } # as_fn_exit -# as_fn_nop -# --------- -# Do nothing but, unlike ":", preserve the value of $?. -as_fn_nop () -{ - return $? -} -as_nop=as_fn_nop # as_fn_mkdir_p # ------------- @@ -397,11 +393,12 @@ then : { eval $1+=\$2 }' -else $as_nop - as_fn_append () +else case e in #( + e) as_fn_append () { eval $1=\$$1\$2 - } + } ;; +esac fi # as_fn_append # as_fn_arith ARG... @@ -415,21 +412,14 @@ then : { as_val=$(( $* )) }' -else $as_nop - as_fn_arith () +else case e in #( + e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` - } + } ;; +esac fi # as_fn_arith -# as_fn_nop -# --------- -# Do nothing but, unlike ":", preserve the value of $?. -as_fn_nop () -{ - return $? -} -as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- @@ -503,6 +493,8 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits /[$]LINENO/= ' <$as_myself | sed ' + t clear + :clear s/[$]LINENO.*/&-/ t lineno b @@ -551,7 +543,6 @@ esac as_echo='printf %s\n' as_echo_n='printf %s' - rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -563,9 +554,9 @@ if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. + # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. + # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then @@ -590,10 +581,12 @@ as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" +as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" +as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" +as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" +as_tr_sh="eval sed '$as_sed_sh'" # deprecated SHELL=${CONFIG_SHELL-/bin/sh} @@ -621,8 +614,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='file' PACKAGE_TARNAME='file' -PACKAGE_VERSION='5.45' -PACKAGE_STRING='file 5.45' +PACKAGE_VERSION='5.46' +PACKAGE_STRING='file 5.46' PACKAGE_BUGREPORT='christos@astron.com' PACKAGE_URL='' @@ -659,6 +652,7 @@ ac_includes_default="\ ac_header_c_list= ac_func_c_list= +enable_year2038=yes ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS @@ -679,6 +673,7 @@ ac_ct_AR AR DLLTOOL OBJDUMP +FILECMD NM ac_ct_DUMPBIN DUMPBIN @@ -802,6 +797,7 @@ enable_bzlib enable_xzlib enable_zstdlib enable_lzlib +enable_lrziplib enable_libseccomp enable_fsect_man5 enable_dependency_tracking @@ -815,6 +811,7 @@ with_sysroot enable_libtool_lock enable_largefile enable_warnings +enable_year2038 ' ac_precious_vars='build_alias host_alias @@ -933,7 +930,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: \`$ac_useropt'" + as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -959,7 +956,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: \`$ac_useropt'" + as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1172,7 +1169,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: \`$ac_useropt'" + as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1188,7 +1185,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: \`$ac_useropt'" + as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1218,8 +1215,8 @@ do | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; - -*) as_fn_error $? "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information" + -*) as_fn_error $? "unrecognized option: '$ac_option' +Try '$0 --help' for more information" ;; *=*) @@ -1227,7 +1224,7 @@ Try \`$0 --help' for more information" # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + as_fn_error $? "invalid variable name: '$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; @@ -1277,7 +1274,7 @@ do as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done -# There might be people who depend on the old broken behavior: `$host' +# There might be people who depend on the old broken behavior: '$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias @@ -1345,7 +1342,7 @@ if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_msg="sources are in $srcdir, but 'cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` @@ -1373,7 +1370,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures file 5.45 to adapt to many kinds of systems. +'configure' configures file 5.46 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1387,11 +1384,11 @@ Configuration: --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking ...' messages + -q, --quiet, --silent do not print 'checking ...' messages --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' + -C, --config-cache alias for '--cache-file=config.cache' -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] + --srcdir=DIR find the sources in DIR [configure dir or '..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX @@ -1399,10 +1396,10 @@ Installation directories: --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. +By default, 'make install' will install all the files in +'$ac_default_prefix/bin', '$ac_default_prefix/lib' etc. You can specify +an installation prefix other than '$ac_default_prefix' using '--prefix', +for instance '--prefix=\$HOME'. For better control, use the options below. @@ -1444,7 +1441,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of file 5.45:";; + short | recursive ) echo "Configuration of file 5.46:";; esac cat <<\_ACEOF @@ -1463,6 +1460,8 @@ Optional Features: --disable-zstdlib disable zstdlib compression support [default=auto] --disable-lzlib disable liblz (lzip) compression support [default=auto] + --disable-lrziplib disable liblrzip (lrzip) compression support + [default=auto] --disable-libseccomp disable libseccomp sandboxing [default=auto] --enable-fsect-man5 enable file formats in man section 5 --enable-dependency-tracking @@ -1476,6 +1475,7 @@ Optional Features: --disable-libtool-lock avoid locking (might break parallel builds) --disable-largefile omit support for large files --disable-warnings disable compiler warnings + --disable-year2038 don't support timestamps after 2038 Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] @@ -1500,7 +1500,7 @@ Some influential environment variables: LT_SYS_LIBRARY_PATH User-defined run-time library search path. -Use these variables to override the choices made by `configure' or to help +Use these variables to override the choices made by 'configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to <christos@astron.com>. @@ -1567,10 +1567,10 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -file configure 5.45 -generated by GNU Autoconf 2.71 +file configure 5.46 +generated by GNU Autoconf 2.72 -Copyright (C) 2021 Free Software Foundation, Inc. +Copyright (C) 2023 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF @@ -1609,11 +1609,12 @@ printf "%s\n" "$ac_try_echo"; } >&5 } && test -s conftest.$ac_objext then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else case e in #( + e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_retval=1 + ac_retval=1 ;; +esac fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval @@ -1632,8 +1633,8 @@ printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> @@ -1641,10 +1642,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" -else $as_nop - eval "$3=no" +else case e in #( + e) eval "$3=no" ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -1653,49 +1656,6 @@ printf "%s\n" "$ac_res" >&6; } } # ac_fn_c_check_header_compile -# ac_fn_c_try_run LINENO -# ---------------------- -# Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that -# executables *can* be run. -ac_fn_c_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; } -then : - ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: program exited with status $ac_status" >&5 - printf "%s\n" "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_run - # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. @@ -1727,11 +1687,12 @@ printf "%s\n" "$ac_try_echo"; } >&5 } then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else case e in #( + e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_retval=1 + ac_retval=1 ;; +esac fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would @@ -1743,6 +1704,50 @@ fi } # ac_fn_c_try_link +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that +# executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } +then : + ac_retval=0 +else case e in #( + e) printf "%s\n" "$as_me: program exited with status $ac_status" >&5 + printf "%s\n" "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status ;; +esac +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly @@ -1754,15 +1759,15 @@ printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case <limits.h> declares $2. For example, HP-UX 11i <limits.h> declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. */ + which can conflict with char $2 (void); below. */ #include <limits.h> #undef $2 @@ -1773,7 +1778,7 @@ else $as_nop #ifdef __cplusplus extern "C" #endif -char $2 (); +char $2 (void); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ @@ -1792,11 +1797,13 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : eval "$3=yes" -else $as_nop - eval "$3=no" +else case e in #( + e) eval "$3=no" ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext + conftest$ac_exeext conftest.$ac_ext ;; +esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -1817,8 +1824,8 @@ printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 -else $as_nop - eval "$3=no" +else case e in #( + e) eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 @@ -1848,12 +1855,14 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : -else $as_nop - eval "$3=yes" +else case e in #( + e) eval "$3=yes" ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -1874,8 +1883,8 @@ printf %s "checking for $2.$3... " >&6; } if eval test \${$4+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int @@ -1891,8 +1900,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$4=yes" -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int @@ -1908,12 +1917,15 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$4=yes" -else $as_nop - eval "$4=no" +else case e in #( + e) eval "$4=no" ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi eval ac_res=\$$4 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -1935,8 +1947,8 @@ printf %s "checking whether $as_decl_name is declared... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 -else $as_nop - as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` +else case e in #( + e) as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` eval ac_save_FLAGS=\$$6 as_fn_append $6 " $5" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -1960,12 +1972,14 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" -else $as_nop - eval "$3=no" +else case e in #( + e) eval "$3=no" ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext eval $6=\$ac_save_FLAGS - + ;; +esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -1986,8 +2000,8 @@ printf %s "checking for uint$2_t... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 -else $as_nop - eval "$3=no" +else case e in #( + e) eval "$3=no" # Order is important - never check a type that is potentially smaller # than half of the expected target width. for ac_type in uint$2_t 'unsigned int' 'unsigned long int' \ @@ -2019,10 +2033,12 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if eval test \"x\$"$3"\" = x"no" then : -else $as_nop - break +else case e in #( + e) break ;; +esac fi - done + done ;; +esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -2043,8 +2059,8 @@ printf %s "checking for int$2_t... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 -else $as_nop - eval "$3=no" +else case e in #( + e) eval "$3=no" # Order is important - never check a type that is potentially smaller # than half of the expected target width. for ac_type in int$2_t 'int' 'long int' \ @@ -2085,12 +2101,13 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : -else $as_nop - case $ac_type in #( +else case e in #( + e) case $ac_type in #( int$2_t) : eval "$3=yes" ;; #( *) : eval "$3=\$ac_type" ;; +esac ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext @@ -2099,10 +2116,12 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if eval test \"x\$"$3"\" = x"no" then : -else $as_nop - break +else case e in #( + e) break ;; +esac fi - done + done ;; +esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -2134,8 +2153,8 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by file $as_me 5.45, which was -generated by GNU Autoconf 2.71. Invocation command line was +It was created by file $as_me 5.46, which was +generated by GNU Autoconf 2.72. Invocation command line was $ $0$ac_configure_args_raw @@ -2381,10 +2400,10 @@ esac printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ - || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } fi done @@ -2420,9 +2439,7 @@ struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; +static char *e (char **p, int i) { return p[i]; } @@ -2436,6 +2453,21 @@ static char *f (char * (*g) (char **, int), char **p, ...) return s; } +/* C89 style stringification. */ +#define noexpand_stringify(a) #a +const char *stringified = noexpand_stringify(arbitrary+token=sequence); + +/* C89 style token pasting. Exercises some of the corner cases that + e.g. old MSVC gets wrong, but not very hard. */ +#define noexpand_concat(a,b) a##b +#define expand_concat(a,b) noexpand_concat(a,b) +extern int vA; +extern int vbee; +#define aye A +#define bee B +int *pvA = &expand_concat(v,aye); +int *pvbee = &noexpand_concat(v,bee); + /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not \xHH hex character constants. These do not provoke an error unfortunately, instead are silently treated @@ -2463,16 +2495,19 @@ ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' -// Does the compiler advertise C99 conformance? +/* Does the compiler advertise C99 conformance? */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif +// See if C++-style comments work. + #include <stdbool.h> extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); +extern void free (void *); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare @@ -2522,7 +2557,6 @@ typedef const char *ccp; static inline int test_restrict (ccp restrict text) { - // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) @@ -2588,6 +2622,8 @@ ac_c_conftest_c99_main=' ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; + // Work around memory leak warnings. + free (ia); // Check named initializers. struct named_init ni = { @@ -2609,7 +2645,7 @@ ac_c_conftest_c99_main=' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' -// Does the compiler advertise C11 conformance? +/* Does the compiler advertise C11 conformance? */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif @@ -2808,8 +2844,9 @@ IFS=$as_save_IFS if $as_found then : -else $as_nop - as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 +else case e in #( + e) as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 ;; +esac fi @@ -2837,12 +2874,12 @@ for ac_var in $ac_precious_vars; do eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&5 +printf "%s\n" "$as_me: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was not set in the previous run" >&5 +printf "%s\n" "$as_me: error: '$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) @@ -2851,18 +2888,18 @@ printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' has changed since the previous run:" >&5 +printf "%s\n" "$as_me: error: '$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&5 +printf "%s\n" "$as_me: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: '$ac_old_val'" >&5 +printf "%s\n" "$as_me: former value: '$ac_old_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: '$ac_new_val'" >&5 +printf "%s\n" "$as_me: current value: '$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. @@ -2878,11 +2915,11 @@ printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} fi done if $ac_cache_corrupted; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' + as_fn_error $? "run '${MAKE-make} distclean' and/or 'rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## @@ -2920,8 +2957,8 @@ if test -z "$INSTALL"; then if test ${ac_cv_path_install+y} then : printf %s "(cached) " >&6 -else $as_nop - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +else case e in #( + e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS @@ -2975,7 +3012,8 @@ esac IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir - + ;; +esac fi if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install @@ -3071,7 +3109,7 @@ test "$program_prefix" != NONE && test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. -# By default was `s,x,x', remove it if useless. +# By default was 's,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`printf "%s\n" "$program_transform_name" | sed "$ac_script"` @@ -3114,8 +3152,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_STRIP+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$STRIP"; then +else case e in #( + e) if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -3137,7 +3175,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then @@ -3159,8 +3198,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_STRIP+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_STRIP"; then +else case e in #( + e) if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -3182,7 +3221,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then @@ -3218,8 +3258,8 @@ if test -z "$MKDIR_P"; then if test ${ac_cv_path_mkdir+y} then : printf %s "(cached) " >&6 -else $as_nop - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +else case e in #( + e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS @@ -3233,7 +3273,7 @@ do as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext" || continue case `"$as_dir$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir ('*'coreutils) '* | \ - 'BusyBox '* | \ + *'BusyBox '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir$ac_prog$ac_exec_ext break 3;; @@ -3242,18 +3282,17 @@ do done done IFS=$as_save_IFS - + ;; +esac fi test -d ./--version && rmdir ./--version if test ${ac_cv_path_mkdir+y}; then MKDIR_P="$ac_cv_path_mkdir -p" else - # As a last resort, use the slow shell script. Don't cache a - # value for MKDIR_P within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - MKDIR_P="$ac_install_sh -d" + # As a last resort, use plain mkdir -p, + # in the hope it doesn't have the bugs of ancient mkdir. + MKDIR_P='mkdir -p' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 @@ -3268,8 +3307,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$AWK"; then +else case e in #( + e) if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -3291,7 +3330,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then @@ -3313,8 +3353,8 @@ ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval test \${ac_cv_prog_make_${ac_make}_set+y} then : printf %s "(cached) " >&6 -else $as_nop - cat >conftest.make <<\_ACEOF +else case e in #( + e) cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' @@ -3326,7 +3366,8 @@ case `${MAKE-make} -f conftest.make 2>/dev/null` in *) eval ac_cv_prog_make_${ac_make}_set=no;; esac -rm -f conftest.make +rm -f conftest.make ;; +esac fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 @@ -3364,8 +3405,8 @@ printf %s "checking whether $am_make supports nested variables... " >&6; } if test ${am_cv_make_support_nested_variables+y} then : printf %s "(cached) " >&6 -else $as_nop - if printf "%s\n" 'TRUE=$(BAR$(V)) +else case e in #( + e) if printf "%s\n" 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 @@ -3375,7 +3416,8 @@ am__doit: am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no -fi +fi ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 printf "%s\n" "$am_cv_make_support_nested_variables" >&6; } @@ -3410,7 +3452,7 @@ fi # Define the identity of the package. PACKAGE='file' - VERSION='5.45' + VERSION='5.46' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h @@ -3530,8 +3572,8 @@ printf %s "checking whether $am_make supports nested variables... " >&6; } if test ${am_cv_make_support_nested_variables+y} then : printf %s "(cached) " >&6 -else $as_nop - if printf "%s\n" 'TRUE=$(BAR$(V)) +else case e in #( + e) if printf "%s\n" 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 @@ -3541,7 +3583,8 @@ am__doit: am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no -fi +fi ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 printf "%s\n" "$am_cv_make_support_nested_variables" >&6; } @@ -3574,15 +3617,16 @@ else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi -else $as_nop - +else case e in #( + e) # enable by default { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } printf "%s\n" "#define BUILTIN_ELF 1" >>confdefs.h - + ;; +esac fi @@ -3601,15 +3645,16 @@ else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi -else $as_nop - +else case e in #( + e) # enable by default { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } printf "%s\n" "#define ELFCORE 1" >>confdefs.h - + ;; +esac fi @@ -3668,6 +3713,17 @@ fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_lzlib" >&5 printf "%s\n" "$enable_lzlib" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for lrziplib support" >&5 +printf %s "checking for lrziplib support... " >&6; } +# Check whether --enable-lrziplib was given. +if test ${enable_lrziplib+y} +then : + enableval=$enable_lrziplib; +fi + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_lrziplib" >&5 +printf "%s\n" "$enable_lrziplib" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libseccomp support" >&5 printf %s "checking for libseccomp support... " >&6; } # Check whether --enable-libseccomp was given. @@ -3693,13 +3749,14 @@ else printf "%s\n" "no" >&6; } fsect=4 fi -else $as_nop - +else case e in #( + e) # disable by default { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fsect=4 - + ;; +esac fi @@ -3714,15 +3771,16 @@ printf %s "checking build system type... " >&6; } if test ${ac_cv_build+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_build_alias=$build_alias +else case e in #( + e) ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 printf "%s\n" "$ac_cv_build" >&6; } @@ -3749,14 +3807,15 @@ printf %s "checking host system type... " >&6; } if test ${ac_cv_host+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "x$host_alias" = x; then +else case e in #( + e) if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 printf "%s\n" "$ac_cv_host" >&6; } @@ -3832,8 +3891,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then +else case e in #( + e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -3855,7 +3914,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then @@ -3877,8 +3937,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CC"; then +else case e in #( + e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -3900,7 +3960,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then @@ -3935,8 +3996,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then +else case e in #( + e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -3958,7 +4019,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then @@ -3980,8 +4042,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then +else case e in #( + e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no @@ -4020,7 +4082,8 @@ if test $ac_prog_rejected = yes; then ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi -fi +fi ;; +esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then @@ -4044,8 +4107,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then +else case e in #( + e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -4067,7 +4130,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then @@ -4093,8 +4157,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CC"; then +else case e in #( + e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -4116,7 +4180,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then @@ -4154,8 +4219,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then +else case e in #( + e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -4177,7 +4242,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then @@ -4199,8 +4265,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CC"; then +else case e in #( + e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -4222,7 +4288,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then @@ -4251,10 +4318,10 @@ fi fi -test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 @@ -4326,8 +4393,8 @@ printf "%s\n" "$ac_try_echo"; } >&5 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' + # Autoconf-2.13 could set the ac_cv_exeext variable to 'no'. +# So ignore a value of 'no', otherwise this would lead to 'EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. @@ -4347,7 +4414,7 @@ do ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' + # safe: cross compilers may not add the suffix if given an '-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. @@ -4358,8 +4425,9 @@ do done test "$ac_cv_exeext" = no && ac_cv_exeext= -else $as_nop - ac_file='' +else case e in #( + e) ac_file='' ;; +esac fi if test -z "$ac_file" then : @@ -4368,13 +4436,14 @@ printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables -See \`config.log' for more details" "$LINENO" 5; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } +See 'config.log' for more details" "$LINENO" 5; } +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } @@ -4398,10 +4467,10 @@ printf "%s\n" "$ac_try_echo"; } >&5 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. + # If both 'conftest.exe' and 'conftest' are 'present' (well, observable) +# catch 'conftest.exe'. For instance with Cygwin, 'ls conftest' will +# work properly (i.e., refer to 'conftest.exe'), while it won't with +# 'rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in @@ -4411,11 +4480,12 @@ for ac_file in conftest.exe conftest conftest.*; do * ) break;; esac done -else $as_nop - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +else case e in #( + e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } ;; +esac fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 @@ -4431,6 +4501,8 @@ int main (void) { FILE *f = fopen ("conftest.out", "w"); + if (!f) + return 1; return ferror (f) || fclose (f) != 0; ; @@ -4470,26 +4542,27 @@ printf "%s\n" "$ac_try_echo"; } >&5 if test "$cross_compiling" = maybe; then cross_compiling=yes else - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5; } +If you meant to cross compile, use '--host'. +See 'config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +rm -f conftest.$ac_ext conftest$ac_cv_exeext \ + conftest.o conftest.obj conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -4521,16 +4594,18 @@ then : break;; esac done -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else case e in #( + e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } ;; +esac fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext +rm -f conftest.$ac_cv_objext conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } @@ -4541,8 +4616,8 @@ printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -4559,12 +4634,14 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes -else $as_nop - ac_compiler_gnu=no +else case e in #( + e) ac_compiler_gnu=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } @@ -4582,8 +4659,8 @@ printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_save_c_werror_flag=$ac_c_werror_flag +else case e in #( + e) ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" @@ -4601,8 +4678,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes -else $as_nop - CFLAGS="" +else case e in #( + e) CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -4617,8 +4694,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : -else $as_nop - ac_c_werror_flag=$ac_save_c_werror_flag +else case e in #( + e) ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -4635,12 +4712,15 @@ if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag + ac_c_werror_flag=$ac_save_c_werror_flag ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } @@ -4667,8 +4747,8 @@ printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c11=no +else case e in #( + e) ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -4685,25 +4765,28 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext -CC=$ac_save_CC +CC=$ac_save_CC ;; +esac fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c11" = x +else case e in #( + e) if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } - CC="$CC $ac_cv_prog_cc_c11" + CC="$CC $ac_cv_prog_cc_c11" ;; +esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 - ac_prog_cc_stdc=c11 + ac_prog_cc_stdc=c11 ;; +esac fi fi if test x$ac_prog_cc_stdc = xno @@ -4713,8 +4796,8 @@ printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c99=no +else case e in #( + e) ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -4731,25 +4814,28 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext -CC=$ac_save_CC +CC=$ac_save_CC ;; +esac fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c99" = x +else case e in #( + e) if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } - CC="$CC $ac_cv_prog_cc_c99" + CC="$CC $ac_cv_prog_cc_c99" ;; +esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 - ac_prog_cc_stdc=c99 + ac_prog_cc_stdc=c99 ;; +esac fi fi if test x$ac_prog_cc_stdc = xno @@ -4759,8 +4845,8 @@ printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c89=no +else case e in #( + e) ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -4777,25 +4863,28 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext -CC=$ac_save_CC +CC=$ac_save_CC ;; +esac fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c89" = x +else case e in #( + e) if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } - CC="$CC $ac_cv_prog_cc_c89" + CC="$CC $ac_cv_prog_cc_c89" ;; +esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 - ac_prog_cc_stdc=c89 + ac_prog_cc_stdc=c89 ;; +esac fi fi @@ -4816,8 +4905,8 @@ printf %s "checking whether $CC understands -c and -o together... " >&6; } if test ${am_cv_prog_cc_c_o+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -4847,7 +4936,8 @@ _ACEOF fi done rm -f core conftest* - unset am_i + unset am_i ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 printf "%s\n" "$am_cv_prog_cc_c_o" >&6; } @@ -4937,8 +5027,8 @@ printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then +else case e in #( + e) if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up @@ -5042,7 +5132,8 @@ else $as_nop else am_cv_CC_dependencies_compiler_type=none fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; } @@ -5100,8 +5191,8 @@ printf %s "checking whether it is safe to define __EXTENSIONS__... " >&6; } if test ${ac_cv_safe_to_define___extensions__+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define __EXTENSIONS__ 1 @@ -5117,10 +5208,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_safe_to_define___extensions__=yes -else $as_nop - ac_cv_safe_to_define___extensions__=no +else case e in #( + e) ac_cv_safe_to_define___extensions__=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 printf "%s\n" "$ac_cv_safe_to_define___extensions__" >&6; } @@ -5130,8 +5223,8 @@ printf %s "checking whether _XOPEN_SOURCE should be defined... " >&6; } if test ${ac_cv_should_define__xopen_source+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_should_define__xopen_source=no +else case e in #( + e) ac_cv_should_define__xopen_source=no if test $ac_cv_header_wchar_h = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -5150,8 +5243,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE 500 @@ -5169,10 +5262,12 @@ if ac_fn_c_try_compile "$LINENO" then : ac_cv_should_define__xopen_source=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi +fi ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_should_define__xopen_source" >&5 printf "%s\n" "$ac_cv_should_define__xopen_source" >&6; } @@ -5197,6 +5292,8 @@ printf "%s\n" "$ac_cv_should_define__xopen_source" >&6; } printf "%s\n" "#define __STDC_WANT_IEC_60559_DFP_EXT__ 1" >>confdefs.h + printf "%s\n" "#define __STDC_WANT_IEC_60559_EXT__ 1" >>confdefs.h + printf "%s\n" "#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1" >>confdefs.h @@ -5216,8 +5313,9 @@ then : printf "%s\n" "#define _POSIX_1_SOURCE 2" >>confdefs.h -else $as_nop - MINIX= +else case e in #( + e) MINIX= ;; +esac fi if test $ac_cv_safe_to_define___extensions__ = yes then : @@ -5236,8 +5334,8 @@ printf %s "checking whether byte ordering is bigendian... " >&6; } if test ${ac_cv_c_bigendian+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_c_bigendian=unknown +else case e in #( + e) ac_cv_c_bigendian=unknown # See if we're dealing with a universal compiler. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -5283,8 +5381,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext int main (void) { -#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ - && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \\ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \\ && LITTLE_ENDIAN) bogus endian macros #endif @@ -5315,8 +5413,9 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_bigendian=yes -else $as_nop - ac_cv_c_bigendian=no +else case e in #( + e) ac_cv_c_bigendian=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi @@ -5360,8 +5459,9 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_bigendian=yes -else $as_nop - ac_cv_c_bigendian=no +else case e in #( + e) ac_cv_c_bigendian=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi @@ -5388,22 +5488,23 @@ unsigned short int ascii_mm[] = int use_ebcdic (int i) { return ebcdic_mm[i] + ebcdic_ii[i]; } - extern int foo; - -int -main (void) -{ -return use_ascii (foo) == use_ebcdic (foo); - ; - return 0; -} + int + main (int argc, char **argv) + { + /* Intimidate the compiler so that it does not + optimize the arrays away. */ + char *p = argv[0]; + ascii_mm[1] = *p++; ebcdic_mm[1] = *p++; + ascii_ii[1] = *p++; ebcdic_ii[1] = *p++; + return use_ascii (argc) == use_ebcdic (*p); + } _ACEOF -if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_link "$LINENO" then : - if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + if grep BIGenDianSyS conftest$ac_exeext >/dev/null; then ac_cv_c_bigendian=yes fi - if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if grep LiTTleEnDian conftest$ac_exeext >/dev/null ; then if test "$ac_cv_c_bigendian" = unknown; then ac_cv_c_bigendian=no else @@ -5412,9 +5513,10 @@ then : fi fi fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int @@ -5437,14 +5539,17 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_c_bigendian=no -else $as_nop - ac_cv_c_bigendian=yes +else case e in #( + e) ac_cv_c_bigendian=yes ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - fi + fi ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 printf "%s\n" "$ac_cv_c_bigendian" >&6; } @@ -5484,8 +5589,8 @@ esac -macro_version='2.4.6' -macro_revision='2.4.6' +macro_version='2.4.7' +macro_revision='2.4.7' @@ -5576,8 +5681,8 @@ printf %s "checking for a sed that does not truncate output... " >&6; } if test ${ac_cv_path_SED+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ +else case e in #( + e) ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done @@ -5602,9 +5707,10 @@ do as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in +case `"$ac_path_SED" --version 2>&1` in #( *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +#( *) ac_count=0 printf %s 0123456789 >"conftest.in" @@ -5639,7 +5745,8 @@ IFS=$as_save_IFS else ac_cv_path_SED=$SED fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 printf "%s\n" "$ac_cv_path_SED" >&6; } @@ -5664,8 +5771,8 @@ printf %s "checking for grep that handles long lines and -e... " >&6; } if test ${ac_cv_path_GREP+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -z "$GREP"; then +else case e in #( + e) if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -5684,9 +5791,10 @@ do as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in +case `"$ac_path_GREP" --version 2>&1` in #( *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +#( *) ac_count=0 printf %s 0123456789 >"conftest.in" @@ -5721,7 +5829,8 @@ IFS=$as_save_IFS else ac_cv_path_GREP=$GREP fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 printf "%s\n" "$ac_cv_path_GREP" >&6; } @@ -5733,8 +5842,8 @@ printf %s "checking for egrep... " >&6; } if test ${ac_cv_path_EGREP+y} then : printf %s "(cached) " >&6 -else $as_nop - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 +else case e in #( + e) if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then @@ -5756,9 +5865,10 @@ do as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in +case `"$ac_path_EGREP" --version 2>&1` in #( *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +#( *) ac_count=0 printf %s 0123456789 >"conftest.in" @@ -5794,20 +5904,23 @@ else ac_cv_path_EGREP=$EGREP fi - fi + fi ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 printf "%s\n" "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" + EGREP_TRADITIONAL=$EGREP + ac_cv_path_EGREP_TRADITIONAL=$EGREP { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 printf %s "checking for fgrep... " >&6; } if test ${ac_cv_path_FGREP+y} then : printf %s "(cached) " >&6 -else $as_nop - if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 +else case e in #( + e) if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then @@ -5829,9 +5942,10 @@ do as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP -case `"$ac_path_FGREP" --version 2>&1` in +case `"$ac_path_FGREP" --version 2>&1` in #( *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +#( *) ac_count=0 printf %s 0123456789 >"conftest.in" @@ -5867,7 +5981,8 @@ else ac_cv_path_FGREP=$FGREP fi - fi + fi ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 printf "%s\n" "$ac_cv_path_FGREP" >&6; } @@ -5898,8 +6013,9 @@ test -z "$GREP" && GREP=grep if test ${with_gnu_ld+y} then : withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes -else $as_nop - with_gnu_ld=no +else case e in #( + e) with_gnu_ld=no ;; +esac fi ac_prog=ld @@ -5944,8 +6060,8 @@ fi if test ${lt_cv_path_LD+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -z "$LD"; then +else case e in #( + e) if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs @@ -5968,7 +6084,8 @@ else $as_nop IFS=$lt_save_ifs else lt_cv_path_LD=$LD # Let the user override the test with a path. -fi +fi ;; +esac fi LD=$lt_cv_path_LD @@ -5985,8 +6102,8 @@ printf %s "checking if the linker ($LD) is GNU ld... " >&6; } if test ${lt_cv_prog_gnu_ld+y} then : printf %s "(cached) " >&6 -else $as_nop - # I'd rather use --version here, but apparently some GNU lds only accept -v. +else case e in #( + e) # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) lt_cv_prog_gnu_ld=yes @@ -5994,6 +6111,7 @@ case `$LD -v 2>&1 </dev/null` in *) lt_cv_prog_gnu_ld=no ;; +esac ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5 @@ -6013,8 +6131,8 @@ printf %s "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if test ${lt_cv_path_NM+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$NM"; then +else case e in #( + e) if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM else @@ -6038,13 +6156,13 @@ else mingw*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac - case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in + case `"$tmp_nm" -B $lt_bad_file 2>&1 | $SED '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + case `"$tmp_nm" -p /dev/null 2>&1 | $SED '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 @@ -6061,7 +6179,8 @@ else IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} -fi +fi ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 printf "%s\n" "$lt_cv_path_NM" >&6; } @@ -6082,8 +6201,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_DUMPBIN+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$DUMPBIN"; then +else case e in #( + e) if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -6105,7 +6224,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then @@ -6131,8 +6251,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_DUMPBIN+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_DUMPBIN"; then +else case e in #( + e) if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -6154,7 +6274,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then @@ -6182,7 +6303,7 @@ esac fi fi - case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in + case `$DUMPBIN -symbols -headers /dev/null 2>&1 | $SED '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; @@ -6208,8 +6329,8 @@ printf %s "checking the name lister ($NM) interface... " >&6; } if test ${lt_cv_nm_interface+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_nm_interface="BSD nm" +else case e in #( + e) lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) @@ -6222,7 +6343,8 @@ else $as_nop if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi - rm -f conftest* + rm -f conftest* ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 printf "%s\n" "$lt_cv_nm_interface" >&6; } @@ -6233,8 +6355,8 @@ printf %s "checking the maximum length of command line arguments... " >&6; } if test ${lt_cv_sys_max_cmd_len+y} then : printf %s "(cached) " >&6 -else $as_nop - i=0 +else case e in #( + e) i=0 teststring=ABCD case $build_os in @@ -6275,7 +6397,7 @@ else $as_nop lt_cv_sys_max_cmd_len=8192; ;; - bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) + bitrig* | darwin* | dragonfly* | freebsd* | midnightbsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` @@ -6318,7 +6440,7 @@ else $as_nop sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + lt_cv_sys_max_cmd_len=`echo $kargmax | $SED 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi @@ -6356,7 +6478,8 @@ else $as_nop fi ;; esac - + ;; +esac fi if test -n "$lt_cv_sys_max_cmd_len"; then @@ -6413,8 +6536,8 @@ printf %s "checking how to convert $build file names to $host format... " >&6; } if test ${lt_cv_to_host_file_cmd+y} then : printf %s "(cached) " >&6 -else $as_nop - case $host in +else case e in #( + e) case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys @@ -6445,7 +6568,8 @@ else $as_nop lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac - + ;; +esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd @@ -6461,8 +6585,8 @@ printf %s "checking how to convert $build file names to toolchain format... " >& if test ${lt_cv_to_tool_file_cmd+y} then : printf %s "(cached) " >&6 -else $as_nop - #assume ordinary cross tools, or native build. +else case e in #( + e) #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) @@ -6473,7 +6597,8 @@ case $host in esac ;; esac - + ;; +esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd @@ -6489,8 +6614,9 @@ printf %s "checking for $LD option to reload object files... " >&6; } if test ${lt_cv_ld_reload_flag+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_ld_reload_flag='-r' +else case e in #( + e) lt_cv_ld_reload_flag='-r' ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 printf "%s\n" "$lt_cv_ld_reload_flag" >&6; } @@ -6524,6 +6650,116 @@ esac if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}file", so it can be a program name with args. +set dummy ${ac_tool_prefix}file; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_FILECMD+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$FILECMD"; then + ac_cv_prog_FILECMD="$FILECMD" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_FILECMD="${ac_tool_prefix}file" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi ;; +esac +fi +FILECMD=$ac_cv_prog_FILECMD +if test -n "$FILECMD"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FILECMD" >&5 +printf "%s\n" "$FILECMD" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_FILECMD"; then + ac_ct_FILECMD=$FILECMD + # Extract the first word of "file", so it can be a program name with args. +set dummy file; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_FILECMD+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$ac_ct_FILECMD"; then + ac_cv_prog_ac_ct_FILECMD="$ac_ct_FILECMD" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_FILECMD="file" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi ;; +esac +fi +ac_ct_FILECMD=$ac_cv_prog_ac_ct_FILECMD +if test -n "$ac_ct_FILECMD"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FILECMD" >&5 +printf "%s\n" "$ac_ct_FILECMD" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_ct_FILECMD" = x; then + FILECMD=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + FILECMD=$ac_ct_FILECMD + fi +else + FILECMD="$ac_cv_prog_FILECMD" +fi + + + + + + + +if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 @@ -6531,8 +6767,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_OBJDUMP+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$OBJDUMP"; then +else case e in #( + e) if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -6554,7 +6790,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then @@ -6576,8 +6813,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_OBJDUMP+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_OBJDUMP"; then +else case e in #( + e) if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -6599,7 +6836,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then @@ -6640,8 +6878,8 @@ printf %s "checking how to recognize dependent libraries... " >&6; } if test ${lt_cv_deplibs_check_method+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_file_magic_cmd='$MAGIC_CMD' +else case e in #( + e) lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support @@ -6666,7 +6904,7 @@ beos*) bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_cmd='$FILECMD -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; @@ -6700,14 +6938,14 @@ darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; -freebsd* | dragonfly*) +freebsd* | dragonfly* | midnightbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_cmd=$FILECMD lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac @@ -6721,7 +6959,7 @@ haiku*) ;; hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_cmd=$FILECMD case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' @@ -6768,7 +7006,7 @@ netbsd*) newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_cmd=$FILECMD lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; @@ -6834,7 +7072,8 @@ os2*) lt_cv_deplibs_check_method=pass_all ;; esac - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 printf "%s\n" "$lt_cv_deplibs_check_method" >&6; } @@ -6886,8 +7125,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_DLLTOOL+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$DLLTOOL"; then +else case e in #( + e) if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -6909,7 +7148,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then @@ -6931,8 +7171,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_DLLTOOL+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_DLLTOOL"; then +else case e in #( + e) if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -6954,7 +7194,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then @@ -6996,8 +7237,8 @@ printf %s "checking how to associate runtime and link libraries... " >&6; } if test ${lt_cv_sharedlib_from_linklib_cmd+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_sharedlib_from_linklib_cmd='unknown' +else case e in #( + e) lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) @@ -7017,7 +7258,8 @@ cygwin* | mingw* | pw32* | cegcc*) lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 printf "%s\n" "$lt_cv_sharedlib_from_linklib_cmd" >&6; } @@ -7040,8 +7282,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AR+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$AR"; then +else case e in #( + e) if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -7063,7 +7305,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi AR=$ac_cv_prog_AR if test -n "$AR"; then @@ -7089,8 +7332,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_AR+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_AR"; then +else case e in #( + e) if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -7112,7 +7355,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then @@ -7141,13 +7385,29 @@ esac fi : ${AR=ar} -: ${AR_FLAGS=cru} +# Use ARFLAGS variable as AR's operation code to sync the variable naming with +# Automake. If both AR_FLAGS and ARFLAGS are specified, AR_FLAGS should have +# higher priority because thats what people were doing historically (setting +# ARFLAGS for automake and AR_FLAGS for libtool). FIXME: Make the AR_FLAGS +# variable obsoleted/removed. + +test ${AR_FLAGS+y} || AR_FLAGS=${ARFLAGS-cr} +lt_ar_flags=$AR_FLAGS + + + + + + +# Make AR_FLAGS overridable by 'make ARFLAGS='. Don't try to run-time override +# by AR_FLAGS because that was never working and AR_FLAGS is about to die. + @@ -7158,8 +7418,8 @@ printf %s "checking for archiver @FILE support... " >&6; } if test ${lt_cv_ar_at_file+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_ar_at_file=no +else case e in #( + e) lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -7196,7 +7456,8 @@ then : fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 printf "%s\n" "$lt_cv_ar_at_file" >&6; } @@ -7221,8 +7482,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_STRIP+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$STRIP"; then +else case e in #( + e) if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -7244,7 +7505,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then @@ -7266,8 +7528,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_STRIP+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_STRIP"; then +else case e in #( + e) if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -7289,7 +7551,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then @@ -7330,8 +7593,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_RANLIB+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$RANLIB"; then +else case e in #( + e) if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -7353,7 +7616,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then @@ -7375,8 +7639,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_RANLIB+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_RANLIB"; then +else case e in #( + e) if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -7398,7 +7662,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then @@ -7509,8 +7774,8 @@ printf %s "checking command to parse $NM output from $compiler object... " >&6; if test ${lt_cv_sys_global_symbol_pipe+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] @@ -7564,7 +7829,7 @@ esac if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Gets list of data symbols to import. - lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" + lt_cv_sys_global_symbol_to_import="$SED -n -e 's/^I .* \(.*\)$/\1/p'" # Adjust the below global symbol transforms to fixup imported variables. lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" @@ -7582,20 +7847,20 @@ fi # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n"\ +lt_cv_sys_global_symbol_to_cdecl="$SED -n"\ $lt_cdecl_hook\ " -e 's/^T .* \(.*\)$/extern int \1();/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ +lt_cv_sys_global_symbol_to_c_name_address="$SED -n"\ $lt_c_name_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" # Transform an extracted symbol line into symbol name with lib prefix and # symbol address. -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="$SED -n"\ $lt_c_name_lib_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ @@ -7619,7 +7884,7 @@ for ac_symprfx in "" "_"; do if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function, # D for any global variable and I for any imported variable. - # Also find C++ and __fastcall symbols from MSVC++, + # Also find C++ and __fastcall symbols from MSVC++ or ICC, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ @@ -7637,9 +7902,9 @@ for ac_symprfx in "" "_"; do " s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + lt_cv_sys_global_symbol_pipe="$SED -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi - lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | $SED '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no @@ -7765,7 +8030,8 @@ _LT_EOF lt_cv_sys_global_symbol_pipe= fi done - + ;; +esac fi if test -z "$lt_cv_sys_global_symbol_pipe"; then @@ -7829,8 +8095,9 @@ printf %s "checking for sysroot... " >&6; } if test ${with_sysroot+y} then : withval=$with_sysroot; -else $as_nop - with_sysroot=no +else case e in #( + e) with_sysroot=no ;; +esac fi @@ -7842,7 +8109,7 @@ case $with_sysroot in #( fi ;; #( /*) - lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + lt_sysroot=`echo "$with_sysroot" | $SED -e "$sed_quote_subst"` ;; #( no|'') ;; #( @@ -7865,8 +8132,8 @@ printf %s "checking for a working dd... " >&6; } if test ${ac_cv_path_lt_DD+y} then : printf %s "(cached) " >&6 -else $as_nop - printf 0123456789abcdef0123456789abcdef >conftest.i +else case e in #( + e) printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} if test -z "$lt_DD"; then @@ -7902,7 +8169,8 @@ else ac_cv_path_lt_DD=$lt_DD fi -rm -f conftest.i conftest2.i conftest.out +rm -f conftest.i conftest2.i conftest.out ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 printf "%s\n" "$ac_cv_path_lt_DD" >&6; } @@ -7913,8 +8181,8 @@ printf %s "checking how to truncate binary pipes... " >&6; } if test ${lt_cv_truncate_bin+y} then : printf %s "(cached) " >&6 -else $as_nop - printf 0123456789abcdef0123456789abcdef >conftest.i +else case e in #( + e) printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= if "$ac_cv_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then @@ -7922,7 +8190,8 @@ if "$ac_cv_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; the && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" fi rm -f conftest.i conftest2.i conftest.out -test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" +test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 printf "%s\n" "$lt_cv_truncate_bin" >&6; } @@ -7967,7 +8236,7 @@ ia64-*-hpux*) ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - case `/usr/bin/file conftest.$ac_objext` in + case `$FILECMD conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE=32 ;; @@ -7988,7 +8257,7 @@ ia64-*-hpux*) printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test yes = "$lt_cv_prog_gnu_ld"; then - case `/usr/bin/file conftest.$ac_objext` in + case `$FILECMD conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; @@ -8000,7 +8269,7 @@ ia64-*-hpux*) ;; esac else - case `/usr/bin/file conftest.$ac_objext` in + case `$FILECMD conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; @@ -8026,7 +8295,7 @@ mips64*-*linux*) printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then emul=elf - case `/usr/bin/file conftest.$ac_objext` in + case `$FILECMD conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; @@ -8034,7 +8303,7 @@ mips64*-*linux*) emul="${emul}64" ;; esac - case `/usr/bin/file conftest.$ac_objext` in + case `$FILECMD conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; @@ -8042,7 +8311,7 @@ mips64*-*linux*) emul="${emul}ltsmip" ;; esac - case `/usr/bin/file conftest.$ac_objext` in + case `$FILECMD conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; @@ -8066,14 +8335,14 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in + case `$FILECMD conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) - case `/usr/bin/file conftest.o` in + case `$FILECMD conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; @@ -8132,8 +8401,8 @@ printf %s "checking whether the C compiler needs -belf... " >&6; } if test ${lt_cv_cc_needs_belf+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_ext=c +else case e in #( + e) ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' @@ -8153,8 +8422,9 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_cv_cc_needs_belf=yes -else $as_nop - lt_cv_cc_needs_belf=no +else case e in #( + e) lt_cv_cc_needs_belf=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext @@ -8163,7 +8433,8 @@ ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 printf "%s\n" "$lt_cv_cc_needs_belf" >&6; } @@ -8181,7 +8452,7 @@ printf "%s\n" "$lt_cv_cc_needs_belf" >&6; } ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in + case `$FILECMD conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) @@ -8221,8 +8492,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_MANIFEST_TOOL+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$MANIFEST_TOOL"; then +else case e in #( + e) if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -8244,7 +8515,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then @@ -8266,8 +8538,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_MANIFEST_TOOL+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_MANIFEST_TOOL"; then +else case e in #( + e) if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -8289,7 +8561,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then @@ -8321,15 +8594,16 @@ printf %s "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if test ${lt_cv_path_mainfest_tool+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_path_mainfest_tool=no +else case e in #( + e) lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi - rm -f conftest* + rm -f conftest* ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 printf "%s\n" "$lt_cv_path_mainfest_tool" >&6; } @@ -8352,8 +8626,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_DSYMUTIL+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$DSYMUTIL"; then +else case e in #( + e) if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -8375,7 +8649,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then @@ -8397,8 +8672,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_DSYMUTIL+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_DSYMUTIL"; then +else case e in #( + e) if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -8420,7 +8695,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then @@ -8454,8 +8730,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_NMEDIT+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$NMEDIT"; then +else case e in #( + e) if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -8477,7 +8753,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then @@ -8499,8 +8776,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_NMEDIT+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_NMEDIT"; then +else case e in #( + e) if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -8522,7 +8799,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then @@ -8556,8 +8834,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_LIPO+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$LIPO"; then +else case e in #( + e) if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -8579,7 +8857,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then @@ -8601,8 +8880,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_LIPO+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_LIPO"; then +else case e in #( + e) if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -8624,7 +8903,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then @@ -8658,8 +8938,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_OTOOL+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$OTOOL"; then +else case e in #( + e) if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -8681,7 +8961,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then @@ -8703,8 +8984,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_OTOOL+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_OTOOL"; then +else case e in #( + e) if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -8726,7 +9007,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then @@ -8760,8 +9042,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_OTOOL64+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$OTOOL64"; then +else case e in #( + e) if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -8783,7 +9065,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then @@ -8805,8 +9088,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_OTOOL64+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_OTOOL64"; then +else case e in #( + e) if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -8828,7 +9111,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then @@ -8885,8 +9169,8 @@ printf %s "checking for -single_module linker flag... " >&6; } if test ${lt_cv_apple_cc_single_mod+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_apple_cc_single_mod=no +else case e in #( + e) lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE @@ -8912,7 +9196,8 @@ else $as_nop fi rm -rf libconftest.dylib* rm -f conftest.* - fi + fi ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 printf "%s\n" "$lt_cv_apple_cc_single_mod" >&6; } @@ -8922,8 +9207,8 @@ printf %s "checking for -exported_symbols_list linker flag... " >&6; } if test ${lt_cv_ld_exported_symbols_list+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_ld_exported_symbols_list=no +else case e in #( + e) lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" @@ -8941,13 +9226,15 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_cv_ld_exported_symbols_list=yes -else $as_nop - lt_cv_ld_exported_symbols_list=no +else case e in #( + e) lt_cv_ld_exported_symbols_list=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 printf "%s\n" "$lt_cv_ld_exported_symbols_list" >&6; } @@ -8957,15 +9244,15 @@ printf %s "checking for -force_load linker flag... " >&6; } if test ${lt_cv_ld_force_load+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_ld_force_load=no +else case e in #( + e) lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 - echo "$AR cru libconftest.a conftest.o" >&5 - $AR cru libconftest.a conftest.o 2>&5 + echo "$AR $AR_FLAGS libconftest.a conftest.o" >&5 + $AR $AR_FLAGS libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF @@ -8983,7 +9270,8 @@ _LT_EOF fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 printf "%s\n" "$lt_cv_ld_force_load" >&6; } @@ -8992,17 +9280,12 @@ printf "%s\n" "$lt_cv_ld_force_load" >&6; } _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; - darwin*) # darwin 5.x on - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[91]*) - _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; - 10.[012][,.]*) - _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; - 10.*) - _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + darwin*) + case $MACOSX_DEPLOYMENT_TARGET,$host in + 10.[012],*|,*powerpc*-darwin[5-8]*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + *) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac @@ -9090,8 +9373,9 @@ then : IFS=$lt_save_ifs ;; esac -else $as_nop - enable_static=no +else case e in #( + e) enable_static=no ;; +esac fi @@ -9120,8 +9404,9 @@ then : IFS=$lt_save_ifs ;; esac -else $as_nop - pic_mode=yes +else case e in #( + e) pic_mode=yes ;; +esac fi @@ -9158,8 +9443,9 @@ then : IFS=$lt_save_ifs ;; esac -else $as_nop - enable_shared=yes +else case e in #( + e) enable_shared=yes ;; +esac fi @@ -9192,8 +9478,9 @@ then : IFS=$lt_save_ifs ;; esac -else $as_nop - enable_fast_install=yes +else case e in #( + e) enable_fast_install=yes ;; +esac fi @@ -9220,15 +9507,17 @@ then : ;; esac lt_cv_with_aix_soname=$with_aix_soname -else $as_nop - if test ${lt_cv_with_aix_soname+y} +else case e in #( + e) if test ${lt_cv_with_aix_soname+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_with_aix_soname=aix +else case e in #( + e) lt_cv_with_aix_soname=aix ;; +esac fi - with_aix_soname=$lt_cv_with_aix_soname + with_aix_soname=$lt_cv_with_aix_soname ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 @@ -9319,8 +9608,8 @@ printf %s "checking for objdir... " >&6; } if test ${lt_cv_objdir+y} then : printf %s "(cached) " >&6 -else $as_nop - rm -f .libs 2>/dev/null +else case e in #( + e) rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs @@ -9328,7 +9617,8 @@ else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi -rmdir .libs 2>/dev/null +rmdir .libs 2>/dev/null ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 printf "%s\n" "$lt_cv_objdir" >&6; } @@ -9359,8 +9649,8 @@ esac ofile=libtool can_build_shared=yes -# All known linkers require a '.a' archive for static linking (except MSVC, -# which needs '.lib'). +# All known linkers require a '.a' archive for static linking (except MSVC and +# ICC, which need '.lib'). libext=a with_gnu_ld=$lt_cv_prog_gnu_ld @@ -9389,8 +9679,8 @@ printf %s "checking for ${ac_tool_prefix}file... " >&6; } if test ${lt_cv_path_MAGIC_CMD+y} then : printf %s "(cached) " >&6 -else $as_nop - case $MAGIC_CMD in +else case e in #( + e) case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; @@ -9433,6 +9723,7 @@ _LT_EOF IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; +esac ;; esac fi @@ -9456,8 +9747,8 @@ printf %s "checking for file... " >&6; } if test ${lt_cv_path_MAGIC_CMD+y} then : printf %s "(cached) " >&6 -else $as_nop - case $MAGIC_CMD in +else case e in #( + e) case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; @@ -9500,6 +9791,7 @@ _LT_EOF IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; +esac ;; esac fi @@ -9599,8 +9891,8 @@ printf %s "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if test ${lt_cv_prog_compiler_rtti_exceptions+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_prog_compiler_rtti_exceptions=no +else case e in #( + e) lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment @@ -9628,7 +9920,8 @@ else $as_nop fi fi $RM conftest* - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 printf "%s\n" "$lt_cv_prog_compiler_rtti_exceptions" >&6; } @@ -9872,7 +10165,7 @@ lt_prog_compiler_static= lt_prog_compiler_static='-qstaticlink' ;; *) - case `$CC -V 2>&1 | sed 5q` in + case `$CC -V 2>&1 | $SED 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' @@ -9993,8 +10286,9 @@ printf %s "checking for $compiler option to produce PIC... " >&6; } if test ${lt_cv_prog_compiler_pic+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_prog_compiler_pic=$lt_prog_compiler_pic +else case e in #( + e) lt_cv_prog_compiler_pic=$lt_prog_compiler_pic ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 printf "%s\n" "$lt_cv_prog_compiler_pic" >&6; } @@ -10009,8 +10303,8 @@ printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; if test ${lt_cv_prog_compiler_pic_works+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_prog_compiler_pic_works=no +else case e in #( + e) lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment @@ -10038,7 +10332,8 @@ else $as_nop fi fi $RM conftest* - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 printf "%s\n" "$lt_cv_prog_compiler_pic_works" >&6; } @@ -10074,8 +10369,8 @@ printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; if test ${lt_cv_prog_compiler_static_works+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_prog_compiler_static_works=no +else case e in #( + e) lt_cv_prog_compiler_static_works=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext @@ -10096,7 +10391,8 @@ else $as_nop fi $RM -r conftest* LDFLAGS=$save_LDFLAGS - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 printf "%s\n" "$lt_cv_prog_compiler_static_works" >&6; } @@ -10118,8 +10414,8 @@ printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test ${lt_cv_prog_compiler_c_o+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_prog_compiler_c_o=no +else case e in #( + e) lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest @@ -10159,7 +10455,8 @@ else $as_nop cd .. $RM -r conftest $RM conftest* - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } @@ -10174,8 +10471,8 @@ printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test ${lt_cv_prog_compiler_c_o+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_prog_compiler_c_o=no +else case e in #( + e) lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest @@ -10215,7 +10512,8 @@ else $as_nop cd .. $RM -r conftest $RM conftest* - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } @@ -10295,15 +10593,15 @@ printf %s "checking whether the $compiler linker ($LD) supports shared libraries case $host_os in cygwin* | mingw* | pw32* | cegcc*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time + # FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. + # Microsoft Visual C++ or Intel C++ Compiler. if test yes != "$GCC"; then with_gnu_ld=no fi ;; interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) + # we just hope/assume this is gcc and not c89 (= MSVC++ or ICC) with_gnu_ld=yes ;; openbsd* | bitrig*) @@ -10355,7 +10653,7 @@ printf %s "checking whether the $compiler linker ($LD) supports shared libraries whole_archive_flag_spec= fi supports_anon_versioning=no - case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in + case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... @@ -10467,6 +10765,7 @@ _LT_EOF emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes + file_list_spec='@' ;; interix[3-9]*) @@ -10481,7 +10780,7 @@ _LT_EOF # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) @@ -10524,7 +10823,7 @@ _LT_EOF compiler_needs_object=yes ;; esac - case `$CC -V 2>&1 | sed 5q` in + case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object=yes @@ -10536,7 +10835,7 @@ _LT_EOF if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi @@ -10552,7 +10851,7 @@ _LT_EOF archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi @@ -10684,7 +10983,7 @@ _LT_EOF if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else - export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no @@ -10809,8 +11108,8 @@ else if test ${lt_cv_aix_libpath_+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -10842,7 +11141,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam \ if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib fi - + ;; +esac fi aix_libpath=$lt_cv_aix_libpath_ @@ -10864,8 +11164,8 @@ else if test ${lt_cv_aix_libpath_+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -10897,7 +11197,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam \ if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib fi - + ;; +esac fi aix_libpath=$lt_cv_aix_libpath_ @@ -10955,12 +11256,12 @@ fi cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. + # Microsoft Visual C++ or Intel C++ Compiler. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in - cl*) - # Native MSVC + cl* | icl*) + # Native MSVC or ICC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes @@ -11001,7 +11302,7 @@ fi fi' ;; *) - # Assume MSVC wrapper + # Assume MSVC and ICC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. @@ -11042,8 +11343,8 @@ fi output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" - archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" - module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" + archive_expsym_cmds="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" + module_expsym_cmds="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" else ld_shlibs=no @@ -11077,7 +11378,7 @@ fi ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) + freebsd* | dragonfly* | midnightbsd*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes @@ -11148,8 +11449,8 @@ printf %s "checking if $CC understands -b... " >&6; } if test ${lt_cv_prog_compiler__b+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_prog_compiler__b=no +else case e in #( + e) lt_cv_prog_compiler__b=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext @@ -11170,7 +11471,8 @@ else $as_nop fi $RM -r conftest* LDFLAGS=$save_LDFLAGS - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 printf "%s\n" "$lt_cv_prog_compiler__b" >&6; } @@ -11218,8 +11520,8 @@ printf %s "checking whether the $host_os linker accepts -exported_symbol... " >& if test ${lt_cv_irix_exported_symbol+y} then : printf %s "(cached) " >&6 -else $as_nop - save_LDFLAGS=$LDFLAGS +else case e in #( + e) save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -11228,12 +11530,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_cv_irix_exported_symbol=yes -else $as_nop - lt_cv_irix_exported_symbol=no +else case e in #( + e) lt_cv_irix_exported_symbol=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS + LDFLAGS=$save_LDFLAGS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; } @@ -11328,6 +11632,7 @@ printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; } emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes + file_list_spec='@' ;; osf3*) @@ -11558,8 +11863,8 @@ printf %s "checking whether -lc should be explicitly linked in... " >&6; } if test ${lt_cv_archive_cmds_need_lc+y} then : printf %s "(cached) " >&6 -else $as_nop - $RM conftest* +else case e in #( + e) $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 @@ -11595,7 +11900,8 @@ else $as_nop cat conftest.err 1>&5 fi $RM conftest* - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 printf "%s\n" "$lt_cv_archive_cmds_need_lc" >&6; } @@ -12020,7 +12326,7 @@ cygwin* | mingw* | pw32* | cegcc*) case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; @@ -12030,14 +12336,14 @@ cygwin* | mingw* | pw32* | cegcc*) ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; - *,cl*) - # Native MSVC + *,cl* | *,icl*) + # Native MSVC or ICC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' @@ -12056,7 +12362,7 @@ cygwin* | mingw* | pw32* | cegcc*) done IFS=$lt_save_ifs # Convert to MSYS style. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form @@ -12093,7 +12399,7 @@ cygwin* | mingw* | pw32* | cegcc*) ;; *) - # Assume MSVC wrapper + # Assume MSVC and ICC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; @@ -12126,7 +12432,7 @@ dgux*) shlibpath_var=LD_LIBRARY_PATH ;; -freebsd* | dragonfly*) +freebsd* | dragonfly* | midnightbsd*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then @@ -12322,8 +12628,8 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) if test ${lt_cv_shlibpath_overrides_runpath+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_shlibpath_overrides_runpath=no +else case e in #( + e) lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ @@ -12350,7 +12656,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir - + ;; +esac fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath @@ -12775,16 +13082,22 @@ printf %s "checking for dlopen in -ldl... " >&6; } if test ${ac_cv_lib_dl_dlopen+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char dlopen (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (void); int main (void) { @@ -12796,24 +13109,27 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dl_dlopen=yes -else $as_nop - ac_cv_lib_dl_dlopen=no +else case e in #( + e) ac_cv_lib_dl_dlopen=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl -else $as_nop - +else case e in #( + e) lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes - + ;; +esac fi ;; @@ -12831,22 +13147,28 @@ fi if test "x$ac_cv_func_shl_load" = xyes then : lt_cv_dlopen=shl_load -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 printf %s "checking for shl_load in -ldld... " >&6; } if test ${ac_cv_lib_dld_shl_load+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char shl_load (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (void); int main (void) { @@ -12858,39 +13180,47 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dld_shl_load=yes -else $as_nop - ac_cv_lib_dld_shl_load=no +else case e in #( + e) ac_cv_lib_dld_shl_load=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 printf "%s\n" "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes then : lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld -else $as_nop - ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +else case e in #( + e) ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes then : lt_cv_dlopen=dlopen -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 printf %s "checking for dlopen in -ldl... " >&6; } if test ${ac_cv_lib_dl_dlopen+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char dlopen (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (void); int main (void) { @@ -12902,34 +13232,42 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dl_dlopen=yes -else $as_nop - ac_cv_lib_dl_dlopen=no +else case e in #( + e) ac_cv_lib_dl_dlopen=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 printf %s "checking for dlopen in -lsvld... " >&6; } if test ${ac_cv_lib_svld_dlopen+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char dlopen (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (void); int main (void) { @@ -12941,34 +13279,42 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_svld_dlopen=yes -else $as_nop - ac_cv_lib_svld_dlopen=no +else case e in #( + e) ac_cv_lib_svld_dlopen=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 printf "%s\n" "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 printf %s "checking for dld_link in -ldld... " >&6; } if test ${ac_cv_lib_dld_dld_link+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char dld_link (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (void); int main (void) { @@ -12980,12 +13326,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dld_dld_link=yes -else $as_nop - ac_cv_lib_dld_dld_link=no +else case e in #( + e) ac_cv_lib_dld_dld_link=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 printf "%s\n" "$ac_cv_lib_dld_dld_link" >&6; } @@ -12994,19 +13342,24 @@ then : lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld fi - + ;; +esac fi - + ;; +esac fi - + ;; +esac fi - + ;; +esac fi - + ;; +esac fi ;; @@ -13034,8 +13387,8 @@ printf %s "checking whether a program can dlopen itself... " >&6; } if test ${lt_cv_dlopen_self+y} then : printf %s "(cached) " >&6 -else $as_nop - if test yes = "$cross_compiling"; then : +else case e in #( + e) if test yes = "$cross_compiling"; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 @@ -13129,7 +13482,8 @@ _LT_EOF fi rm -fr conftest* - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 printf "%s\n" "$lt_cv_dlopen_self" >&6; } @@ -13141,8 +13495,8 @@ printf %s "checking whether a statically linked program can dlopen itself... " > if test ${lt_cv_dlopen_self_static+y} then : printf %s "(cached) " >&6 -else $as_nop - if test yes = "$cross_compiling"; then : +else case e in #( + e) if test yes = "$cross_compiling"; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 @@ -13236,7 +13590,8 @@ _LT_EOF fi rm -fr conftest* - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 printf "%s\n" "$lt_cv_dlopen_self_static" >&6; } @@ -13279,30 +13634,41 @@ striplib= old_striplib= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 printf %s "checking whether stripping libraries is possible... " >&6; } -if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } +if test -z "$STRIP"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP"; then + if $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + old_striplib="$STRIP --strip-debug" + striplib="$STRIP --strip-unneeded" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + else + case $host_os in + darwin*) + # FIXME - insert some real tests, host_os isn't really good enough striplib="$STRIP -x" old_striplib="$STRIP -S" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } - else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 + ;; + freebsd*) + if $STRIP -V 2>&1 | $GREP "elftoolchain" >/dev/null; then + old_striplib="$STRIP --strip-debug" + striplib="$STRIP --strip-unneeded" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } - fi - ;; - *) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 + fi + ;; + *) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } - ;; - esac + ;; + esac + fi fi @@ -13401,8 +13767,8 @@ printf %s "checking whether the -Werror option is usable... " >&6; } if test ${gl_cv_cc_vis_werror+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -13419,11 +13785,13 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_cc_vis_werror=yes -else $as_nop - gl_cv_cc_vis_werror=no +else case e in #( + e) gl_cv_cc_vis_werror=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - CFLAGS="$gl_save_CFLAGS" + CFLAGS="$gl_save_CFLAGS" ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_vis_werror" >&5 @@ -13433,8 +13801,8 @@ printf %s "checking for simple visibility declarations... " >&6; } if test ${gl_cv_cc_visibility+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fvisibility=hidden" if test $gl_cv_cc_vis_werror = yes; then @@ -13459,11 +13827,13 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_cc_visibility=yes -else $as_nop - gl_cv_cc_visibility=no +else case e in #( + e) gl_cv_cc_visibility=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - CFLAGS="$gl_save_CFLAGS" + CFLAGS="$gl_save_CFLAGS" ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_visibility" >&5 @@ -13504,8 +13874,8 @@ printf %s "checking for sys/wait.h that is POSIX.1 compatible... " >&6; } if test ${ac_cv_header_sys_wait_h+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <sys/wait.h> @@ -13529,10 +13899,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_header_sys_wait_h=yes -else $as_nop - ac_cv_header_sys_wait_h=no +else case e in #( + e) ac_cv_header_sys_wait_h=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5 printf "%s\n" "$ac_cv_header_sys_wait_h" >&6; } @@ -13717,6 +14089,15 @@ then : fi fi +if test "$enable_lrziplib" != "no"; then + ac_fn_c_check_header_compile "$LINENO" "Lrzip.h" "ac_cv_header_Lrzip_h" "$ac_includes_default" +if test "x$ac_cv_header_Lrzip_h" = xyes +then : + printf "%s\n" "#define HAVE_LRZIP_H 1" >>confdefs.h + +fi + +fi ac_fn_c_check_type "$LINENO" "sig_t" "ac_cv_type_sig_t" "#include <signal.h> " if test "x$ac_cv_type_sig_t" = xyes @@ -13731,20 +14112,22 @@ ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" if test "x$ac_cv_type_off_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define off_t long int" >>confdefs.h - + ;; +esac fi ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define size_t unsigned int" >>confdefs.h - + ;; +esac fi ac_fn_c_check_member "$LINENO" "struct stat" "st_rdev" "ac_cv_member_struct_stat_st_rdev" "$ac_includes_default" @@ -13772,8 +14155,8 @@ printf %s "checking whether struct tm is in sys/time.h or time.h... " >&6; } if test ${ac_cv_struct_tm+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <time.h> @@ -13791,10 +14174,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_struct_tm=time.h -else $as_nop - ac_cv_struct_tm=sys/time.h +else case e in #( + e) ac_cv_struct_tm=sys/time.h ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5 printf "%s\n" "$ac_cv_struct_tm" >&6; } @@ -13809,8 +14194,8 @@ printf %s "checking for $CC options needed to detect all undeclared functions... if test ${ac_cv_c_undeclared_builtin_options+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_save_CFLAGS=$CFLAGS +else case e in #( + e) ac_save_CFLAGS=$CFLAGS ac_cv_c_undeclared_builtin_options='cannot detect' for ac_arg in '' -fno-builtin; do CFLAGS="$ac_save_CFLAGS $ac_arg" @@ -13829,8 +14214,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : -else $as_nop - # This test program should compile successfully. +else case e in #( + e) # This test program should compile successfully. # No library function is consistently available on # freestanding implementations, so test against a dummy # declaration. Include always-available headers on the @@ -13858,26 +14243,29 @@ then : if test x"$ac_arg" = x then : ac_cv_c_undeclared_builtin_options='none needed' -else $as_nop - ac_cv_c_undeclared_builtin_options=$ac_arg +else case e in #( + e) ac_cv_c_undeclared_builtin_options=$ac_arg ;; +esac fi break fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done CFLAGS=$ac_save_CFLAGS - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_undeclared_builtin_options" >&5 printf "%s\n" "$ac_cv_c_undeclared_builtin_options" >&6; } case $ac_cv_c_undeclared_builtin_options in #( 'cannot detect') : - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot make $CC report undeclared builtins -See \`config.log' for more details" "$LINENO" 5; } ;; #( +See 'config.log' for more details" "$LINENO" 5; } ;; #( 'none needed') : ac_c_undeclared_builtin_options='' ;; #( *) : @@ -13906,8 +14294,9 @@ else if test "x$ac_cv_have_decl_tzname" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL_TZNAME $ac_have_decl" >>confdefs.h @@ -13916,8 +14305,8 @@ printf %s "checking for tzname... " >&6; } if test ${ac_cv_var_tzname+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <time.h> #if !HAVE_DECL_TZNAME @@ -13935,11 +14324,13 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_var_tzname=yes -else $as_nop - ac_cv_var_tzname=no +else case e in #( + e) ac_cv_var_tzname=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext + conftest$ac_exeext conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_tzname" >&5 printf "%s\n" "$ac_cv_var_tzname" >&6; } @@ -13955,8 +14346,8 @@ printf %s "checking for tm_zone in struct tm... " >&6; } if test ${ac_cv_struct_tm_zone+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <$ac_cv_struct_tm> @@ -13971,10 +14362,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_struct_tm_zone=yes -else $as_nop - ac_cv_struct_tm_zone=no +else case e in #( + e) ac_cv_struct_tm_zone=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm_zone" >&5 printf "%s\n" "$ac_cv_struct_tm_zone" >&6; } @@ -13991,8 +14384,9 @@ ac_fn_check_decl "$LINENO" "tzname" "ac_cv_have_decl_tzname" "#include <time.h> if test "x$ac_cv_have_decl_tzname" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL_TZNAME $ac_have_decl" >>confdefs.h @@ -14001,8 +14395,8 @@ printf %s "checking for tzname... " >&6; } if test ${ac_cv_var_tzname+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <time.h> int @@ -14019,11 +14413,13 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_var_tzname=yes -else $as_nop - ac_cv_var_tzname=no +else case e in #( + e) ac_cv_var_tzname=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext + conftest$ac_exeext conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_tzname" >&5 printf "%s\n" "$ac_cv_var_tzname" >&6; } @@ -14038,8 +14434,8 @@ printf %s "checking for tm_isdst in struct tm... " >&6; } if test ${ac_cv_struct_tm_isdst+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <$ac_cv_struct_tm> @@ -14054,10 +14450,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_struct_tm_isdst=yes -else $as_nop - ac_cv_struct_tm_isdst=no +else case e in #( + e) ac_cv_struct_tm_isdst=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm_isdst" >&5 printf "%s\n" "$ac_cv_struct_tm_isdst" >&6; } @@ -14074,8 +14472,9 @@ ac_fn_check_decl "$LINENO" "daylight" "ac_cv_have_decl_daylight" "#include <time if test "x$ac_cv_have_decl_daylight" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL_DAYLIGHT $ac_have_decl" >>confdefs.h @@ -14084,8 +14483,8 @@ printf %s "checking for daylight... " >&6; } if test ${ac_cv_var_daylight+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <time.h> #include <stdlib.h> @@ -14103,11 +14502,13 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_var_daylight=yes -else $as_nop - ac_cv_var_daylight=no +else case e in #( + e) ac_cv_var_daylight=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext + conftest$ac_exeext conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_daylight" >&5 printf "%s\n" "$ac_cv_var_daylight" >&6; } @@ -14122,31 +14523,34 @@ if test ${enable_largefile+y} then : enableval=$enable_largefile; fi - -if test "$enable_largefile" != no; then - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 -printf %s "checking for special C compiler options needed for large files... " >&6; } -if test ${ac_cv_sys_largefile_CC+y} +if test "$enable_largefile,$enable_year2038" != no,no +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable large file support" >&5 +printf %s "checking for $CC option to enable large file support... " >&6; } +if test ${ac_cv_sys_largefile_opts+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_sys_largefile_CC=no - if test "$GCC" != yes; then - ac_save_CC=$CC - while :; do - # IRIX 6.2 and later do not support large files by default, - # so use the C compiler's -n32 option if that helps. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) ac_save_CC="$CC" + ac_opt_found=no + for ac_opt in "none needed" "-D_FILE_OFFSET_BITS=64" "-D_LARGE_FILES=1" "-n32"; do + if test x"$ac_opt" != x"none needed" +then : + CC="$ac_save_CC $ac_opt" +fi + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, +#ifndef FTYPE +# define FTYPE off_t +#endif + /* Check that FTYPE can represent 2**63 - 1 correctly. + We can't simply define LARGE_FTYPE to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) +#define LARGE_FTYPE (((FTYPE) 1 << 31 << 31) - 1 + ((FTYPE) 1 << 31 << 31)) + int FTYPE_is_large[(LARGE_FTYPE % 2147483629 == 721 + && LARGE_FTYPE % 2147483647 == 1) ? 1 : -1]; int main (void) @@ -14156,142 +14560,88 @@ main (void) return 0; } _ACEOF - if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_compile "$LINENO" then : - break -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - CC="$CC -n32" + if test x"$ac_opt" = x"none needed" +then : + # GNU/Linux s390x and alpha need _FILE_OFFSET_BITS=64 for wide ino_t. + CC="$CC -DFTYPE=ino_t" if ac_fn_c_try_compile "$LINENO" then : - ac_cv_sys_largefile_CC=' -n32'; break + +else case e in #( + e) CC="$CC -D_FILE_OFFSET_BITS=64" + if ac_fn_c_try_compile "$LINENO" +then : + ac_opt='-D_FILE_OFFSET_BITS=64' +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam - break - done - CC=$ac_save_CC - rm -f conftest.$ac_ext - fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 -printf "%s\n" "$ac_cv_sys_largefile_CC" >&6; } - if test "$ac_cv_sys_largefile_CC" != no; then - CC=$CC$ac_cv_sys_largefile_CC - fi - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 -printf %s "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } -if test ${ac_cv_sys_file_offset_bits+y} -then : - printf %s "(cached) " >&6 -else $as_nop - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <sys/types.h> - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main (void) -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_sys_file_offset_bits=no; break + ac_cv_sys_largefile_opts=$ac_opt + ac_opt_found=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#define _FILE_OFFSET_BITS 64 -#include <sys/types.h> - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main (void) -{ + test $ac_opt_found = no || break + done + CC="$ac_save_CC" - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_sys_file_offset_bits=64; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ac_cv_sys_file_offset_bits=unknown - break -done + test $ac_opt_found = yes || ac_cv_sys_largefile_opts="support not detected" ;; +esac fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 -printf "%s\n" "$ac_cv_sys_file_offset_bits" >&6; } -case $ac_cv_sys_file_offset_bits in #( - no | unknown) ;; - *) -printf "%s\n" "#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits" >>confdefs.h -;; +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_opts" >&5 +printf "%s\n" "$ac_cv_sys_largefile_opts" >&6; } + +ac_have_largefile=yes +case $ac_cv_sys_largefile_opts in #( + "none needed") : + ;; #( + "supported through gnulib") : + ;; #( + "support not detected") : + ac_have_largefile=no ;; #( + "-D_FILE_OFFSET_BITS=64") : + +printf "%s\n" "#define _FILE_OFFSET_BITS 64" >>confdefs.h + ;; #( + "-D_LARGE_FILES=1") : + +printf "%s\n" "#define _LARGE_FILES 1" >>confdefs.h + ;; #( + "-n32") : + CC="$CC -n32" ;; #( + *) : + as_fn_error $? "internal error: bad value for \$ac_cv_sys_largefile_opts" "$LINENO" 5 ;; esac -rm -rf conftest* - if test $ac_cv_sys_file_offset_bits = unknown; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 -printf %s "checking for _LARGE_FILES value needed for large files... " >&6; } -if test ${ac_cv_sys_large_files+y} + +if test "$enable_year2038" != no +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option for timestamps after 2038" >&5 +printf %s "checking for $CC option for timestamps after 2038... " >&6; } +if test ${ac_cv_sys_year2038_opts+y} then : printf %s "(cached) " >&6 -else $as_nop - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <sys/types.h> - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main (void) -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" +else case e in #( + e) ac_save_CPPFLAGS="$CPPFLAGS" + ac_opt_found=no + for ac_opt in "none needed" "-D_TIME_BITS=64" "-D__MINGW_USE_VC2005_COMPAT" "-U_USE_32_BIT_TIME_T -D__MINGW_USE_VC2005_COMPAT"; do + if test x"$ac_opt" != x"none needed" then : - ac_cv_sys_large_files=no; break + CPPFLAGS="$ac_save_CPPFLAGS $ac_opt" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#define _LARGE_FILES 1 -#include <sys/types.h> - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; + + #include <time.h> + /* Check that time_t can represent 2**32 - 1 correctly. */ + #define LARGE_TIME_T \\ + ((time_t) (((time_t) 1 << 30) - 1 + 3 * ((time_t) 1 << 30))) + int verify_time_t_range[(LARGE_TIME_T / 65537 == 65535 + && LARGE_TIME_T % 65537 == 0) + ? 1 : -1]; + int main (void) { @@ -14302,101 +14652,148 @@ main (void) _ACEOF if ac_fn_c_try_compile "$LINENO" then : - ac_cv_sys_large_files=1; break + ac_cv_sys_year2038_opts="$ac_opt" + ac_opt_found=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ac_cv_sys_large_files=unknown - break -done + test $ac_opt_found = no || break + done + CPPFLAGS="$ac_save_CPPFLAGS" + test $ac_opt_found = yes || ac_cv_sys_year2038_opts="support not detected" ;; +esac fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 -printf "%s\n" "$ac_cv_sys_large_files" >&6; } -case $ac_cv_sys_large_files in #( - no | unknown) ;; - *) -printf "%s\n" "#define _LARGE_FILES $ac_cv_sys_large_files" >>confdefs.h -;; +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_year2038_opts" >&5 +printf "%s\n" "$ac_cv_sys_year2038_opts" >&6; } + +ac_have_year2038=yes +case $ac_cv_sys_year2038_opts in #( + "none needed") : + ;; #( + "support not detected") : + ac_have_year2038=no ;; #( + "-D_TIME_BITS=64") : + +printf "%s\n" "#define _TIME_BITS 64" >>confdefs.h + ;; #( + "-D__MINGW_USE_VC2005_COMPAT") : + +printf "%s\n" "#define __MINGW_USE_VC2005_COMPAT 1" >>confdefs.h + ;; #( + "-U_USE_32_BIT_TIME_T"*) : + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} +as_fn_error $? "the 'time_t' type is currently forced to be 32-bit. It +will stop working after mid-January 2038. Remove +_USE_32BIT_TIME_T from the compiler flags. +See 'config.log' for more details" "$LINENO" 5; } ;; #( + *) : + as_fn_error $? "internal error: bad value for \$ac_cv_sys_year2038_opts" "$LINENO" 5 ;; esac -rm -rf conftest* - fi + fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _LARGEFILE_SOURCE value needed for large files" >&5 -printf %s "checking for _LARGEFILE_SOURCE value needed for large files... " >&6; } -if test ${ac_cv_sys_largefile_source+y} +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for declarations of fseeko and ftello" >&5 +printf %s "checking for declarations of fseeko and ftello... " >&6; } +if test ${ac_cv_func_fseeko_ftello+y} then : printf %s "(cached) " >&6 -else $as_nop - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ + +#if defined __hpux && !defined _LARGEFILE_SOURCE +# include <limits.h> +# if LONG_MAX >> 31 == 0 +# error "32-bit HP-UX 11/ia64 needs _LARGEFILE_SOURCE for fseeko in C++" +# endif +#endif #include <sys/types.h> /* for off_t */ - #include <stdio.h> +#include <stdio.h> + int main (void) { -int (*fp) (FILE *, off_t, int) = fseeko; - return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); + + int (*fp1) (FILE *, off_t, int) = fseeko; + off_t (*fp2) (FILE *) = ftello; + return fseeko (stdin, 0, 0) + && fp1 (stdin, 0, 0) + && ftello (stdin) >= 0 + && fp2 (stdin) >= 0; + ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" +if ac_fn_c_try_compile "$LINENO" then : - ac_cv_sys_largefile_source=no; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + ac_cv_func_fseeko_ftello=yes +else case e in #( + e) ac_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE=1" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#define _LARGEFILE_SOURCE 1 + +#if defined __hpux && !defined _LARGEFILE_SOURCE +# include <limits.h> +# if LONG_MAX >> 31 == 0 +# error "32-bit HP-UX 11/ia64 needs _LARGEFILE_SOURCE for fseeko in C++" +# endif +#endif #include <sys/types.h> /* for off_t */ - #include <stdio.h> +#include <stdio.h> + int main (void) { -int (*fp) (FILE *, off_t, int) = fseeko; - return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); + + int (*fp1) (FILE *, off_t, int) = fseeko; + off_t (*fp2) (FILE *) = ftello; + return fseeko (stdin, 0, 0) + && fp1 (stdin, 0, 0) + && ftello (stdin) >= 0 + && fp2 (stdin) >= 0; + ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" +if ac_fn_c_try_compile "$LINENO" then : - ac_cv_sys_largefile_source=1; break + ac_cv_func_fseeko_ftello="need _LARGEFILE_SOURCE" +else case e in #( + e) ac_cv_func_fseeko_ftello=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext - ac_cv_sys_largefile_source=unknown - break -done +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_source" >&5 -printf "%s\n" "$ac_cv_sys_largefile_source" >&6; } -case $ac_cv_sys_largefile_source in #( - no | unknown) ;; - *) -printf "%s\n" "#define _LARGEFILE_SOURCE $ac_cv_sys_largefile_source" >>confdefs.h -;; +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac -rm -rf conftest* - -# We used to try defining _XOPEN_SOURCE=500 too, to work around a bug -# in glibc 2.1.3, but that breaks too many other things. -# If you want fseeko and ftello with glibc, upgrade to a fixed glibc. -if test $ac_cv_sys_largefile_source != unknown; then +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fseeko_ftello" >&5 +printf "%s\n" "$ac_cv_func_fseeko_ftello" >&6; } +if test "$ac_cv_func_fseeko_ftello" != no +then : printf "%s\n" "#define HAVE_FSEEKO 1" >>confdefs.h fi +if test "$ac_cv_func_fseeko_ftello" = "need _LARGEFILE_SOURCE" +then : + +printf "%s\n" "#define _LARGEFILE_SOURCE 1" >>confdefs.h + +fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mbstate_t" >&5 printf %s "checking for mbstate_t... " >&6; } if test ${ac_cv_type_mbstate_t+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default # include <wchar.h> @@ -14411,10 +14808,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_type_mbstate_t=yes -else $as_nop - ac_cv_type_mbstate_t=no +else case e in #( + e) ac_cv_type_mbstate_t=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_mbstate_t" >&5 printf "%s\n" "$ac_cv_type_mbstate_t" >&6; } @@ -14433,8 +14832,8 @@ printf %s "checking for struct option in getopt... " >&6; } if test ${ac_cv_struct_option_getopt_h+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <getopt.h> int @@ -14448,10 +14847,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_struct_option_getopt_h=yes -else $as_nop - ac_cv_struct_option_getopt_h=no +else case e in #( + e) ac_cv_struct_option_getopt_h=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_option_getopt_h" >&5 printf "%s\n" "$ac_cv_struct_option_getopt_h" >&6; } @@ -14467,8 +14868,8 @@ fi if test "x$ac_cv_type_pid_t" = xyes then : -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined _WIN64 && !defined __CYGWIN__ @@ -14487,14 +14888,16 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_pid_type='int' -else $as_nop - ac_pid_type='__int64' +else case e in #( + e) ac_pid_type='__int64' ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext printf "%s\n" "#define pid_t $ac_pid_type" >>confdefs.h - + ;; +esac fi @@ -14569,8 +14972,8 @@ then : printf "%s\n" "#define HAVE_INTPTR_T 1" >>confdefs.h -else $as_nop - for ac_type in 'int' 'long int' 'long long int'; do +else case e in #( + e) for ac_type in 'int' 'long int' 'long long int'; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default @@ -14594,7 +14997,8 @@ printf "%s\n" "#define intptr_t $ac_type" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext test -z "$ac_type" && break - done + done ;; +esac fi @@ -14605,8 +15009,8 @@ then : printf "%s\n" "#define HAVE_UINTPTR_T 1" >>confdefs.h -else $as_nop - for ac_type in 'unsigned int' 'unsigned long int' \ +else case e in #( + e) for ac_type in 'unsigned int' 'unsigned long int' \ 'unsigned long long int'; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -14631,10 +15035,38 @@ printf "%s\n" "#define uintptr_t $ac_type" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext test -z "$ac_type" && break - done + done ;; +esac fi +if test "$enable_year2038,$ac_have_year2038,$cross_compiling" = yes,no,no +then : + # If we're not cross compiling and 'touch' works with a large + # timestamp, then we can presume the system supports wider time_t + # *somehow* and we just weren't able to detect it. One common + # case that we deliberately *don't* probe for is a system that + # supports both 32- and 64-bit ABIs but only the 64-bit ABI offers + # wide time_t. (It would be inappropriate for us to override an + # intentional use of -m32.) Error out, demanding use of + # --disable-year2038 if this is intentional. + if TZ=UTC0 touch -t 210602070628.15 conftest.time 2>/dev/null +then : + case `TZ=UTC0 LC_ALL=C ls -l conftest.time 2>/dev/null` in #( + *'Feb 7 2106'* | *'Feb 7 17:10'*) : + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} +as_fn_error $? "this system appears to support timestamps after +mid-January 2038, but no mechanism for enabling wide +'time_t' was detected. Did you mean to build a 64-bit +binary? (E.g., 'CC=\"${CC} -m64\"'.) To proceed with +32-bit time_t, configure with '--disable-year2038'. +See 'config.log' for more details" "$LINENO" 5; } ;; #( + *) : + ;; +esac +fi +fi ac_func= for ac_item in $ac_func_c_list @@ -14656,8 +15088,8 @@ printf %s "checking for working mmap... " >&6; } if test ${ac_cv_func_mmap_fixed_mapped+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes +else case e in #( + e) if test "$cross_compiling" = yes then : case "$host_os" in # (( # Guess yes on platforms where we know the result. @@ -14665,8 +15097,8 @@ then : # If we don't know, assume the worst. *) ac_cv_func_mmap_fixed_mapped=no ;; esac -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default /* malloc might have been renamed as rpl_malloc. */ @@ -14687,21 +15119,21 @@ $ac_includes_default VM page cache was not coherent with the file system buffer cache like early versions of FreeBSD and possibly contemporary NetBSD.) For shared mappings, we should conversely verify that changes get - propagated back to all the places they're supposed to be. - - Grep wants private fixed already mapped. - The main things grep needs to know about mmap are: - * does it exist and is it safe to write into the mmap'd area - * how to use it (BSD variants) */ + propagated back to all the places they're supposed to be. */ #include <fcntl.h> #include <sys/mman.h> -/* This mess was copied from the GNU getpagesize.h. */ -#ifndef HAVE_GETPAGESIZE +#ifndef getpagesize +/* Prefer sysconf to the legacy getpagesize function, as getpagesize has + been removed from POSIX and is limited to page sizes that fit in 'int'. */ # ifdef _SC_PAGESIZE -# define getpagesize() sysconf(_SC_PAGESIZE) -# else /* no _SC_PAGESIZE */ +# define getpagesize() sysconf (_SC_PAGESIZE) +# elif defined _SC_PAGE_SIZE +# define getpagesize() sysconf (_SC_PAGE_SIZE) +# elif HAVE_GETPAGESIZE +int getpagesize (); +# else # ifdef HAVE_SYS_PARAM_H # include <sys/param.h> # ifdef EXEC_PAGESIZE @@ -14725,16 +15157,15 @@ $ac_includes_default # else /* no HAVE_SYS_PARAM_H */ # define getpagesize() 8192 /* punt totally */ # endif /* no HAVE_SYS_PARAM_H */ -# endif /* no _SC_PAGESIZE */ - -#endif /* no HAVE_GETPAGESIZE */ +# endif +#endif int main (void) { char *data, *data2, *data3; const char *cdata2; - int i, pagesize; + long i, pagesize; int fd, fd2; pagesize = getpagesize (); @@ -14768,8 +15199,7 @@ main (void) if (*(data2 + i)) return 7; close (fd2); - if (munmap (data2, pagesize)) - return 8; + /* 'return 8;' not currently used. */ /* Next, try to mmap the file at a fixed address which already has something else allocated at it. If we can, also make sure that @@ -14806,13 +15236,16 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_mmap_fixed_mapped=yes -else $as_nop - ac_cv_func_mmap_fixed_mapped=no +else case e in #( + e) ac_cv_func_mmap_fixed_mapped=no ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_fixed_mapped" >&5 printf "%s\n" "$ac_cv_func_mmap_fixed_mapped" >&6; } @@ -14834,19 +15267,19 @@ printf %s "checking for working fork... " >&6; } if test ${ac_cv_func_fork_works+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes +else case e in #( + e) if test "$cross_compiling" = yes then : ac_cv_func_fork_works=cross -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main (void) { - /* By Ruediger Kuhlmann. */ + /* By R. Kuhlmann. */ return fork () < 0; ; @@ -14856,13 +15289,16 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_fork_works=yes -else $as_nop - ac_cv_func_fork_works=no +else case e in #( + e) ac_cv_func_fork_works=no ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fork_works" >&5 printf "%s\n" "$ac_cv_func_fork_works" >&6; } @@ -14890,12 +15326,12 @@ printf %s "checking for working vfork... " >&6; } if test ${ac_cv_func_vfork_works+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes +else case e in #( + e) if test "$cross_compiling" = yes then : ac_cv_func_vfork_works=cross -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Thanks to Paul Eggert for this test. */ $ac_includes_default @@ -15006,13 +15442,16 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_vfork_works=yes -else $as_nop - ac_cv_func_vfork_works=no +else case e in #( + e) ac_cv_func_vfork_works=no ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vfork_works" >&5 printf "%s\n" "$ac_cv_func_vfork_works" >&6; } @@ -15045,8 +15484,8 @@ printf %s "checking whether mbrtowc and mbstate_t are properly declared... " >&6 if test ${ac_cv_func_mbrtowc+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <wchar.h> int @@ -15064,11 +15503,13 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_func_mbrtowc=yes -else $as_nop - ac_cv_func_mbrtowc=no +else case e in #( + e) ac_cv_func_mbrtowc=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext + conftest$ac_exeext conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mbrtowc" >&5 printf "%s\n" "$ac_cv_func_mbrtowc" >&6; } @@ -15096,8 +15537,8 @@ printf "%s\n" "yes" >&6; } -Wsign-compare -Wreturn-type -Wswitch -Wshadow \ -Wcast-qual -Wwrite-strings -Wextra -Wunused-parameter -Wformat=2" fi -else $as_nop - +else case e in #( + e) if test "$GCC" = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } @@ -15109,7 +15550,8 @@ else WARNINGS= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } -fi +fi ;; +esac fi @@ -15198,182 +15640,196 @@ if test "x$ac_cv_func_getopt_long" = xyes then : printf "%s\n" "#define HAVE_GETOPT_LONG 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" getopt_long.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS getopt_long.$ac_objext" ;; esac - + ;; +esac fi ac_fn_c_check_func "$LINENO" "asprintf" "ac_cv_func_asprintf" if test "x$ac_cv_func_asprintf" = xyes then : printf "%s\n" "#define HAVE_ASPRINTF 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" asprintf.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS asprintf.$ac_objext" ;; esac - + ;; +esac fi ac_fn_c_check_func "$LINENO" "vasprintf" "ac_cv_func_vasprintf" if test "x$ac_cv_func_vasprintf" = xyes then : printf "%s\n" "#define HAVE_VASPRINTF 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" vasprintf.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS vasprintf.$ac_objext" ;; esac - + ;; +esac fi ac_fn_c_check_func "$LINENO" "strlcpy" "ac_cv_func_strlcpy" if test "x$ac_cv_func_strlcpy" = xyes then : printf "%s\n" "#define HAVE_STRLCPY 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" strlcpy.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strlcpy.$ac_objext" ;; esac - + ;; +esac fi ac_fn_c_check_func "$LINENO" "strlcat" "ac_cv_func_strlcat" if test "x$ac_cv_func_strlcat" = xyes then : printf "%s\n" "#define HAVE_STRLCAT 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" strlcat.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strlcat.$ac_objext" ;; esac - + ;; +esac fi ac_fn_c_check_func "$LINENO" "getline" "ac_cv_func_getline" if test "x$ac_cv_func_getline" = xyes then : printf "%s\n" "#define HAVE_GETLINE 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" getline.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS getline.$ac_objext" ;; esac - + ;; +esac fi ac_fn_c_check_func "$LINENO" "ctime_r" "ac_cv_func_ctime_r" if test "x$ac_cv_func_ctime_r" = xyes then : printf "%s\n" "#define HAVE_CTIME_R 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" ctime_r.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS ctime_r.$ac_objext" ;; esac - + ;; +esac fi ac_fn_c_check_func "$LINENO" "asctime_r" "ac_cv_func_asctime_r" if test "x$ac_cv_func_asctime_r" = xyes then : printf "%s\n" "#define HAVE_ASCTIME_R 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" asctime_r.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS asctime_r.$ac_objext" ;; esac - + ;; +esac fi ac_fn_c_check_func "$LINENO" "localtime_r" "ac_cv_func_localtime_r" if test "x$ac_cv_func_localtime_r" = xyes then : printf "%s\n" "#define HAVE_LOCALTIME_R 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" localtime_r.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS localtime_r.$ac_objext" ;; esac - + ;; +esac fi ac_fn_c_check_func "$LINENO" "gmtime_r" "ac_cv_func_gmtime_r" if test "x$ac_cv_func_gmtime_r" = xyes then : printf "%s\n" "#define HAVE_GMTIME_R 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" gmtime_r.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS gmtime_r.$ac_objext" ;; esac - + ;; +esac fi ac_fn_c_check_func "$LINENO" "pread" "ac_cv_func_pread" if test "x$ac_cv_func_pread" = xyes then : printf "%s\n" "#define HAVE_PREAD 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" pread.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS pread.$ac_objext" ;; esac - + ;; +esac fi ac_fn_c_check_func "$LINENO" "strcasestr" "ac_cv_func_strcasestr" if test "x$ac_cv_func_strcasestr" = xyes then : printf "%s\n" "#define HAVE_STRCASESTR 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" strcasestr.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strcasestr.$ac_objext" ;; esac - + ;; +esac fi ac_fn_c_check_func "$LINENO" "fmtcheck" "ac_cv_func_fmtcheck" if test "x$ac_cv_func_fmtcheck" = xyes then : printf "%s\n" "#define HAVE_FMTCHECK 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" fmtcheck.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS fmtcheck.$ac_objext" ;; esac - + ;; +esac fi ac_fn_c_check_func "$LINENO" "dprintf" "ac_cv_func_dprintf" if test "x$ac_cv_func_dprintf" = xyes then : printf "%s\n" "#define HAVE_DPRINTF 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" dprintf.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS dprintf.$ac_objext" ;; esac - + ;; +esac fi @@ -15383,16 +15839,22 @@ printf %s "checking for gzopen in -lz... " >&6; } if test ${ac_cv_lib_z_gzopen+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char gzopen (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char gzopen (void); int main (void) { @@ -15404,12 +15866,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_z_gzopen=yes -else $as_nop - ac_cv_lib_z_gzopen=no +else case e in #( + e) ac_cv_lib_z_gzopen=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_gzopen" >&5 printf "%s\n" "$ac_cv_lib_z_gzopen" >&6; } @@ -15428,16 +15892,22 @@ printf %s "checking for BZ2_bzCompressInit in -lbz2... " >&6; } if test ${ac_cv_lib_bz2_BZ2_bzCompressInit+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-lbz2 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char BZ2_bzCompressInit (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char BZ2_bzCompressInit (void); int main (void) { @@ -15449,12 +15919,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_bz2_BZ2_bzCompressInit=yes -else $as_nop - ac_cv_lib_bz2_BZ2_bzCompressInit=no +else case e in #( + e) ac_cv_lib_bz2_BZ2_bzCompressInit=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bz2_BZ2_bzCompressInit" >&5 printf "%s\n" "$ac_cv_lib_bz2_BZ2_bzCompressInit" >&6; } @@ -15473,16 +15945,22 @@ printf %s "checking for lzma_stream_decoder in -llzma... " >&6; } if test ${ac_cv_lib_lzma_lzma_stream_decoder+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-llzma $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char lzma_stream_decoder (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char lzma_stream_decoder (void); int main (void) { @@ -15494,12 +15972,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_lzma_lzma_stream_decoder=yes -else $as_nop - ac_cv_lib_lzma_lzma_stream_decoder=no +else case e in #( + e) ac_cv_lib_lzma_lzma_stream_decoder=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lzma_lzma_stream_decoder" >&5 printf "%s\n" "$ac_cv_lib_lzma_lzma_stream_decoder" >&6; } @@ -15518,16 +15998,22 @@ printf %s "checking for ZSTD_createDStream in -lzstd... " >&6; } if test ${ac_cv_lib_zstd_ZSTD_createDStream+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-lzstd $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char ZSTD_createDStream (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char ZSTD_createDStream (void); int main (void) { @@ -15539,12 +16025,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_zstd_ZSTD_createDStream=yes -else $as_nop - ac_cv_lib_zstd_ZSTD_createDStream=no +else case e in #( + e) ac_cv_lib_zstd_ZSTD_createDStream=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_zstd_ZSTD_createDStream" >&5 printf "%s\n" "$ac_cv_lib_zstd_ZSTD_createDStream" >&6; } @@ -15563,16 +16051,22 @@ printf %s "checking for LZ_decompress_open in -llz... " >&6; } if test ${ac_cv_lib_lz_LZ_decompress_open+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-llz $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char LZ_decompress_open (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char LZ_decompress_open (void); int main (void) { @@ -15584,12 +16078,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_lz_LZ_decompress_open=yes -else $as_nop - ac_cv_lib_lz_LZ_decompress_open=no +else case e in #( + e) ac_cv_lib_lz_LZ_decompress_open=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lz_LZ_decompress_open" >&5 printf "%s\n" "$ac_cv_lib_lz_LZ_decompress_open" >&6; } @@ -15602,22 +16098,82 @@ then : fi fi +if test "$enable_lrziplib" != "no"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for lrzip_new in -llrzip" >&5 +printf %s "checking for lrzip_new in -llrzip... " >&6; } +if test ${ac_cv_lib_lrzip_lrzip_new+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS +LIBS="-llrzip $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char lrzip_new (void); +int +main (void) +{ +return lrzip_new (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_lrzip_lrzip_new=yes +else case e in #( + e) ac_cv_lib_lrzip_lrzip_new=no ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS ;; +esac +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lrzip_lrzip_new" >&5 +printf "%s\n" "$ac_cv_lib_lrzip_lrzip_new" >&6; } +if test "x$ac_cv_lib_lrzip_lrzip_new" = xyes +then : + printf "%s\n" "#define HAVE_LIBLRZIP 1" >>confdefs.h + + LIBS="-llrzip $LIBS" + +fi + +fi + if test "$enable_libseccomp" != "no"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for seccomp_init in -lseccomp" >&5 printf %s "checking for seccomp_init in -lseccomp... " >&6; } if test ${ac_cv_lib_seccomp_seccomp_init+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-lseccomp $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char seccomp_init (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char seccomp_init (void); int main (void) { @@ -15629,12 +16185,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_seccomp_seccomp_init=yes -else $as_nop - ac_cv_lib_seccomp_seccomp_init=no +else case e in #( + e) ac_cv_lib_seccomp_seccomp_init=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_seccomp_seccomp_init" >&5 printf "%s\n" "$ac_cv_lib_seccomp_seccomp_init" >&6; } @@ -15653,16 +16211,22 @@ printf %s "checking for regexec in -lgnurx... " >&6; } if test ${ac_cv_lib_gnurx_regexec+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-lgnurx $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char regexec (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char regexec (void); int main (void) { @@ -15674,12 +16238,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_gnurx_regexec=yes -else $as_nop - ac_cv_lib_gnurx_regexec=no +else case e in #( + e) ac_cv_lib_gnurx_regexec=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gnurx_regexec" >&5 printf "%s\n" "$ac_cv_lib_gnurx_regexec" >&6; } @@ -15689,8 +16255,9 @@ then : LIBS="-lgnurx $LIBS" -else $as_nop - as_fn_error $? "libgnurx is required to build file(1) with MinGW" "$LINENO" 5 +else case e in #( + e) as_fn_error $? "libgnurx is required to build file(1) with MinGW" "$LINENO" 5 ;; +esac fi fi @@ -15755,6 +16322,17 @@ printf "%s\n" "#define LZLIBSUPPORT 1" >>confdefs.h fi +if test "$enable_lrziplib" = "yes"; then + if test "$ac_cv_header_Lrzip_h$ac_cv_lib_lrzip_lrzip_new" != "yesyes"; then + as_fn_error $? "lrzip support requested but not found" "$LINENO" 5 + fi +fi +if test "$ac_cv_header_Lrzip_h$ac_cv_lib_lrzip_lrzip_new" = "yesyes"; then + +printf "%s\n" "#define LRZIPLIBSUPPORT 1" >>confdefs.h + +fi + ac_config_files="$ac_config_files Makefile src/Makefile magic/Makefile tests/Makefile doc/Makefile python/Makefile libmagic.pc" cat >confcache <<\_ACEOF @@ -15767,8 +16345,8 @@ cat >confcache <<\_ACEOF # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the +# 'ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* 'ac_cv_foo' will be assigned the # following values. _ACEOF @@ -15798,14 +16376,14 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote + # 'set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) - # `set' quotes correctly as required by POSIX, so do not add quotes. + # 'set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | @@ -15899,6 +16477,12 @@ if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +# Check whether --enable-year2038 was given. +if test ${enable_year2038+y} +then : + enableval=$enable_year2038; +fi + if test -z "${IS_CROSS_COMPILE_TRUE}" && test -z "${IS_CROSS_COMPILE_FALSE}"; then as_fn_error $? "conditional \"IS_CROSS_COMPILE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -15932,7 +16516,6 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh @@ -15941,12 +16524,13 @@ then : # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else $as_nop - case `(set -o) 2>/dev/null` in #( +else case e in #( + e) case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; +esac ;; esac fi @@ -16018,7 +16602,7 @@ IFS=$as_save_IFS ;; esac -# We did not find ourselves, most probably we were run as `sh COMMAND' +# We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 @@ -16047,7 +16631,6 @@ as_fn_error () } # as_fn_error - # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -16087,11 +16670,12 @@ then : { eval $1+=\$2 }' -else $as_nop - as_fn_append () +else case e in #( + e) as_fn_append () { eval $1=\$$1\$2 - } + } ;; +esac fi # as_fn_append # as_fn_arith ARG... @@ -16105,11 +16689,12 @@ then : { as_val=$(( $* )) }' -else $as_nop - as_fn_arith () +else case e in #( + e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` - } + } ;; +esac fi # as_fn_arith @@ -16192,9 +16777,9 @@ if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. + # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. + # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then @@ -16275,10 +16860,12 @@ as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" +as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" +as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" +as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" +as_tr_sh="eval sed '$as_sed_sh'" # deprecated exec 6>&1 @@ -16293,8 +16880,8 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by file $as_me 5.45, which was -generated by GNU Autoconf 2.71. Invocation command line was +This file was extended by file $as_me 5.46, which was +generated by GNU Autoconf 2.72. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -16326,7 +16913,7 @@ _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions +'$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. @@ -16361,11 +16948,11 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -file config.status 5.45 -configured by $0, generated by GNU Autoconf 2.71, +file config.status 5.46 +configured by $0, generated by GNU Autoconf 2.72, with options \\"\$ac_cs_config\\" -Copyright (C) 2021 Free Software Foundation, Inc. +Copyright (C) 2023 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -16427,8 +17014,8 @@ do ac_need_defaults=false;; --he | --h) # Conflict between --help and --header - as_fn_error $? "ambiguous option: \`$1' -Try \`$0 --help' for more information.";; + as_fn_error $? "ambiguous option: '$1' +Try '$0 --help' for more information.";; --help | --hel | -h ) printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ @@ -16436,8 +17023,8 @@ Try \`$0 --help' for more information.";; ac_cs_silent=: ;; # This is an error. - -*) as_fn_error $? "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; + -*) as_fn_error $? "unrecognized option: '$1' +Try '$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; @@ -16524,6 +17111,7 @@ lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_q lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' +FILECMD='`$ECHO "$FILECMD" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' @@ -16532,6 +17120,7 @@ want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' +lt_ar_flags='`$ECHO "$lt_ar_flags" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' @@ -16652,6 +17241,7 @@ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ +FILECMD \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ @@ -16660,7 +17250,6 @@ want_nocaseglob \ DLLTOOL \ sharedlib_from_linklib_cmd \ AR \ -AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ @@ -16784,7 +17373,7 @@ do "python/Makefile") CONFIG_FILES="$CONFIG_FILES python/Makefile" ;; "libmagic.pc") CONFIG_FILES="$CONFIG_FILES libmagic.pc" ;; - *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + *) as_fn_error $? "invalid argument: '$ac_config_target'" "$LINENO" 5;; esac done @@ -16804,7 +17393,7 @@ fi # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. +# after its creation but before its name has been assigned to '$tmp'. $debug || { tmp= ac_tmp= @@ -16828,7 +17417,7 @@ ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. +# This happens for instance with './config.status config.h'. if test -n "$CONFIG_FILES"; then @@ -16986,13 +17575,13 @@ fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. -# This happens for instance with `./config.status Makefile'. +# This happens for instance with './config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF -# Transform confdefs.h into an awk script `defines.awk', embedded as +# Transform confdefs.h into an awk script 'defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. @@ -17102,7 +17691,7 @@ do esac case $ac_mode$ac_tag in :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :L* | :C*:*) as_fn_error $? "invalid tag '$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac @@ -17124,19 +17713,19 @@ do -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. + # because $ac_f cannot contain ':'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || - as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + as_fn_error 1 "cannot find input file: '$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done - # Let's still pretend it is `configure' which instantiates (i.e., don't + # Let's still pretend it is 'configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` @@ -17269,7 +17858,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 esac _ACEOF -# Neutralize VPATH when `$srcdir' = `.'. +# Neutralize VPATH when '$srcdir' = '.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 @@ -17300,9 +17889,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&5 -printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" @@ -17457,15 +18046,15 @@ printf "%s\n" X/"$am_mf" | (exit $ac_status); } || am_rc=$? done if test $am_rc -ne 0; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE=\"gmake\" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } fi { am_dirpart=; unset am_dirpart;} { am_filepart=; unset am_filepart;} @@ -17609,6 +18198,9 @@ to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd +# A file(cmd) program that detects file types. +FILECMD=$lt_FILECMD + # An object symbol dumper. OBJDUMP=$lt_OBJDUMP @@ -17633,8 +18225,11 @@ sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR +# Flags to create an archive (by configure). +lt_ar_flags=$lt_ar_flags + # Flags to create an archive. -AR_FLAGS=$lt_AR_FLAGS +AR_FLAGS=\${ARFLAGS-"\$lt_ar_flags"} # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec @@ -18010,7 +18605,7 @@ ltmain=$ac_aux_dir/ltmain.sh # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? - sed '$q' "$ltmain" >> "$cfgfile" \ + $SED '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || diff --git a/configure.ac b/configure.ac index aa728badb1b7..58a5f63657bb 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@ dnl Process this file with autoconf to produce a configure script. -AC_INIT([file],[5.45],[christos@astron.com]) +AC_INIT([file],[5.46],[christos@astron.com]) AM_INIT_AUTOMAKE([subdir-objects foreign]) m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) @@ -59,6 +59,11 @@ AC_ARG_ENABLE([lzlib], [AS_HELP_STRING([--disable-lzlib], [disable liblz (lzip) compression support @<:@default=auto@:>@])]) AC_MSG_RESULT($enable_lzlib) +AC_MSG_CHECKING(for lrziplib support) +AC_ARG_ENABLE([lrziplib], +[AS_HELP_STRING([--disable-lrziplib], [disable liblrzip (lrzip) compression support @<:@default=auto@:>@])]) +AC_MSG_RESULT($enable_lrziplib) + AC_MSG_CHECKING(for libseccomp support) AC_ARG_ENABLE([libseccomp], [AS_HELP_STRING([--disable-libseccomp], [disable libseccomp sandboxing @<:@default=auto@:>@])]) @@ -128,6 +133,9 @@ fi if test "$enable_lzlib" != "no"; then AC_CHECK_HEADERS(lzlib.h) fi +if test "$enable_lrziplib" != "no"; then + AC_CHECK_HEADERS(Lrzip.h) +fi AC_CHECK_TYPE([sig_t],[AC_DEFINE([HAVE_SIG_T],1,[Have sig_t type])],,[#include <signal.h>]) dnl Checks for typedefs, structures, and compiler characteristics. @@ -152,6 +160,18 @@ AC_TYPE_UINT64_T AC_TYPE_INT64_T AC_TYPE_INTPTR_T AC_TYPE_UINTPTR_T +m4_ifdef([AC_SYS_YEAR2038], [AC_SYS_YEAR2038], [ +# GNU libc only allows setting _TIME_BITS when FILE_OFFSET_BITS is also set. +# GNU libc defines __TIMESIZE on systems where _TIME_BITS can be set. +AS_IF([test X"$ac_cv_sys_file_offset_bits" = X"64"], [ + AC_CHECK_DECL(__TIMESIZE, [ + AC_DEFINE([_TIME_BITS], [64], [Number of bits in a timestamp, on hosts where this is settable.]) + ], [], [ +AC_INCLUDES_DEFAULT +#include <time.h> + ]) + ]) +]) AC_FUNC_MMAP AC_FUNC_FORK AC_FUNC_MBRTOWC @@ -202,6 +222,10 @@ fi if test "$enable_lzlib" != "no"; then AC_CHECK_LIB(lz, LZ_decompress_open) fi +if test "$enable_lrziplib" != "no"; then + AC_CHECK_LIB(lrzip, lrzip_new) +fi + if test "$enable_libseccomp" != "no"; then AC_CHECK_LIB(seccomp, seccomp_init) fi @@ -254,5 +278,14 @@ if test "$ac_cv_header_lzlib_h$ac_cv_lib_lz_LZ_decompress_open" = "yesyes"; the AC_DEFINE([LZLIBSUPPORT], 1, [Enable lzlib compression support]) fi +if test "$enable_lrziplib" = "yes"; then + if test "$ac_cv_header_Lrzip_h$ac_cv_lib_lrzip_lrzip_new" != "yesyes"; then + AC_MSG_ERROR([lrzip support requested but not found]) + fi +fi +if test "$ac_cv_header_Lrzip_h$ac_cv_lib_lrzip_lrzip_new" = "yesyes"; then + AC_DEFINE([LRZIPLIBSUPPORT], 1, [Enable lrziplib compression support]) +fi + AC_CONFIG_FILES([Makefile src/Makefile magic/Makefile tests/Makefile doc/Makefile python/Makefile libmagic.pc]) AC_OUTPUT diff --git a/doc/Makefile.in b/doc/Makefile.in index 08b71aaa2ff6..19cf44bcafc5 100644 --- a/doc/Makefile.in +++ b/doc/Makefile.in @@ -186,6 +186,7 @@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ +FILECMD = @FILECMD@ GREP = @GREP@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ INSTALL = @INSTALL@ diff --git a/doc/file.man b/doc/file.man index bf78c0c707f0..366e4c3ce847 100644 --- a/doc/file.man +++ b/doc/file.man @@ -1,5 +1,5 @@ -.\" $File: file.man,v 1.150 2023/05/21 17:08:34 christos Exp $ -.Dd May 21, 2023 +.\" $File: file.man,v 1.151 2024/04/07 21:27:35 christos Exp $ +.Dd April 7, 2024 .Dt FILE __CSECTION__ .Os .Sh NAME @@ -348,7 +348,7 @@ Set various parameter limits. .It Li elf_shsize Ta 128MB Ta max ELF section size processed .It Li encoding Ta 65K Ta max number of bytes to determine encoding .It Li indir Ta 50 Ta recursion limit for indirect magic -.It Li name Ta 50 Ta use count limit for name/use magic +.It Li name Ta 100 Ta use count limit for name/use magic .It Li regex Ta 8K Ta length limit for regex searches .El .It Fl r , Fl Fl raw diff --git a/doc/libmagic.man b/doc/libmagic.man index e89c6ee0bfac..d7571ad1aa4f 100644 --- a/doc/libmagic.man +++ b/doc/libmagic.man @@ -1,4 +1,4 @@ -.\" $File: libmagic.man,v 1.49 2023/07/20 14:32:07 christos Exp $ +.\" $File: libmagic.man,v 1.50 2023/12/29 18:04:47 christos Exp $ .\" .\" Copyright (c) Christos Zoulas 2003, 2018, 2022 .\" All Rights Reserved. @@ -25,7 +25,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd June 16, 2023 +.Dd December 29, 2023 .Dt LIBMAGIC 3 .Os .Sh NAME @@ -311,7 +311,10 @@ library. .It Li MAGIC_PARAM_ELF_PHNUM_MAX Ta size_t Ta 128 .It Li MAGIC_PARAM_ELF_SHNUM_MAX Ta size_t Ta 32768 .It Li MAGIC_PARAM_REGEX_MAX Ta size_t Ta 8192 -.It Li MAGIC_PARAM_BYTES_MAX Ta size_t Ta 1048576 +.It Li MAGIC_PARAM_BYTES_MAX Ta size_t Ta 7340032 +.It Li MAGIC_PARAM_ENCODING_MAX Ta size_t Ta 1048576 +.It Li MAGIC_PARAM_ELF_SHSIZE_MAX Ta size_t Ta 134217728 +.It Li MAGIC_PARAM_MAGWARN_MAX Ta size_t Ta 64 .El .Pp The @@ -341,6 +344,26 @@ The parameter controls how many ELF sections will be processed. .Pp The +.Dv MAGIC_PARAM_REGEX_MAX +parameter controls the maximum length for regex searches. +.Pp +The +.Dv MAGIC_PARAM_BYTES_MAX +parameter controls the maximum number of bytes to look inside a file. +.Pp +The +.Dv MAGIC_PARAM_ENCODING_MAX +parameter controls the maximum number of bytes to scan for encoding detection. +.Pp +The +.Dv MAGIC_PARAM_ELF_SHSIZE_MAX +parameter controls the maximum number of bytes in an elf section. +.Pp +The +.Dv MAGIC_PARAM_MAGWARN_MAX +parameter controls the maximum number of warnings to tolerate in a magic file. +.Pp +The .Fn magic_version command returns the version number of this library which is compiled into the shared library using the constant diff --git a/doc/magic.man b/doc/magic.man index af4bfa89c6bd..6916b7b211d7 100644 --- a/doc/magic.man +++ b/doc/magic.man @@ -1,5 +1,5 @@ -.\" $File: magic.man,v 1.103 2023/07/20 14:32:07 christos Exp $ -.Dd Arpil 18, 2023 +.\" $File: magic.man,v 1.110 2024/11/27 15:37:00 christos Exp $ +.Dd November 27, 2024 .Dt MAGIC __FSECTION__ .Os .\" install as magic.4 on USG, magic.5 on V7, Berkeley and Linux systems. @@ -50,6 +50,10 @@ is a regular file. A continuation offset relative to the end of the last up-level field .Dv ( \*[Am] ) . .El +If the offset starts with the symbol +.Dq + , +then all offsets are interpreted as from the beginning of the file (the +default). .It Dv type The type of the data to be tested. The possible values are: @@ -146,6 +150,10 @@ An eight-byte value interpreted as a UNIX-style date, but interpreted as local time rather than UTC. .It Dv qwdate An eight-byte value interpreted as a Windows-style date. +.It Dv msdosdate +A two-byte value interpreted as FAT/DOS-style date. +.It Dv msdostime +A two-byte value interpreted as FAT/DOS-style time. .It Dv beid3 A 32-bit ID3 length in big-endian byte order. .It Dv beshort @@ -175,6 +183,12 @@ than UTC. .It Dv beqwdate An eight-byte value in big-endian byte order, interpreted as a Windows-style date. +.It Dv bemsdosdate +A two-byte value in big-endian byte order, +interpreted as FAT/DOS-style date. +.It Dv bemsdostime +A two-byte value in big-endian byte order, +interpreted as FAT/DOS-style time. .It Dv bestring16 A two-byte unicode (UCS16) string in big-endian byte order. .It Dv leid3 @@ -206,6 +220,12 @@ than UTC. .It Dv leqwdate An eight-byte value in little-endian byte order, interpreted as a Windows-style date. +.It Dv lemsdosdate +A two-byte value in big-endian byte order, +interpreted as FAT/DOS-style date. +.It Dv lemsdostime +A two-byte value in big-endian byte order, +interpreted as FAT/DOS-style time. .It Dv lestring16 A two-byte unicode (UCS16) string in little-endian byte order. .It Dv melong @@ -360,7 +380,6 @@ For example the magic entries: .It Dv octal A string representing an octal number. .El -.El .Pp For compatibility with the Single .Ux @@ -610,9 +629,9 @@ with level For more complex files, one can use empty messages to get just the "if/then" effect, in the following way: .Bd -literal -offset indent -0 string MZ -\*[Gt]0x18 leshort \*[Lt]0x40 MS-DOS executable -\*[Gt]0x18 leshort \*[Gt]0x3f extended PC executable (e.g., MS Windows) +0 string MZ +\*[Gt]0x18 uleshort \*[Lt]0x40 MS-DOS executable +\*[Gt]0x18 uleshort \*[Gt]0x3f extended PC executable (e.g., MS Windows) .Ed .Pp Offsets do not need to be constant, but can also be read from the file @@ -627,17 +646,17 @@ the file. The value at that offset is read, and is used again as an offset in the file. Indirect offsets are of the form: -.Em (( x [[.,][bBcCeEfFgGhHiIlmsSqQ]][+\-][ y ]) . +.Em ( x [[.,][bBcCeEfFgGhHiIlmosSqQ]][+\-][ y ]) . The value of .Em x is used as an offset in the file. A byte, id3 length, short or long is read at that offset depending on the -.Em [bBcCeEfFgGhHiIlmsSqQ] +.Em [bBcCeEfFgGhHiIlLmsSqQ] type specifier. The value is treated as signed if -.Dq , +.Dq \&, is specified or unsigned if -.Dq . +.Dq \&. is specified. The capitalized types interpret the number as a big endian value, whereas the small letter versions interpret the number as a little @@ -652,13 +671,15 @@ The default type if one is not specified is long. The following types are recognized: .Bl -column -offset indent "Type" "Half/Short" "Little" "Size" .It Sy Type Sy Mnemonic Sy Endian Sy Size -.It bcBc Byte/Char N/A 1 +.It bcBC Byte/Char N/A 1 .It efg Double Little 8 .It EFG Double Big 8 .It hs Half/Short Little 2 .It HS Half/Short Big 2 .It i ID3 Little 4 .It I ID3 Big 4 +.It l Long Little 4 +.It L Long Big 4 .It m Middle Middle 4 .It o Octal Textual Variable .It q Quad Little 8 @@ -668,12 +689,12 @@ The following types are recognized: That way variable length structures can be examined: .Bd -literal -offset indent # MS Windows executables are also valid MS-DOS executables -0 string MZ -\*[Gt]0x18 leshort \*[Lt]0x40 MZ executable (MS-DOS) +0 string MZ +\*[Gt]0x18 uleshort \*[Lt]0x40 MZ executable (MS-DOS) # skip the whole block below if it is not an extended executable -\*[Gt]0x18 leshort \*[Gt]0x3f -\*[Gt]\*[Gt](0x3c.l) string PE\e0\e0 PE executable (MS-Windows) -\*[Gt]\*[Gt](0x3c.l) string LX\e0\e0 LX executable (OS/2) +\*[Gt]0x18 uleshort \*[Gt]0x3f +\*[Gt]\*[Gt](0x3c.l) string PE\e0\e0 PE executable (MS-Windows) +\*[Gt]\*[Gt](0x3c.l) string LX\e0\e0 LX executable (OS/2) .Ed .Pp This strategy of examining has a drawback: you must make sure that you @@ -687,12 +708,12 @@ inside parentheses allows one to modify the value read from the file before it is used as an offset: .Bd -literal -offset indent # MS Windows executables are also valid MS-DOS executables -0 string MZ +0 string MZ # sometimes, the value at 0x18 is less that 0x40 but there's still an # extended executable, simply appended to the file -\*[Gt]0x18 leshort \*[Lt]0x40 -\*[Gt]\*[Gt](4.s*512) leshort 0x014c COFF executable (MS-DOS, DJGPP) -\*[Gt]\*[Gt](4.s*512) leshort !0x014c MZ executable (MS-DOS) +\*[Gt]0x18 uleshort \*[Lt]0x40 +\*[Gt]\*[Gt](4.s*512) leshort 0x014c COFF executable (MS-DOS, DJGPP) +\*[Gt]\*[Gt](4.s*512) leshort !0x014c MZ executable (MS-DOS) .Ed .Pp Sometimes you do not know the exact offset as this depends on the length or @@ -702,44 +723,45 @@ field using .Sq \*[Am] as a prefix to the offset: .Bd -literal -offset indent -0 string MZ -\*[Gt]0x18 leshort \*[Gt]0x3f -\*[Gt]\*[Gt](0x3c.l) string PE\e0\e0 PE executable (MS-Windows) +0 string MZ +\*[Gt]0x18 uleshort \*[Gt]0x3f +\*[Gt]\*[Gt](0x3c.l) string PE\e0\e0 PE executable (MS-Windows) # immediately following the PE signature is the CPU type -\*[Gt]\*[Gt]\*[Gt]\*[Am]0 leshort 0x14c for Intel 80386 -\*[Gt]\*[Gt]\*[Gt]\*[Am]0 leshort 0x184 for DEC Alpha +\*[Gt]\*[Gt]\*[Gt]\*[Am]0 leshort 0x14c for Intel 80386 +\*[Gt]\*[Gt]\*[Gt]\*[Am]0 leshort 0x8664 for x86-64 +\*[Gt]\*[Gt]\*[Gt]\*[Am]0 leshort 0x184 for DEC Alpha .Ed .Pp Indirect and relative offsets can be combined: .Bd -literal -offset indent -0 string MZ -\*[Gt]0x18 leshort \*[Lt]0x40 -\*[Gt]\*[Gt](4.s*512) leshort !0x014c MZ executable (MS-DOS) +0 string MZ +\*[Gt]0x18 uleshort \*[Lt]0x40 +\*[Gt]\*[Gt](4.s*512) leshort !0x014c MZ executable (MS-DOS) # if it's not COFF, go back 512 bytes and add the offset taken # from byte 2/3, which is yet another way of finding the start # of the extended executable -\*[Gt]\*[Gt]\*[Gt]\*[Am](2.s-514) string LE LE executable (MS Windows VxD driver) +\*[Gt]\*[Gt]\*[Gt]\*[Am](2.s-514) string LE LE executable (MS Windows VxD driver) .Ed .Pp Or the other way around: .Bd -literal -offset indent -0 string MZ -\*[Gt]0x18 leshort \*[Gt]0x3f -\*[Gt]\*[Gt](0x3c.l) string LE\e0\e0 LE executable (MS-Windows) +0 string MZ +\*[Gt]0x18 uleshort \*[Gt]0x3f +\*[Gt]\*[Gt](0x3c.l) string LE\e0\e0 LE executable (MS-Windows) # at offset 0x80 (-4, since relative offsets start at the end # of the up-level match) inside the LE header, we find the absolute # offset to the code area, where we look for a specific signature -\*[Gt]\*[Gt]\*[Gt](\*[Am]0x7c.l+0x26) string UPX \eb, UPX compressed +\*[Gt]\*[Gt]\*[Gt](\*[Am]0x7c.l+0x26) string UPX \eb, UPX compressed .Ed .Pp Or even both! .Bd -literal -offset indent -0 string MZ -\*[Gt]0x18 leshort \*[Gt]0x3f -\*[Gt]\*[Gt](0x3c.l) string LE\e0\e0 LE executable (MS-Windows) +0 string MZ +\*[Gt]0x18 uleshort \*[Gt]0x3f +\*[Gt]\*[Gt](0x3c.l) string LE\e0\e0 LE executable (MS-Windows) # at offset 0x58 inside the LE header, we find the relative offset # to a data area where we look for a specific signature -\*[Gt]\*[Gt]\*[Gt]\*[Am](\*[Am]0x54.l-3) string UNACE \eb, ACE self-extracting archive +\*[Gt]\*[Gt]\*[Gt]\*[Am](\*[Am]0x54.l-3) string UNACE \eb, ACE self-extracting archive .Ed .Pp If you have to deal with offset/length pairs in your file, even the @@ -749,7 +771,7 @@ Note that this additional indirect offset is always relative to the start of the main indirect offset. .Bd -literal -offset indent 0 string MZ -\*[Gt]0x18 leshort \*[Gt]0x3f +\*[Gt]0x18 uleshort \*[Gt]0x3f \*[Gt]\*[Gt](0x3c.l) string PE\e0\e0 PE executable (MS-Windows) # search for the PE section called ".idata"... \*[Gt]\*[Gt]\*[Gt]\*[Am]0xf4 search/0x140 .idata @@ -762,7 +784,7 @@ If you have a list of known values at a particular continuation level, and you want to provide a switch-like default case: .Bd -literal -offset indent # clear that continuation level match -\*[Gt]18 clear +\*[Gt]18 clear x \*[Gt]18 lelong 1 one \*[Gt]18 lelong 2 two \*[Gt]18 default x @@ -828,3 +850,15 @@ to make it clearer that those types have specified widths. .\" the changes I posted to the S5R2 version. .\" .\" Modified for Ian Darwin's version of the file command. +.\" +.\" For emacs editor +.\" Local Variables: +.\" eval: (add-hook 'before-save-hook 'time-stamp) +.\" time-stamp-start: ".Dd " +.\" time-stamp-end: "$" +.\" time-stamp-format: "%:B %02d, %:Y" +.\" time-stamp-time-zone: "UTC0" +.\" system-time-locale: "C" +.\" eval:(setq compile-command (concat "groff -Tlatin1 -m man " (buffer-file-name)) ) +.\" End: +.\" diff --git a/ltmain.sh b/ltmain.sh index ffabee228c13..5750d300234a 100644 --- a/ltmain.sh +++ b/ltmain.sh @@ -1,12 +1,12 @@ -#! /bin/sh +#! /usr/bin/env sh ## DO NOT EDIT - This file generated from ./build-aux/ltmain.in -## by inline-source v2014-01-03.01 +## by inline-source v2019-02-19.15 -# libtool (GNU libtool) 2.4.6 +# libtool (GNU libtool) 2.4.7 # Provide generalized library-building support services. # Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 -# Copyright (C) 1996-2015 Free Software Foundation, Inc. +# Copyright (C) 1996-2019, 2021-2022 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. @@ -31,8 +31,8 @@ PROGRAM=libtool PACKAGE=libtool -VERSION=2.4.6 -package_revision=2.4.6 +VERSION=2.4.7 +package_revision=2.4.7 ## ------ ## @@ -64,34 +64,25 @@ package_revision=2.4.6 # libraries, which are installed to $pkgauxdir. # Set a version string for this script. -scriptversion=2015-01-20.17; # UTC +scriptversion=2019-02-19.15; # UTC # General shell script boiler plate, and helper functions. # Written by Gary V. Vaughan, 2004 -# Copyright (C) 2004-2015 Free Software Foundation, Inc. -# This is free software; see the source for copying conditions. There is NO -# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. - -# As a special exception to the GNU General Public License, if you distribute -# this file as part of a program or library that is built using GNU Libtool, -# you may include this file under the same distribution terms that you use -# for the rest of that program. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. +# This is free software. There is NO warranty; not even for +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# +# Copyright (C) 2004-2019, 2021 Bootstrap Authors +# +# This file is dual licensed under the terms of the MIT license +# <https://opensource.org/license/MIT>, and GPL version 2 or later +# <http://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of +# these licenses when using or redistributing this software or any of +# the files within it. See the URLs above, or the file `LICENSE` +# included in the Bootstrap distribution for the full license texts. -# Please report bugs or propose patches to gary@gnu.org. +# Please report bugs or propose patches to: +# <https://github.com/gnulib-modules/bootstrap/issues> ## ------ ## @@ -139,9 +130,12 @@ do _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" fi" done - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH +# These NLS vars are set unconditionally (bootstrap issue #24). Unset those +# in case the environment reset is needed later and the $save_* variant is not +# defined (see the code above). +LC_ALL=C +LANGUAGE=C +export LANGUAGE LC_ALL # Make sure IFS has a sensible default sp=' ' @@ -159,6 +153,26 @@ if test "${PATH_SEPARATOR+set}" != set; then fi +# func_unset VAR +# -------------- +# Portably unset VAR. +# In some shells, an 'unset VAR' statement leaves a non-zero return +# status if VAR is already unset, which might be problematic if the +# statement is used at the end of a function (thus poisoning its return +# value) or when 'set -e' is active (causing even a spurious abort of +# the script in this case). +func_unset () +{ + { eval $1=; (eval unset $1) >/dev/null 2>&1 && eval unset $1 || : ; } +} + + +# Make sure CDPATH doesn't cause `cd` commands to output the target dir. +func_unset CDPATH + +# Make sure ${,E,F}GREP behave sanely. +func_unset GREP_OPTIONS + ## ------------------------- ## ## Locate command utilities. ## @@ -259,7 +273,7 @@ test -z "$SED" && { rm -f conftest.in conftest.tmp conftest.nl conftest.out } - func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin + func_path_progs "sed gsed" func_check_prog_sed "$PATH:/usr/xpg4/bin" rm -f conftest.sed SED=$func_path_progs_result } @@ -295,7 +309,7 @@ test -z "$GREP" && { rm -f conftest.in conftest.tmp conftest.nl conftest.out } - func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin + func_path_progs "grep ggrep" func_check_prog_grep "$PATH:/usr/xpg4/bin" GREP=$func_path_progs_result } @@ -363,6 +377,35 @@ sed_double_backslash="\ s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g s/\n//g" +# require_check_ifs_backslash +# --------------------------- +# Check if we can use backslash as IFS='\' separator, and set +# $check_ifs_backshlash_broken to ':' or 'false'. +require_check_ifs_backslash=func_require_check_ifs_backslash +func_require_check_ifs_backslash () +{ + _G_save_IFS=$IFS + IFS='\' + _G_check_ifs_backshlash='a\\b' + for _G_i in $_G_check_ifs_backshlash + do + case $_G_i in + a) + check_ifs_backshlash_broken=false + ;; + '') + break + ;; + *) + check_ifs_backshlash_broken=: + break + ;; + esac + done + IFS=$_G_save_IFS + require_check_ifs_backslash=: +} + ## ----------------- ## ## Global variables. ## @@ -583,16 +626,16 @@ if test yes = "$_G_HAVE_PLUSEQ_OP"; then { $debug_cmd - func_quote_for_eval "$2" - eval "$1+=\\ \$func_quote_for_eval_result" + func_quote_arg pretty "$2" + eval "$1+=\\ \$func_quote_arg_result" }' else func_append_quoted () { $debug_cmd - func_quote_for_eval "$2" - eval "$1=\$$1\\ \$func_quote_for_eval_result" + func_quote_arg pretty "$2" + eval "$1=\$$1\\ \$func_quote_arg_result" } fi @@ -1094,85 +1137,203 @@ func_relative_path () } -# func_quote_for_eval ARG... -# -------------------------- -# Aesthetically quote ARGs to be evaled later. -# This function returns two values: -# i) func_quote_for_eval_result -# double-quoted, suitable for a subsequent eval -# ii) func_quote_for_eval_unquoted_result -# has all characters that are still active within double -# quotes backslashified. -func_quote_for_eval () +# func_quote_portable EVAL ARG +# ---------------------------- +# Internal function to portably implement func_quote_arg. Note that we still +# keep attention to performance here so we as much as possible try to avoid +# calling sed binary (so far O(N) complexity as long as func_append is O(1)). +func_quote_portable () { $debug_cmd - func_quote_for_eval_unquoted_result= - func_quote_for_eval_result= - while test 0 -lt $#; do - case $1 in - *[\\\`\"\$]*) - _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; - *) - _G_unquoted_arg=$1 ;; - esac - if test -n "$func_quote_for_eval_unquoted_result"; then - func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" - else - func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" + $require_check_ifs_backslash + + func_quote_portable_result=$2 + + # one-time-loop (easy break) + while true + do + if $1; then + func_quote_portable_result=`$ECHO "$2" | $SED \ + -e "$sed_double_quote_subst" -e "$sed_double_backslash"` + break fi - case $_G_unquoted_arg in - # Double-quote args containing shell metacharacters to delay - # word splitting, command substitution and variable expansion - # for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - _G_quoted_arg=\"$_G_unquoted_arg\" + # Quote for eval. + case $func_quote_portable_result in + *[\\\`\"\$]*) + # Fallback to sed for $func_check_bs_ifs_broken=:, or when the string + # contains the shell wildcard characters. + case $check_ifs_backshlash_broken$func_quote_portable_result in + :*|*[\[\*\?]*) + func_quote_portable_result=`$ECHO "$func_quote_portable_result" \ + | $SED "$sed_quote_subst"` + break + ;; + esac + + func_quote_portable_old_IFS=$IFS + for _G_char in '\' '`' '"' '$' + do + # STATE($1) PREV($2) SEPARATOR($3) + set start "" "" + func_quote_portable_result=dummy"$_G_char$func_quote_portable_result$_G_char"dummy + IFS=$_G_char + for _G_part in $func_quote_portable_result + do + case $1 in + quote) + func_append func_quote_portable_result "$3$2" + set quote "$_G_part" "\\$_G_char" + ;; + start) + set first "" "" + func_quote_portable_result= + ;; + first) + set quote "$_G_part" "" + ;; + esac + done + done + IFS=$func_quote_portable_old_IFS ;; - *) - _G_quoted_arg=$_G_unquoted_arg - ;; + *) ;; esac - - if test -n "$func_quote_for_eval_result"; then - func_append func_quote_for_eval_result " $_G_quoted_arg" - else - func_append func_quote_for_eval_result "$_G_quoted_arg" - fi - shift + break done + + func_quote_portable_unquoted_result=$func_quote_portable_result + case $func_quote_portable_result in + # double-quote args containing shell metacharacters to delay + # word splitting, command substitution and variable expansion + # for a subsequent eval. + # many bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + func_quote_portable_result=\"$func_quote_portable_result\" + ;; + esac } -# func_quote_for_expand ARG -# ------------------------- -# Aesthetically quote ARG to be evaled later; same as above, -# but do not quote variable references. -func_quote_for_expand () -{ - $debug_cmd +# func_quotefast_eval ARG +# ----------------------- +# Quote one ARG (internal). This is equivalent to 'func_quote_arg eval ARG', +# but optimized for speed. Result is stored in $func_quotefast_eval. +if test xyes = `(x=; printf -v x %q yes; echo x"$x") 2>/dev/null`; then + printf -v _GL_test_printf_tilde %q '~' + if test '\~' = "$_GL_test_printf_tilde"; then + func_quotefast_eval () + { + printf -v func_quotefast_eval_result %q "$1" + } + else + # Broken older Bash implementations. Make those faster too if possible. + func_quotefast_eval () + { + case $1 in + '~'*) + func_quote_portable false "$1" + func_quotefast_eval_result=$func_quote_portable_result + ;; + *) + printf -v func_quotefast_eval_result %q "$1" + ;; + esac + } + fi +else + func_quotefast_eval () + { + func_quote_portable false "$1" + func_quotefast_eval_result=$func_quote_portable_result + } +fi - case $1 in - *[\\\`\"]*) - _G_arg=`$ECHO "$1" | $SED \ - -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; - *) - _G_arg=$1 ;; + +# func_quote_arg MODEs ARG +# ------------------------ +# Quote one ARG to be evaled later. MODEs argument may contain zero or more +# specifiers listed below separated by ',' character. This function returns two +# values: +# i) func_quote_arg_result +# double-quoted (when needed), suitable for a subsequent eval +# ii) func_quote_arg_unquoted_result +# has all characters that are still active within double +# quotes backslashified. Available only if 'unquoted' is specified. +# +# Available modes: +# ---------------- +# 'eval' (default) +# - escape shell special characters +# 'expand' +# - the same as 'eval'; but do not quote variable references +# 'pretty' +# - request aesthetic output, i.e. '"a b"' instead of 'a\ b'. This might +# be used later in func_quote to get output like: 'echo "a b"' instead +# of 'echo a\ b'. This is slower than default on some shells. +# 'unquoted' +# - produce also $func_quote_arg_unquoted_result which does not contain +# wrapping double-quotes. +# +# Examples for 'func_quote_arg pretty,unquoted string': +# +# string | *_result | *_unquoted_result +# ------------+-----------------------+------------------- +# " | \" | \" +# a b | "a b" | a b +# "a b" | "\"a b\"" | \"a b\" +# * | "*" | * +# z="${x-$y}" | "z=\"\${x-\$y}\"" | z=\"\${x-\$y}\" +# +# Examples for 'func_quote_arg pretty,unquoted,expand string': +# +# string | *_result | *_unquoted_result +# --------------+---------------------+-------------------- +# z="${x-$y}" | "z=\"${x-$y}\"" | z=\"${x-$y}\" +func_quote_arg () +{ + _G_quote_expand=false + case ,$1, in + *,expand,*) + _G_quote_expand=: + ;; esac - case $_G_arg in - # Double-quote args containing shell metacharacters to delay - # word splitting and command substitution for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - _G_arg=\"$_G_arg\" + case ,$1, in + *,pretty,*|*,expand,*|*,unquoted,*) + func_quote_portable $_G_quote_expand "$2" + func_quote_arg_result=$func_quote_portable_result + func_quote_arg_unquoted_result=$func_quote_portable_unquoted_result + ;; + *) + # Faster quote-for-eval for some shells. + func_quotefast_eval "$2" + func_quote_arg_result=$func_quotefast_eval_result ;; esac +} + - func_quote_for_expand_result=$_G_arg +# func_quote MODEs ARGs... +# ------------------------ +# Quote all ARGs to be evaled later and join them into single command. See +# func_quote_arg's description for more info. +func_quote () +{ + $debug_cmd + _G_func_quote_mode=$1 ; shift + func_quote_result= + while test 0 -lt $#; do + func_quote_arg "$_G_func_quote_mode" "$1" + if test -n "$func_quote_result"; then + func_append func_quote_result " $func_quote_arg_result" + else + func_append func_quote_result "$func_quote_arg_result" + fi + shift + done } @@ -1218,8 +1379,8 @@ func_show_eval () _G_cmd=$1 _G_fail_exp=${2-':'} - func_quote_for_expand "$_G_cmd" - eval "func_notquiet $func_quote_for_expand_result" + func_quote_arg pretty,expand "$_G_cmd" + eval "func_notquiet $func_quote_arg_result" $opt_dry_run || { eval "$_G_cmd" @@ -1244,8 +1405,8 @@ func_show_eval_locale () _G_fail_exp=${2-':'} $opt_quiet || { - func_quote_for_expand "$_G_cmd" - eval "func_echo $func_quote_for_expand_result" + func_quote_arg expand,pretty "$_G_cmd" + eval "func_echo $func_quote_arg_result" } $opt_dry_run || { @@ -1372,30 +1533,26 @@ func_lt_ver () # End: #! /bin/sh -# Set a version string for this script. -scriptversion=2014-01-07.03; # UTC - # A portable, pluggable option parser for Bourne shell. # Written by Gary V. Vaughan, 2010 -# Copyright (C) 2010-2015 Free Software Foundation, Inc. -# This is free software; see the source for copying conditions. There is NO -# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# This is free software. There is NO warranty; not even for +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# +# Copyright (C) 2010-2019, 2021 Bootstrap Authors +# +# This file is dual licensed under the terms of the MIT license +# <https://opensource.org/license/MIT>, and GPL version 2 or later +# <http://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of +# these licenses when using or redistributing this software or any of +# the files within it. See the URLs above, or the file `LICENSE` +# included in the Bootstrap distribution for the full license texts. -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. +# Please report bugs or propose patches to: +# <https://github.com/gnulib-modules/bootstrap/issues> -# Please report bugs or propose patches to gary@gnu.org. +# Set a version string for this script. +scriptversion=2019-02-19.15; # UTC ## ------ ## @@ -1418,7 +1575,7 @@ scriptversion=2014-01-07.03; # UTC # # In order for the '--version' option to work, you will need to have a # suitably formatted comment like the one at the top of this file -# starting with '# Written by ' and ending with '# warranty; '. +# starting with '# Written by ' and ending with '# Copyright'. # # For '-h' and '--help' to work, you will also need a one line # description of your script's purpose in a comment directly above the @@ -1430,7 +1587,7 @@ scriptversion=2014-01-07.03; # UTC # to display verbose messages only when your user has specified # '--verbose'. # -# After sourcing this file, you can plug processing for additional +# After sourcing this file, you can plug in processing for additional # options by amending the variables from the 'Configuration' section # below, and following the instructions in the 'Option parsing' # section further down. @@ -1479,8 +1636,8 @@ fatal_help="Try '\$progname --help' for more information." ## ------------------------- ## # This section contains functions for adding, removing, and running hooks -# to the main code. A hook is just a named list of of function, that can -# be run in order later on. +# in the main code. A hook is just a list of function names that can be +# run in order later on. # func_hookable FUNC_NAME # ----------------------- @@ -1513,7 +1670,8 @@ func_add_hook () # func_remove_hook FUNC_NAME HOOK_FUNC # ------------------------------------ -# Remove HOOK_FUNC from the list of functions called by FUNC_NAME. +# Remove HOOK_FUNC from the list of hook functions to be called by +# FUNC_NAME. func_remove_hook () { $debug_cmd @@ -1522,10 +1680,28 @@ func_remove_hook () } +# func_propagate_result FUNC_NAME_A FUNC_NAME_B +# --------------------------------------------- +# If the *_result variable of FUNC_NAME_A _is set_, assign its value to +# *_result variable of FUNC_NAME_B. +func_propagate_result () +{ + $debug_cmd + + func_propagate_result_result=: + if eval "test \"\${${1}_result+set}\" = set" + then + eval "${2}_result=\$${1}_result" + else + func_propagate_result_result=false + fi +} + + # func_run_hooks FUNC_NAME [ARG]... # --------------------------------- # Run all hook functions registered to FUNC_NAME. -# It is assumed that the list of hook functions contains nothing more +# It's assumed that the list of hook functions contains nothing more # than a whitespace-delimited list of legal shell function names, and # no effort is wasted trying to catch shell meta-characters or preserve # whitespace. @@ -1535,22 +1711,19 @@ func_run_hooks () case " $hookable_fns " in *" $1 "*) ;; - *) func_fatal_error "'$1' does not support hook funcions.n" ;; + *) func_fatal_error "'$1' does not support hook functions." ;; esac eval _G_hook_fns=\$$1_hooks; shift for _G_hook in $_G_hook_fns; do - eval $_G_hook '"$@"' - - # store returned options list back into positional - # parameters for next 'cmd' execution. - eval _G_hook_result=\$${_G_hook}_result - eval set dummy "$_G_hook_result"; shift + func_unset "${_G_hook}_result" + eval $_G_hook '${1+"$@"}' + func_propagate_result $_G_hook func_run_hooks + if $func_propagate_result_result; then + eval set dummy "$func_run_hooks_result"; shift + fi done - - func_quote_for_eval ${1+"$@"} - func_run_hooks_result=$func_quote_for_eval_result } @@ -1560,10 +1733,18 @@ func_run_hooks () ## --------------- ## # In order to add your own option parsing hooks, you must accept the -# full positional parameter list in your hook function, remove any -# options that you action, and then pass back the remaining unprocessed -# options in '<hooked_function_name>_result', escaped suitably for -# 'eval'. Like this: +# full positional parameter list from your hook function. You may remove +# or edit any options that you action, and then pass back the remaining +# unprocessed options in '<hooked_function_name>_result', escaped +# suitably for 'eval'. +# +# The '<hooked_function_name>_result' variable is automatically unset +# before your hook gets called; for best performance, only set the +# *_result variable when necessary (i.e. don't call the 'func_quote' +# function unnecessarily because it can be an expensive operation on some +# machines). +# +# Like this: # # my_options_prep () # { @@ -1573,9 +1754,8 @@ func_run_hooks () # usage_message=$usage_message' # -s, --silent don'\''t print informational messages # ' -# -# func_quote_for_eval ${1+"$@"} -# my_options_prep_result=$func_quote_for_eval_result +# # No change in '$@' (ignored completely by this hook). Leave +# # my_options_prep_result variable intact. # } # func_add_hook func_options_prep my_options_prep # @@ -1584,25 +1764,36 @@ func_run_hooks () # { # $debug_cmd # -# # Note that for efficiency, we parse as many options as we can +# args_changed=false +# +# # Note that, for efficiency, we parse as many options as we can # # recognise in a loop before passing the remainder back to the # # caller on the first unrecognised argument we encounter. # while test $# -gt 0; do # opt=$1; shift # case $opt in -# --silent|-s) opt_silent=: ;; +# --silent|-s) opt_silent=: +# args_changed=: +# ;; # # Separate non-argument short options: # -s*) func_split_short_opt "$_G_opt" # set dummy "$func_split_short_opt_name" \ # "-$func_split_short_opt_arg" ${1+"$@"} # shift +# args_changed=: # ;; -# *) set dummy "$_G_opt" "$*"; shift; break ;; +# *) # Make sure the first unrecognised option "$_G_opt" +# # is added back to "$@" in case we need it later, +# # if $args_changed was set to 'true'. +# set dummy "$_G_opt" ${1+"$@"}; shift; break ;; # esac # done # -# func_quote_for_eval ${1+"$@"} -# my_silent_option_result=$func_quote_for_eval_result +# # Only call 'func_quote' here if we processed at least one argument. +# if $args_changed; then +# func_quote eval ${1+"$@"} +# my_silent_option_result=$func_quote_result +# fi # } # func_add_hook func_parse_options my_silent_option # @@ -1613,17 +1804,26 @@ func_run_hooks () # # $opt_silent && $opt_verbose && func_fatal_help "\ # '--silent' and '--verbose' options are mutually exclusive." -# -# func_quote_for_eval ${1+"$@"} -# my_option_validation_result=$func_quote_for_eval_result # } # func_add_hook func_validate_options my_option_validation # -# You'll alse need to manually amend $usage_message to reflect the extra +# You'll also need to manually amend $usage_message to reflect the extra # options you parse. It's preferable to append if you can, so that # multiple option parsing hooks can be added safely. +# func_options_finish [ARG]... +# ---------------------------- +# Finishing the option parse loop (call 'func_options' hooks ATM). +func_options_finish () +{ + $debug_cmd + + func_run_hooks func_options ${1+"$@"} + func_propagate_result func_run_hooks func_options_finish +} + + # func_options [ARG]... # --------------------- # All the functions called inside func_options are hookable. See the @@ -1633,17 +1833,27 @@ func_options () { $debug_cmd - func_options_prep ${1+"$@"} - eval func_parse_options \ - ${func_options_prep_result+"$func_options_prep_result"} - eval func_validate_options \ - ${func_parse_options_result+"$func_parse_options_result"} + _G_options_quoted=false - eval func_run_hooks func_options \ - ${func_validate_options_result+"$func_validate_options_result"} + for my_func in options_prep parse_options validate_options options_finish + do + func_unset func_${my_func}_result + func_unset func_run_hooks_result + eval func_$my_func '${1+"$@"}' + func_propagate_result func_$my_func func_options + if $func_propagate_result_result; then + eval set dummy "$func_options_result"; shift + _G_options_quoted=: + fi + done - # save modified positional parameters for caller - func_options_result=$func_run_hooks_result + $_G_options_quoted || { + # As we (func_options) are top-level options-parser function and + # nobody quoted "$@" for us yet, we need to do it explicitly for + # caller. + func_quote eval ${1+"$@"} + func_options_result=$func_quote_result + } } @@ -1652,9 +1862,8 @@ func_options () # All initialisations required before starting the option parse loop. # Note that when calling hook functions, we pass through the list of # positional parameters. If a hook function modifies that list, and -# needs to propogate that back to rest of this script, then the complete -# modified list must be put in 'func_run_hooks_result' before -# returning. +# needs to propagate that back to rest of this script, then the complete +# modified list must be put in 'func_run_hooks_result' before returning. func_hookable func_options_prep func_options_prep () { @@ -1665,9 +1874,7 @@ func_options_prep () opt_warning_types= func_run_hooks func_options_prep ${1+"$@"} - - # save modified positional parameters for caller - func_options_prep_result=$func_run_hooks_result + func_propagate_result func_run_hooks func_options_prep } @@ -1679,25 +1886,32 @@ func_parse_options () { $debug_cmd - func_parse_options_result= - + _G_parse_options_requote=false # this just eases exit handling while test $# -gt 0; do # Defer to hook functions for initial option parsing, so they # get priority in the event of reusing an option name. func_run_hooks func_parse_options ${1+"$@"} - - # Adjust func_parse_options positional parameters to match - eval set dummy "$func_run_hooks_result"; shift + func_propagate_result func_run_hooks func_parse_options + if $func_propagate_result_result; then + eval set dummy "$func_parse_options_result"; shift + # Even though we may have changed "$@", we passed the "$@" array + # down into the hook and it quoted it for us (because we are in + # this if-branch). No need to quote it again. + _G_parse_options_requote=false + fi # Break out of the loop if we already parsed every option. test $# -gt 0 || break + # We expect that one of the options parsed in this function matches + # and thus we remove _G_opt from "$@" and need to re-quote. + _G_match_parse_options=: _G_opt=$1 shift case $_G_opt in --debug|-x) debug_cmd='set -x' - func_echo "enabling shell trace mode" + func_echo "enabling shell trace mode" >&2 $debug_cmd ;; @@ -1707,7 +1921,10 @@ func_parse_options () ;; --warnings|--warning|-W) - test $# = 0 && func_missing_arg $_G_opt && break + if test $# = 0 && func_missing_arg $_G_opt; then + _G_parse_options_requote=: + break + fi case " $warning_categories $1" in *" $1 "*) # trailing space prevents matching last $1 above @@ -1760,15 +1977,24 @@ func_parse_options () shift ;; - --) break ;; + --) _G_parse_options_requote=: ; break ;; -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; - *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; + *) set dummy "$_G_opt" ${1+"$@"}; shift + _G_match_parse_options=false + break + ;; esac + + if $_G_match_parse_options; then + _G_parse_options_requote=: + fi done - # save modified positional parameters for caller - func_quote_for_eval ${1+"$@"} - func_parse_options_result=$func_quote_for_eval_result + if $_G_parse_options_requote; then + # save modified positional parameters for caller + func_quote eval ${1+"$@"} + func_parse_options_result=$func_quote_result + fi } @@ -1785,12 +2011,10 @@ func_validate_options () test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" func_run_hooks func_validate_options ${1+"$@"} + func_propagate_result func_run_hooks func_validate_options # Bail if the options were screwed! $exit_cmd $EXIT_FAILURE - - # save modified positional parameters for caller - func_validate_options_result=$func_run_hooks_result } @@ -1846,8 +2070,8 @@ func_missing_arg () # func_split_equals STRING # ------------------------ -# Set func_split_equals_lhs and func_split_equals_rhs shell variables after -# splitting STRING at the '=' sign. +# Set func_split_equals_lhs and func_split_equals_rhs shell variables +# after splitting STRING at the '=' sign. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ @@ -1862,8 +2086,9 @@ then func_split_equals_lhs=${1%%=*} func_split_equals_rhs=${1#*=} - test "x$func_split_equals_lhs" = "x$1" \ - && func_split_equals_rhs= + if test "x$func_split_equals_lhs" = "x$1"; then + func_split_equals_rhs= + fi }' else # ...otherwise fall back to using expr, which is often a shell builtin. @@ -1873,7 +2098,7 @@ else func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` func_split_equals_rhs= - test "x$func_split_equals_lhs" = "x$1" \ + test "x$func_split_equals_lhs=" = "x$1" \ || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` } fi #func_split_equals @@ -1899,7 +2124,7 @@ else { $debug_cmd - func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` + func_split_short_opt_name=`expr "x$1" : 'x\(-.\)'` func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` } fi #func_split_short_opt @@ -1941,31 +2166,44 @@ func_usage_message () # func_version # ------------ # Echo version message to standard output and exit. +# The version message is extracted from the calling file's header +# comments, with leading '# ' stripped: +# 1. First display the progname and version +# 2. Followed by the header comment line matching /^# Written by / +# 3. Then a blank line followed by the first following line matching +# /^# Copyright / +# 4. Immediately followed by any lines between the previous matches, +# except lines preceding the intervening completely blank line. +# For example, see the header comments of this file. func_version () { $debug_cmd printf '%s\n' "$progname $scriptversion" $SED -n ' - /(C)/!b go - :more - /\./!{ - N - s|\n# | | - b more - } - :go - /^# Written by /,/# warranty; / { - s|^# || - s|^# *$|| - s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| - p + /^# Written by /!b + s|^# ||; p; n + + :fwd2blnk + /./ { + n + b fwd2blnk } - /^# Written by / { - s|^# || - p + p; n + + :holdwrnt + s|^# || + s|^# *$|| + /^Copyright /!{ + /./H + n + b holdwrnt } - /^warranty; /q' < "$progpath" + + s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| + G + s|\(\n\)\n*|\1|g + p; q' < "$progpath" exit $? } @@ -1975,12 +2213,12 @@ func_version () # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) -# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" +# time-stamp-pattern: "30/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: # Set a version string. -scriptversion='(GNU libtool) 2.4.6' +scriptversion='(GNU libtool) 2.4.7' # func_echo ARG... @@ -2071,7 +2309,7 @@ include the following information: compiler: $LTCC compiler flags: $LTCFLAGS linker: $LD (gnu? $with_gnu_ld) - version: $progname (GNU libtool) 2.4.6 + version: $progname (GNU libtool) 2.4.7 automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` @@ -2127,7 +2365,7 @@ fi # a configuration failure hint, and exit. func_fatal_configuration () { - func__fatal_error ${1+"$@"} \ + func_fatal_error ${1+"$@"} \ "See the $PACKAGE documentation for more information." \ "Fatal configuration error." } @@ -2273,6 +2511,8 @@ libtool_options_prep () nonopt= preserve_args= + _G_rc_lt_options_prep=: + # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) @@ -2296,11 +2536,16 @@ libtool_options_prep () uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; + *) + _G_rc_lt_options_prep=false + ;; esac - # Pass back the list of options. - func_quote_for_eval ${1+"$@"} - libtool_options_prep_result=$func_quote_for_eval_result + if $_G_rc_lt_options_prep; then + # Pass back the list of options. + func_quote eval ${1+"$@"} + libtool_options_prep_result=$func_quote_result + fi } func_add_hook func_options_prep libtool_options_prep @@ -2312,9 +2557,12 @@ libtool_parse_options () { $debug_cmd + _G_rc_lt_parse_options=false + # Perform our own loop to consume as many options as possible in # each iteration. while test $# -gt 0; do + _G_match_lt_parse_options=: _G_opt=$1 shift case $_G_opt in @@ -2389,15 +2637,20 @@ libtool_parse_options () func_append preserve_args " $_G_opt" ;; - # An option not handled by this hook function: - *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; + # An option not handled by this hook function: + *) set dummy "$_G_opt" ${1+"$@"} ; shift + _G_match_lt_parse_options=false + break + ;; esac + $_G_match_lt_parse_options && _G_rc_lt_parse_options=: done - - # save modified positional parameters for caller - func_quote_for_eval ${1+"$@"} - libtool_parse_options_result=$func_quote_for_eval_result + if $_G_rc_lt_parse_options; then + # save modified positional parameters for caller + func_quote eval ${1+"$@"} + libtool_parse_options_result=$func_quote_result + fi } func_add_hook func_parse_options libtool_parse_options @@ -2454,8 +2707,8 @@ libtool_validate_options () } # Pass back the unparsed argument list - func_quote_for_eval ${1+"$@"} - libtool_validate_options_result=$func_quote_for_eval_result + func_quote eval ${1+"$@"} + libtool_validate_options_result=$func_quote_result } func_add_hook func_validate_options libtool_validate_options @@ -3421,8 +3674,8 @@ func_mode_compile () esac done - func_quote_for_eval "$libobj" - test "X$libobj" != "X$func_quote_for_eval_result" \ + func_quote_arg pretty "$libobj" + test "X$libobj" != "X$func_quote_arg_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name '$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" @@ -3495,8 +3748,8 @@ compiler." func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result - func_quote_for_eval "$srcfile" - qsrcfile=$func_quote_for_eval_result + func_quote_arg pretty "$srcfile" + qsrcfile=$func_quote_arg_result # Only build a PIC object if we are building libtool libraries. if test yes = "$build_libtool_libs"; then @@ -3651,7 +3904,8 @@ This mode accepts the following additional options: -prefer-non-pic try to build non-PIC objects only -shared do not build a '.o' file suitable for static linking -static only build a '.o' file suitable for static linking - -Wc,FLAG pass FLAG directly to the compiler + -Wc,FLAG + -Xcompiler FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a 'standard' object file from the given SOURCEFILE. @@ -3757,6 +4011,8 @@ The following components of LINK-COMMAND are treated specially: -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler + -Wa,FLAG + -Xassembler FLAG pass linker-specific FLAG directly to the assembler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) @@ -4099,8 +4355,8 @@ func_mode_install () case $nonopt in *shtool*) :;; *) false;; esac then # Aesthetically quote it. - func_quote_for_eval "$nonopt" - install_prog="$func_quote_for_eval_result " + func_quote_arg pretty "$nonopt" + install_prog="$func_quote_arg_result " arg=$1 shift else @@ -4110,8 +4366,8 @@ func_mode_install () # The real first argument should be the name of the installation program. # Aesthetically quote it. - func_quote_for_eval "$arg" - func_append install_prog "$func_quote_for_eval_result" + func_quote_arg pretty "$arg" + func_append install_prog "$func_quote_arg_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; @@ -4168,12 +4424,12 @@ func_mode_install () esac # Aesthetically quote the argument. - func_quote_for_eval "$arg" - func_append install_prog " $func_quote_for_eval_result" + func_quote_arg pretty "$arg" + func_append install_prog " $func_quote_arg_result" if test -n "$arg2"; then - func_quote_for_eval "$arg2" + func_quote_arg pretty "$arg2" fi - func_append install_shared_prog " $func_quote_for_eval_result" + func_append install_shared_prog " $func_quote_arg_result" done test -z "$install_prog" && \ @@ -4184,8 +4440,8 @@ func_mode_install () if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else - func_quote_for_eval "$install_override_mode" - func_append install_shared_prog " -m $func_quote_for_eval_result" + func_quote_arg pretty "$install_override_mode" + func_append install_shared_prog " -m $func_quote_arg_result" fi fi @@ -4481,8 +4737,8 @@ func_mode_install () relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_quiet || { - func_quote_for_expand "$relink_command" - eval "func_echo $func_quote_for_expand_result" + func_quote_arg expand,pretty "$relink_command" + eval "func_echo $func_quote_arg_result" } if eval "$relink_command"; then : else @@ -5261,7 +5517,8 @@ else if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" - qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` + func_quote_arg pretty "$ECHO" + qECHO=$func_quote_arg_result $ECHO "\ # A function that is used when there is no print builtin or printf. @@ -5271,7 +5528,7 @@ func_fallback_echo () \$1 _LTECHO_EOF' } - ECHO=\"$qECHO\" + ECHO=$qECHO fi # Very basic option parsing. These options are (a) specific to @@ -6614,9 +6871,9 @@ func_mode_link () while test "$#" -gt 0; do arg=$1 shift - func_quote_for_eval "$arg" - qarg=$func_quote_for_eval_unquoted_result - func_append libtool_args " $func_quote_for_eval_result" + func_quote_arg pretty,unquoted "$arg" + qarg=$func_quote_arg_unquoted_result + func_append libtool_args " $func_quote_arg_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then @@ -6852,6 +7109,13 @@ func_mode_link () prev= continue ;; + xassembler) + func_append compiler_flags " -Xassembler $qarg" + prev= + func_append compile_command " -Xassembler $qarg" + func_append finalize_command " -Xassembler $qarg" + continue + ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" @@ -7022,7 +7286,7 @@ func_mode_link () # These systems don't actually have a C library (as such) test X-lc = "X$arg" && continue ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*) # Do not include libc due to us having libc/libc_r. test X-lc = "X$arg" && continue ;; @@ -7042,7 +7306,7 @@ func_mode_link () esac elif test X-lc_r = "X$arg"; then case $host in - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*) # Do not include libc_r directly, use -pthread flag. continue ;; @@ -7072,8 +7336,20 @@ func_mode_link () prev=xcompiler continue ;; - - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ + # Solaris ld rejects as of 11.4. Refer to Oracle bug 22985199. + -pthread) + case $host in + *solaris2*) ;; + *) + case "$new_inherited_linker_flags " in + *" $arg "*) ;; + * ) func_append new_inherited_linker_flags " $arg" ;; + esac + ;; + esac + continue + ;; + -mt|-mthreads|-kthread|-Kthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" @@ -7214,9 +7490,9 @@ func_mode_link () save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs - func_quote_for_eval "$flag" - func_append arg " $func_quote_for_eval_result" - func_append compiler_flags " $func_quote_for_eval_result" + func_quote_arg pretty "$flag" + func_append arg " $func_quote_arg_result" + func_append compiler_flags " $func_quote_arg_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" @@ -7230,16 +7506,21 @@ func_mode_link () save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs - func_quote_for_eval "$flag" - func_append arg " $wl$func_quote_for_eval_result" - func_append compiler_flags " $wl$func_quote_for_eval_result" - func_append linker_flags " $func_quote_for_eval_result" + func_quote_arg pretty "$flag" + func_append arg " $wl$func_quote_arg_result" + func_append compiler_flags " $wl$func_quote_arg_result" + func_append linker_flags " $func_quote_arg_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; + -Xassembler) + prev=xassembler + continue + ;; + -Xcompiler) prev=xcompiler continue @@ -7257,8 +7538,8 @@ func_mode_link () # -msg_* for osf cc -msg_*) - func_quote_for_eval "$arg" - arg=$func_quote_for_eval_result + func_quote_arg pretty "$arg" + arg=$func_quote_arg_result ;; # Flags to be passed through unchanged, with rationale: @@ -7275,12 +7556,17 @@ func_mode_link () # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization + # -specs=* GCC specs files # -stdlib=* select c++ std lib with clang + # -fsanitize=* Clang/GCC memory and address sanitizer + # -fuse-ld=* Linker select flags for GCC + # -Wa,* Pass flags directly to the assembler -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ - -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*) - func_quote_for_eval "$arg" - arg=$func_quote_for_eval_result + -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ + -specs=*|-fsanitize=*|-fuse-ld=*|-Wa,*) + func_quote_arg pretty "$arg" + arg=$func_quote_arg_result func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" @@ -7301,15 +7587,15 @@ func_mode_link () continue else # Otherwise treat like 'Some other compiler flag' below - func_quote_for_eval "$arg" - arg=$func_quote_for_eval_result + func_quote_arg pretty "$arg" + arg=$func_quote_arg_result fi ;; # Some other compiler flag. -* | +*) - func_quote_for_eval "$arg" - arg=$func_quote_for_eval_result + func_quote_arg pretty "$arg" + arg=$func_quote_arg_result ;; *.$objext) @@ -7429,8 +7715,8 @@ func_mode_link () *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. - func_quote_for_eval "$arg" - arg=$func_quote_for_eval_result + func_quote_arg pretty "$arg" + arg=$func_quote_arg_result ;; esac # arg @@ -8639,7 +8925,7 @@ func_mode_link () test CXX = "$tagname" && { case $host_os in linux*) - case `$CC -V 2>&1 | sed 5q` in + case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C++ 5.9 func_suncc_cstd_abi @@ -8812,7 +9098,7 @@ func_mode_link () # case $version_type in # correct linux to gnu/linux during the next big refactor - darwin|freebsd-elf|linux|osf|windows|none) + darwin|freebsd-elf|linux|midnightbsd-elf|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age=$number_minor @@ -8872,7 +9158,6 @@ func_mode_link () # Calculate the version variables. major= versuffix= - versuffix2= verstring= case $version_type in none) ;; @@ -8904,7 +9189,7 @@ func_mode_link () versuffix=.$current.$revision ;; - freebsd-elf) + freebsd-elf | midnightbsd-elf) func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision @@ -8943,7 +9228,6 @@ func_mode_link () func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision - versuffix2=$major.$age ;; osf) @@ -9009,10 +9293,8 @@ func_mode_link () esac if test no = "$need_version"; then versuffix= - versuffix2= else versuffix=.0.0 - versuffix2=.0.0 fi fi @@ -9020,7 +9302,6 @@ func_mode_link () if test yes,no = "$avoid_version,$need_version"; then major= versuffix= - versuffix2= verstring= fi @@ -9134,7 +9415,7 @@ func_mode_link () *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-mirbsd*) + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) @@ -9157,14 +9438,12 @@ func_mode_link () libname_save=$libname release_save=$release versuffix_save=$versuffix - versuffix2_save=$versuffix2 major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release= versuffix= - versuffix2= major= newdeplibs= droppeddeps=no @@ -9441,7 +9720,6 @@ EOF ;; esac versuffix=$versuffix_save - versuffix2=$versuffix2_save major=$major_save release=$release_save libname=$libname_save @@ -9948,8 +10226,8 @@ EOF for cmd in $concat_cmds; do IFS=$save_ifs $opt_quiet || { - func_quote_for_expand "$cmd" - eval "func_echo $func_quote_for_expand_result" + func_quote_arg expand,pretty "$cmd" + eval "func_echo $func_quote_arg_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? @@ -10042,8 +10320,8 @@ EOF eval cmd=\"$cmd\" IFS=$save_ifs $opt_quiet || { - func_quote_for_expand "$cmd" - eval "func_echo $func_quote_for_expand_result" + func_quote_arg expand,pretty "$cmd" + eval "func_echo $func_quote_arg_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? @@ -10517,12 +10795,13 @@ EOF elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else - func_quote_for_eval "$var_value" - relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + func_quote_arg pretty "$var_value" + relink_command="$var=$func_quote_arg_result; export $var; $relink_command" fi done - relink_command="(cd `pwd`; $relink_command)" - relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + func_quote eval cd "`pwd`" + func_quote_arg pretty,unquoted "($func_quote_result; $relink_command)" + relink_command=$func_quote_arg_unquoted_result fi # Only actually do things if not in dry run mode. @@ -10762,13 +11041,15 @@ EOF elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else - func_quote_for_eval "$var_value" - relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + func_quote_arg pretty,unquoted "$var_value" + relink_command="$var=$func_quote_arg_unquoted_result; export $var; $relink_command" fi done # Quote the link command for shipping. - relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" - relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + func_quote eval cd "`pwd`" + relink_command="($func_quote_result; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + func_quote_arg pretty,unquoted "$relink_command" + relink_command=$func_quote_arg_unquoted_result if test yes = "$hardcode_automatic"; then relink_command= fi diff --git a/m4/libtool.m4 b/m4/libtool.m4 index a3bc337b79ad..79a2451ef520 100644 --- a/m4/libtool.m4 +++ b/m4/libtool.m4 @@ -1,6 +1,7 @@ # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # -# Copyright (C) 1996-2001, 2003-2015 Free Software Foundation, Inc. +# Copyright (C) 1996-2001, 2003-2019, 2021-2022 Free Software +# Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives @@ -31,7 +32,7 @@ m4_define([_LT_COPYING], [dnl # along with this program. If not, see <http://www.gnu.org/licenses/>. ]) -# serial 58 LT_INIT +# serial 59 LT_INIT # LT_PREREQ(VERSION) @@ -181,6 +182,7 @@ m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl +m4_require([_LT_DECL_FILECMD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl @@ -219,8 +221,8 @@ esac ofile=libtool can_build_shared=yes -# All known linkers require a '.a' archive for static linking (except MSVC, -# which needs '.lib'). +# All known linkers require a '.a' archive for static linking (except MSVC and +# ICC, which need '.lib'). libext=a with_gnu_ld=$lt_cv_prog_gnu_ld @@ -778,7 +780,7 @@ _LT_EOF # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? - sed '$q' "$ltmain" >> "$cfgfile" \ + $SED '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || @@ -1042,8 +1044,8 @@ int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD - echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD - $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD + echo "$AR $AR_FLAGS libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD + $AR $AR_FLAGS libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF @@ -1067,17 +1069,12 @@ _LT_EOF _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; - darwin*) # darwin 5.x on - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) - _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; - 10.[[012]][[,.]]*) - _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; - 10.*) - _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + darwin*) + case $MACOSX_DEPLOYMENT_TARGET,$host in + 10.[[012]],*|,*powerpc*-darwin[[5-8]]*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + *) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac @@ -1126,12 +1123,12 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES], output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" - _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" - _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" + _LT_TAGVAR(archive_expsym_cmds, $1)="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" + _LT_TAGVAR(module_expsym_cmds, $1)="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" m4_if([$1], [CXX], [ if test yes != "$lt_cv_apple_cc_single_mod"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" - _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" + _LT_TAGVAR(archive_expsym_cmds, $1)="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" fi ],[]) else @@ -1245,7 +1242,8 @@ _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], -[AC_MSG_CHECKING([for sysroot]) +[m4_require([_LT_DECL_SED])dnl +AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@], [Search for dependent libraries within DIR (or the compiler's sysroot @@ -1262,7 +1260,7 @@ case $with_sysroot in #( fi ;; #( /*) - lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + lt_sysroot=`echo "$with_sysroot" | $SED -e "$sed_quote_subst"` ;; #( no|'') ;; #( @@ -1292,7 +1290,7 @@ ia64-*-hpux*) # options accordingly. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.$ac_objext` in + case `$FILECMD conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE=32 ;; @@ -1309,7 +1307,7 @@ ia64-*-hpux*) echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test yes = "$lt_cv_prog_gnu_ld"; then - case `/usr/bin/file conftest.$ac_objext` in + case `$FILECMD conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; @@ -1321,7 +1319,7 @@ ia64-*-hpux*) ;; esac else - case `/usr/bin/file conftest.$ac_objext` in + case `$FILECMD conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; @@ -1343,7 +1341,7 @@ mips64*-*linux*) echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then emul=elf - case `/usr/bin/file conftest.$ac_objext` in + case `$FILECMD conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; @@ -1351,7 +1349,7 @@ mips64*-*linux*) emul="${emul}64" ;; esac - case `/usr/bin/file conftest.$ac_objext` in + case `$FILECMD conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; @@ -1359,7 +1357,7 @@ mips64*-*linux*) emul="${emul}ltsmip" ;; esac - case `/usr/bin/file conftest.$ac_objext` in + case `$FILECMD conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; @@ -1379,14 +1377,14 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # not appear in the list. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in + case `$FILECMD conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) - case `/usr/bin/file conftest.o` in + case `$FILECMD conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; @@ -1454,7 +1452,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # options accordingly. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in + case `$FILECMD conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) @@ -1493,9 +1491,22 @@ need_locks=$enable_libtool_lock m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} -: ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) -_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) + +# Use ARFLAGS variable as AR's operation code to sync the variable naming with +# Automake. If both AR_FLAGS and ARFLAGS are specified, AR_FLAGS should have +# higher priority because thats what people were doing historically (setting +# ARFLAGS for automake and AR_FLAGS for libtool). FIXME: Make the AR_FLAGS +# variable obsoleted/removed. + +test ${AR_FLAGS+y} || AR_FLAGS=${ARFLAGS-cr} +lt_ar_flags=$AR_FLAGS +_LT_DECL([], [lt_ar_flags], [0], [Flags to create an archive (by configure)]) + +# Make AR_FLAGS overridable by 'make ARFLAGS='. Don't try to run-time override +# by AR_FLAGS because that was never working and AR_FLAGS is about to die. +_LT_DECL([], [AR_FLAGS], [\@S|@{ARFLAGS-"\@S|@lt_ar_flags"}], + [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no @@ -1714,7 +1725,7 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl lt_cv_sys_max_cmd_len=8192; ;; - bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) + bitrig* | darwin* | dragonfly* | freebsd* | midnightbsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` @@ -1757,7 +1768,7 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` + lt_cv_sys_max_cmd_len=`echo $kargmax | $SED 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi @@ -2207,26 +2218,35 @@ m4_defun([_LT_CMD_STRIPLIB], striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) -if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - AC_MSG_RESULT([yes]) +if test -z "$STRIP"; then + AC_MSG_RESULT([no]) else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP"; then + if $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + old_striplib="$STRIP --strip-debug" + striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) + else + case $host_os in + darwin*) + # FIXME - insert some real tests, host_os isn't really good enough striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) - else + ;; + freebsd*) + if $STRIP -V 2>&1 | $GREP "elftoolchain" >/dev/null; then + old_striplib="$STRIP --strip-debug" + striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + ;; + *) AC_MSG_RESULT([no]) - fi - ;; - *) - AC_MSG_RESULT([no]) - ;; - esac + ;; + esac + fi fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) @@ -2549,7 +2569,7 @@ cygwin* | mingw* | pw32* | cegcc*) case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' + soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; @@ -2559,14 +2579,14 @@ m4_if([$1], [],[ ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' + library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; - *,cl*) - # Native MSVC + *,cl* | *,icl*) + # Native MSVC or ICC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' @@ -2585,7 +2605,7 @@ m4_if([$1], [],[ done IFS=$lt_save_ifs # Convert to MSYS style. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form @@ -2622,7 +2642,7 @@ m4_if([$1], [],[ ;; *) - # Assume MSVC wrapper + # Assume MSVC and ICC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; @@ -2655,7 +2675,7 @@ dgux*) shlibpath_var=LD_LIBRARY_PATH ;; -freebsd* | dragonfly*) +freebsd* | dragonfly* | midnightbsd*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then @@ -3454,7 +3474,7 @@ beos*) bsdi[[45]]*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_cmd='$FILECMD -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; @@ -3488,14 +3508,14 @@ darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; -freebsd* | dragonfly*) +freebsd* | dragonfly* | midnightbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_cmd=$FILECMD lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac @@ -3509,7 +3529,7 @@ haiku*) ;; hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_cmd=$FILECMD case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' @@ -3556,7 +3576,7 @@ netbsd*) newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_cmd=$FILECMD lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; @@ -3683,13 +3703,13 @@ else mingw*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac - case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in + case `"$tmp_nm" -B $lt_bad_file 2>&1 | $SED '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + case `"$tmp_nm" -p /dev/null 2>&1 | $SED '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 @@ -3715,7 +3735,7 @@ else # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) - case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in + case `$DUMPBIN -symbols -headers /dev/null 2>&1 | $SED '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; @@ -3955,7 +3975,7 @@ esac if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Gets list of data symbols to import. - lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" + lt_cv_sys_global_symbol_to_import="$SED -n -e 's/^I .* \(.*\)$/\1/p'" # Adjust the below global symbol transforms to fixup imported variables. lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" @@ -3973,20 +3993,20 @@ fi # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n"\ +lt_cv_sys_global_symbol_to_cdecl="$SED -n"\ $lt_cdecl_hook\ " -e 's/^T .* \(.*\)$/extern int \1();/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ +lt_cv_sys_global_symbol_to_c_name_address="$SED -n"\ $lt_c_name_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" # Transform an extracted symbol line into symbol name with lib prefix and # symbol address. -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="$SED -n"\ $lt_c_name_lib_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ @@ -4010,7 +4030,7 @@ for ac_symprfx in "" "_"; do if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function, # D for any global variable and I for any imported variable. - # Also find C++ and __fastcall symbols from MSVC++, + # Also find C++ and __fastcall symbols from MSVC++ or ICC, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ @@ -4028,9 +4048,9 @@ for ac_symprfx in "" "_"; do " s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + lt_cv_sys_global_symbol_pipe="$SED -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi - lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | $SED '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no @@ -4317,7 +4337,7 @@ m4_if([$1], [CXX], [ ;; esac ;; - freebsd* | dragonfly*) + freebsd* | dragonfly* | midnightbsd*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) @@ -4400,7 +4420,7 @@ m4_if([$1], [CXX], [ _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) - case `$CC -V 2>&1 | sed 5q` in + case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' @@ -4736,7 +4756,7 @@ m4_if([$1], [CXX], [ _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) - case `$CC -V 2>&1 | sed 5q` in + case `$CC -V 2>&1 | $SED 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' @@ -4919,7 +4939,7 @@ m4_if([$1], [CXX], [ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else - _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi ;; pw32*) @@ -4927,7 +4947,7 @@ m4_if([$1], [CXX], [ ;; cygwin* | mingw* | cegcc*) case $cc_basename in - cl*) + cl* | icl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) @@ -4984,15 +5004,15 @@ dnl Note also adjust exclude_expsyms for C++ above. case $host_os in cygwin* | mingw* | pw32* | cegcc*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time + # FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. + # Microsoft Visual C++ or Intel C++ Compiler. if test yes != "$GCC"; then with_gnu_ld=no fi ;; interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) + # we just hope/assume this is gcc and not c89 (= MSVC++ or ICC) with_gnu_ld=yes ;; openbsd* | bitrig*) @@ -5044,7 +5064,7 @@ dnl Note also adjust exclude_expsyms for C++ above. _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no - case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in + case `$LD -v | $SED -e 's/([[^)]]\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... @@ -5156,6 +5176,7 @@ _LT_EOF emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' ;; interix[[3-9]]*) @@ -5170,7 +5191,7 @@ _LT_EOF # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) @@ -5213,7 +5234,7 @@ _LT_EOF _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac - case `$CC -V 2>&1 | sed 5q` in + case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes @@ -5225,7 +5246,7 @@ _LT_EOF if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi @@ -5241,7 +5262,7 @@ _LT_EOF _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi @@ -5373,7 +5394,7 @@ _LT_EOF if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else - _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no @@ -5556,12 +5577,12 @@ _LT_EOF cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. + # Microsoft Visual C++ or Intel C++ Compiler. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in - cl*) - # Native MSVC + cl* | icl*) + # Native MSVC or ICC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes @@ -5602,7 +5623,7 @@ _LT_EOF fi' ;; *) - # Assume MSVC wrapper + # Assume MSVC and ICC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. @@ -5650,7 +5671,7 @@ _LT_EOF ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) + freebsd* | dragonfly* | midnightbsd*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes @@ -5861,6 +5882,7 @@ _LT_EOF emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' ;; osf3*) @@ -6631,8 +6653,8 @@ if test yes != "$_lt_caught_CXX_error"; then cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in - ,cl* | no,cl*) - # Native MSVC + ,cl* | no,cl* | ,icl* | no,icl*) + # Native MSVC or ICC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' @@ -6730,6 +6752,7 @@ if test yes != "$_lt_caught_CXX_error"; then emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' ;; dgux*) @@ -6760,7 +6783,7 @@ if test yes != "$_lt_caught_CXX_error"; then _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; - freebsd* | dragonfly*) + freebsd* | dragonfly* | midnightbsd*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes @@ -6897,7 +6920,7 @@ if test yes != "$_lt_caught_CXX_error"; then # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in @@ -7037,13 +7060,13 @@ if test yes != "$_lt_caught_CXX_error"; then _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi ;; *) - case `$CC -V 2>&1 | sed 5q` in + case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' @@ -8189,6 +8212,14 @@ _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) +# _LT_DECL_FILECMD +# ---------------- +# Check for a file(cmd) program that can be used to detect file type and magic +m4_defun([_LT_DECL_FILECMD], +[AC_CHECK_TOOL([FILECMD], [file], [:]) +_LT_DECL([], [FILECMD], [1], [A file(cmd) program that detects file types]) +])# _LD_DECL_FILECMD + # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates diff --git a/m4/ltoptions.m4 b/m4/ltoptions.m4 index 94b082976667..b0b5e9c21260 100644 --- a/m4/ltoptions.m4 +++ b/m4/ltoptions.m4 @@ -1,7 +1,7 @@ # Helper functions for option handling. -*- Autoconf -*- # -# Copyright (C) 2004-2005, 2007-2009, 2011-2015 Free Software -# Foundation, Inc. +# Copyright (C) 2004-2005, 2007-2009, 2011-2019, 2021-2022 Free +# Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives diff --git a/m4/ltsugar.m4 b/m4/ltsugar.m4 index 48bc9344a4d6..902508bd93ae 100644 --- a/m4/ltsugar.m4 +++ b/m4/ltsugar.m4 @@ -1,6 +1,6 @@ # ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # -# Copyright (C) 2004-2005, 2007-2008, 2011-2015 Free Software +# Copyright (C) 2004-2005, 2007-2008, 2011-2019, 2021-2022 Free Software # Foundation, Inc. # Written by Gary V. Vaughan, 2004 # diff --git a/m4/ltversion.m4 b/m4/ltversion.m4 index fa04b52a3bf8..b155d0aceca3 100644 --- a/m4/ltversion.m4 +++ b/m4/ltversion.m4 @@ -1,6 +1,7 @@ # ltversion.m4 -- version numbers -*- Autoconf -*- # -# Copyright (C) 2004, 2011-2015 Free Software Foundation, Inc. +# Copyright (C) 2004, 2011-2019, 2021-2022 Free Software Foundation, +# Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives @@ -9,15 +10,15 @@ # @configure_input@ -# serial 4179 ltversion.m4 +# serial 4245 ltversion.m4 # This file is part of GNU Libtool -m4_define([LT_PACKAGE_VERSION], [2.4.6]) -m4_define([LT_PACKAGE_REVISION], [2.4.6]) +m4_define([LT_PACKAGE_VERSION], [2.4.7]) +m4_define([LT_PACKAGE_REVISION], [2.4.7]) AC_DEFUN([LTVERSION_VERSION], -[macro_version='2.4.6' -macro_revision='2.4.6' +[macro_version='2.4.7' +macro_revision='2.4.7' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) diff --git a/m4/lt~obsolete.m4 b/m4/lt~obsolete.m4 index c6b26f88f6c3..0f7a8759da8d 100644 --- a/m4/lt~obsolete.m4 +++ b/m4/lt~obsolete.m4 @@ -1,7 +1,7 @@ # lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # -# Copyright (C) 2004-2005, 2007, 2009, 2011-2015 Free Software -# Foundation, Inc. +# Copyright (C) 2004-2005, 2007, 2009, 2011-2019, 2021-2022 Free +# Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives diff --git a/magic/Magdir/acorn b/magic/Magdir/acorn index 37a4ed79e56e..427f8159d11e 100644 --- a/magic/Magdir/acorn +++ b/magic/Magdir/acorn @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: acorn,v 1.8 2021/04/26 15:56:00 christos Exp $ +# $File: acorn,v 1.9 2024/08/30 17:29:28 christos Exp $ # acorn: file(1) magic for files found on Acorn systems # @@ -67,36 +67,3 @@ >>8 byte x version %d, >>10 leshort =1 1 pattern >>10 leshort !1 %d patterns - -# From: Joerg Jenderek -# URL: https://www.kyzer.me.uk/pack/xad/#PackDir -# reference: https://www.kyzer.me.uk/pack/xad/xad_PackDir.lha/PackDir.c -# GRR: line below is too general as it matches also "Git pack" in ./revision -0 string PACK\0 -# check for valid compression method 0-4 ->5 ulelong <5 -# https://www.riscosopen.org/wiki/documentation/show/Introduction%20To%20Filing%20Systems -# To skip "Git pack" version 0 test for root directory object like -# ADFS::RPC.$.websitezip.FONTFIX ->>9 string >ADFS\ PackDir archive (RISC OS) -# TrID labels above as "Acorn PackDir compressed Archive" -# compression mode y (0 - 4) for GIF LZW with a maximum n bits -# (y~n,0~12,1~13,2~14,3~15,4~16) ->>>5 ulelong+12 x \b, LZW %u-bits compression -# https://www.filebase.org.uk/filetypes -# !Packdir compressed archive has three hexadecimal digits code 68E -!:mime application/x-acorn-68E -!:ext pkd/bin -# null terminated root directory object like IDEFS::IDE-4.$.Apps.GRAPHICS.!XFMPdemo ->>>9 string x \b, root "%s" -# load address 0xFFFtttdd, ttt is the object filetype and dddddddddd is time ->>>>&1 ulelong x \b, load address %#x -# execution address 0xdddddddd dddddddddd is 40 bit unsigned centiseconds since 1.1.1900 UTC ->>>>&5 ulelong x \b, exec address %#x -# attributes (bits: 0~owner read,1~owner write,3~no delete,4~public read,5~public write) ->>>>&9 ulelong x \b, attributes %#x -# number of entries in this directory. for root dir 0 -#>>>&13 ulelong x \b, entries %#x -# the entries start here with object name ->>>>&17 string x \b, 1st object "%s" - diff --git a/magic/Magdir/adventure b/magic/Magdir/adventure index bd7f863be28b..fdf60a3f1128 100644 --- a/magic/Magdir/adventure +++ b/magic/Magdir/adventure @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: adventure,v 1.18 2019/04/19 00:42:27 christos Exp $ +# $File: adventure,v 1.19 2023/12/02 13:48:56 christos Exp $ # adventure: file(1) magic for Adventure game files # # from Allen Garvin <earendil@faeryland.tamu-commerce.edu> @@ -10,6 +10,8 @@ # ALAN # I assume there are other, lower versions, but these are the only ones I # saw in the archive. +# +# FIXME: Conflicts with Microsoft x.out big-endian and PDP-11 binaries (./xenix) 0 beshort 0x0206 ALAN game data >2 byte <10 version 2.6%d diff --git a/magic/Magdir/algol68 b/magic/Magdir/algol68 index 1ca1fad2113c..81086dd5e82c 100644 --- a/magic/Magdir/algol68 +++ b/magic/Magdir/algol68 @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: algol68,v 1.6 2022/11/06 18:36:55 christos Exp $ +# $File: algol68,v 1.7 2024/08/27 18:50:56 christos Exp $ # algol68: file(1) magic for Algol 68 source # # URL: https://en.wikipedia.org/wiki/ALGOL_68 @@ -13,8 +13,6 @@ >0 use algol_68 0 regex/1024 \bMODE[\t\ ] >0 use algol_68 -0 regex/1024 \bMODE[\t\ ] ->0 use algol_68 0 regex/1024 \bREF[\t\ ] >0 use algol_68 0 regex/1024 \bFLEX[\t\ ]\*\\[ diff --git a/magic/Magdir/android b/magic/Magdir/android index 8a2dedf3d2d9..c081ebc72635 100644 --- a/magic/Magdir/android +++ b/magic/Magdir/android @@ -1,6 +1,6 @@ #------------------------------------------------------------ -# $File: android,v 1.24 2023/02/20 16:51:59 christos Exp $ +# $File: android,v 1.26 2024/09/04 19:06:11 christos Exp $ # Various android related magic entries #------------------------------------------------------------ @@ -9,11 +9,11 @@ # Fixed to avoid regexec 17 errors on some dex files # From <diff@lookout.com> "Tim Strazzere" 0 string dex\n ->0 regex dex\n[0-9]{2}\0 Dalvik dex file ->4 string >000 version %s +>0 regex dex\n[0-9]{2} Dalvik dex file +>>4 string >000 version %s 0 string dey\n ->0 regex dey\n[0-9]{2}\0 Dalvik dex file (optimized for host) ->4 string >000 version %s +>0 regex dey\n[0-9]{2} Dalvik dex file (optimized for host) +>>4 string >000 version %s # Android bootimg format # From https://android.googlesource.com/\ @@ -223,7 +223,7 @@ # +/refs/heads/androidx-main/profileinstaller/profileinstaller/\ # src/main/java/androidx/profileinstaller/ProfileVersion.java 0 string pro\x00 ->0 regex pro\x000[0-9][0-9]\x00 Android ART profile +>4 regex 0[0-9][0-9] Android ART profile !:ext prof >>4 string 001\x00 \b, version 001 N >>4 string 005\x00 \b, version 005 O @@ -231,7 +231,7 @@ >>4 string 010\x00 \b, version 010 P >>4 string 015\x00 \b, version 015 S 0 string prm\x00 ->0 regex prm\x000[0-9][0-9]\x00 Android ART profile metadata +>0 regex 0[0-9][0-9] Android ART profile metadata !:ext profm >>4 string 001\x00 \b, version 001 N >>4 string 002\x00 \b, version 002 diff --git a/magic/Magdir/animation b/magic/Magdir/animation index aab93ca34a6f..0df435290a3a 100644 --- a/magic/Magdir/animation +++ b/magic/Magdir/animation @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: animation,v 1.94 2023/06/16 20:06:50 christos Exp $ +# $File: animation,v 1.98 2024/09/01 15:51:51 christos Exp $ # animation: file(1) magic for animation/movie formats # # animation formats @@ -542,36 +542,36 @@ >>2 byte&0xF0 !0xF0 MPEG ADTS, layer III, v1 !:strength +20 !:mime audio/mpeg ->2 byte&0xF0 0x10 \b, 32 kbps ->2 byte&0xF0 0x20 \b, 40 kbps ->2 byte&0xF0 0x30 \b, 48 kbps ->2 byte&0xF0 0x40 \b, 56 kbps ->2 byte&0xF0 0x50 \b, 64 kbps ->2 byte&0xF0 0x60 \b, 80 kbps ->2 byte&0xF0 0x70 \b, 96 kbps ->2 byte&0xF0 0x80 \b, 112 kbps ->2 byte&0xF0 0x90 \b, 128 kbps ->2 byte&0xF0 0xA0 \b, 160 kbps ->2 byte&0xF0 0xB0 \b, 192 kbps ->2 byte&0xF0 0xC0 \b, 224 kbps ->2 byte&0xF0 0xD0 \b, 256 kbps ->2 byte&0xF0 0xE0 \b, 320 kbps +>>>2 byte&0xF0 0x10 \b, 32 kbps +>>>2 byte&0xF0 0x20 \b, 40 kbps +>>>2 byte&0xF0 0x30 \b, 48 kbps +>>>2 byte&0xF0 0x40 \b, 56 kbps +>>>2 byte&0xF0 0x50 \b, 64 kbps +>>>2 byte&0xF0 0x60 \b, 80 kbps +>>>2 byte&0xF0 0x70 \b, 96 kbps +>>>2 byte&0xF0 0x80 \b, 112 kbps +>>>2 byte&0xF0 0x90 \b, 128 kbps +>>>2 byte&0xF0 0xA0 \b, 160 kbps +>>>2 byte&0xF0 0xB0 \b, 192 kbps +>>>2 byte&0xF0 0xC0 \b, 224 kbps +>>>2 byte&0xF0 0xD0 \b, 256 kbps +>>>2 byte&0xF0 0xE0 \b, 320 kbps # timing ->2 byte&0x0C 0x00 \b, 44.1 kHz ->2 byte&0x0C 0x04 \b, 48 kHz ->2 byte&0x0C 0x08 \b, 32 kHz +>>>2 byte&0x0C 0x00 \b, 44.1 kHz +>>>2 byte&0x0C 0x04 \b, 48 kHz +>>>2 byte&0x0C 0x08 \b, 32 kHz # channels/options ->3 byte&0xC0 0x00 \b, Stereo ->3 byte&0xC0 0x40 \b, JntStereo ->3 byte&0xC0 0x80 \b, 2x Monaural ->3 byte&0xC0 0xC0 \b, Monaural -#>1 byte ^0x01 \b, Data Verify -#>2 byte &0x02 \b, Packet Pad -#>2 byte &0x01 \b, Custom Flag -#>3 byte &0x08 \b, Copyrighted -#>3 byte &0x04 \b, Original Source -#>3 byte&0x03 1 \b, NR: 50/15 ms -#>3 byte&0x03 3 \b, NR: CCIT J.17 +>>>3 byte&0xC0 0x00 \b, Stereo +>>>3 byte&0xC0 0x40 \b, JntStereo +>>>3 byte&0xC0 0x80 \b, 2x Monaural +>>>3 byte&0xC0 0xC0 \b, Monaural +#>>>1 byte ^0x01 \b, Data Verify +#>>>2 byte &0x02 \b, Packet Pad +#>>>2 byte &0x01 \b, Custom Flag +#>>>3 byte &0x08 \b, Copyrighted +#>>>3 byte &0x04 \b, Original Source +#>>>3 byte&0x03 1 \b, NR: 50/15 ms +#>>>3 byte&0x03 3 \b, NR: CCIT J.17 # MP2, M1A 0 beshort&0xFFFE 0xFFFC MPEG ADTS, layer II, v1 @@ -855,7 +855,7 @@ # Live MPEG-4 audio streams (instead of RTP FlexMux) 0 beshort&0xFFE0 0x56E0 MPEG-4 LOAS !:mime audio/x-mp4a-latm -#>1 beshort&0x1FFF x \b, %hu byte packet +#>1 beshort&0x1FFF x \b, %u byte packet >3 byte&0xE0 0x40 >>4 byte&0x3C 0x04 \b, single stream >>4 byte&0x3C 0x08 \b, 2 streams @@ -927,15 +927,12 @@ # # from Oskar Schirmer <schirmer@scara.com> Feb 3, 2001 (ISO 13818.1) # syncbyte 8 bit 0x47 -# error_ind 1 bit - -# payload_start 1 bit 1 -# priority 1 bit - -# PID 13 bit 0x0000 -# scrambling 2 bit - -# adaptfld_ctrl 2 bit 1 or 3 -# conti_count 4 bit - -0 belong&0xFF5FFF10 0x47400010 ->188 byte 0x47 MPEG transport stream data +# 188 bytes per packet +0 byte 0x47 +>188 byte 0x47 +>>376 byte 0x47 +>>>564 byte 0x47 +>>>>752 byte 0x47 MPEG transport stream data !:mime video/MP2T !:ext ts @@ -943,8 +940,11 @@ # From: Alexandre Iooss <erdnaxe@crans.org> # URL: https://en.wikipedia.org/wiki/MPEG_transport_stream # Note: similar to ISO 13818.1 but with 4 extra bytes per packets -4 belong&0xFF5FFF10 =0x47400010 ->196 byte =0x47 BDAV MPEG-2 Transport Stream (M2TS) +4 byte 0x47 +>196 byte 0x47 +>>388 byte 0x47 +>>>580 byte 0x47 +>>>>772 byte 0x47 BDAV MPEG-2 Transport Stream (M2TS) !:mime video/MP2T !:ext m2ts/mts @@ -1204,3 +1204,47 @@ >12 leshort x \b, %d >14 leshort x \bx%d >24 lelong >0 \b, %d frames + + +# libplacebo cache file +# https://libplacebo.org +0 string pl_cache libplacebo cache +>8 ulelong x \b, version %u +>12 ulelong =0 \b, empty +>12 ulelong =1 \b, 1 entry +>12 ulelong >1 \b, %u entries + +>4 byte 1 \b, version 3.00.00 +>4 byte 2 \b, version 3.03.00 +>4 byte 3 \b, version 4.00.00 +>4 byte 4 \b, version 4.02.00 +>4 byte 5 \b, version 5.00.00 + +# live2d: file(1) magic for Live2D Cubism file formats +# https://www.live2d.com/en/ +0 string/4 MOC3 Live2D Cubism MOC3 +>4 byte 0 \b, SDK version invalid/unknown (%d) +>4 byte 1 \b, SDK version 3.0.00 - 3.2.07 (%d) +>4 byte 2 \b, SDK version 3.3.00 - 3.3.03 (%d) +>4 byte 3 \b, SDK version 4.0.00 - 4.1.05 (%d) +>4 byte 4 \b, SDK version 4.2.00 - 4.2.02 (%d) +>4 byte 5 \b, SDK version 5.0.00 (%d) +>4 byte >5 \b, SDK version unknown (%d) +>5 byte 0 \b, little endian +>5 byte >0 \b, big endian +!:mime application/x-moc3-data +!:ext moc3 + +0 string/4 CAFF Live2D Cubism archive +>4 ubyte x version %d +>&0 ubyte x \b.%d +>&1 ubyte x \b.%d +>7 string/4 =---- \b, standard format +>7 string/4 !---- \b, unknown format (%.4s) +>11 ubyte x version %d +>&0 ubyte x \b.%d +>&1 ubyte x \b.%d +>14 belong =0 \b, no obfuscation +>14 belong !0 \b, XOR obfuscation key %d +!:mime application/x-cubism-archive +!:ext cmo3/can3 diff --git a/magic/Magdir/apple b/magic/Magdir/apple index 547b0ac20aba..72e665f43625 100644 --- a/magic/Magdir/apple +++ b/magic/Magdir/apple @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: apple,v 1.48 2023/05/01 14:20:21 christos Exp $ +# $File: apple,v 1.51 2024/09/04 19:06:12 christos Exp $ # apple: file(1) magic for Apple file formats # 0 search/1/t FiLeStArTfIlEsTaRt binscii (apple ][) text @@ -17,8 +17,13 @@ # Ref: https://applesaucefdc.com/a2r/ 0 string A2R >3 string \x31\xFF\x0A\x0D\x0A Applesauce A2R 1.x Disk Image +>>0 use applesauce >3 string \x32\xFF\x0A\x0D\x0A Applesauce A2R 2.x Disk Image +>>0 use applesauce >3 string \x33\xFF\x0A\x0D\x0A Applesauce A2R 3.x Disk Image +>>0 use applesauce + +0 name applesauce >8 string INFO >>49 byte 01 \b, 5.25″ SS 40trk >>49 byte 02 \b, 3.5″ DS 80trk @@ -36,7 +41,11 @@ # Ref: https://applesaucefdc.com/woz/reference2/ 0 string WOZ >3 string \x31\xFF\x0A\x0D\x0A Apple ][ WOZ 1.0 Disk Image +>>0 use applewoz >3 string \x32\xFF\x0A\x0D\x0A Apple ][ WOZ 2.0 Disk Image +>>0 use applewoz + +0 name applewoz >12 string INFO >>21 byte 01 \b, 5.25 inch >>21 byte 02 \b, 3.5 inch @@ -49,13 +58,13 @@ # Ref: https://applesaucefdc.com/moof-reference/ 0 string MOOF >4 string \xFF\x0A\x0D\x0A Apple Macintosh MOOF Disk Image ->12 string INFO ->>21 byte 01 \b, SSDD GCR (400K) ->>21 byte 02 \b, DSDD GCR (800K) ->>21 byte 03 \b, DSHD MFM (1.44M) ->>22 byte 01 \b, write protected ->>23 byte 01 \b, cross track synchronized ->>25 string/T x \b, %.32s +>>12 string INFO +>>>21 byte 01 \b, SSDD GCR (400K) +>>>21 byte 02 \b, DSDD GCR (800K) +>>>21 byte 03 \b, DSHD MFM (1.44M) +>>>22 byte 01 \b, write protected +>>>23 byte 01 \b, cross track synchronized +>>>25 string/T x \b, %.32s # Type: Apple Emulator disk images # From: Greg Wildman <greg@apple2.org.za> @@ -192,11 +201,9 @@ # Ref: https://github.com/peterferrie/qboot 0 string \x01\x4A\xA8\x69\x0F\x85\x27\xC9 >8 string \x12\xF0\x10\xE6\x3D\x86\xDA\x8A Apple ][ QBoot Image - # Type: Peter Ferrie 0Boot # From: Greg Wildman <greg@apple2.org.za> # Ref: https://github.com/peterferrie/0boot -0 string \x01\x4A\xA8\x69\x0F\x85\x27\xC9 >8 string \x12\xF0\x10\xE6\x3D\x86\xDA\x8A Apple ][ 0Boot Image # Different proprietary boot sectors @@ -438,22 +445,22 @@ # object is the first object (true for CoreFoundation implementation). # From: David Remahl <dremahl@apple.com> 0 string bplist ->6 byte x \bCoreFoundation binary property list data, version %#c +>6 byte x CoreFoundation binary property list data, version %#c >>7 byte x \b%c ->6 string 00 \b ->>8 byte&0xF0 0x00 \b ->>>8 byte&0x0F 0x00 \b, root type: null ->>>8 byte&0x0F 0x08 \b, root type: false boolean ->>>8 byte&0x0F 0x09 \b, root type: true boolean ->>8 byte&0xF0 0x10 \b, root type: integer ->>8 byte&0xF0 0x20 \b, root type: real ->>8 byte&0xF0 0x30 \b, root type: date ->>8 byte&0xF0 0x40 \b, root type: data ->>8 byte&0xF0 0x50 \b, root type: ascii string ->>8 byte&0xF0 0x60 \b, root type: unicode string ->>8 byte&0xF0 0x80 \b, root type: uid (CORRUPT) ->>8 byte&0xF0 0xa0 \b, root type: array ->>8 byte&0xF0 0xd0 \b, root type: dictionary +>>6 string 00 \b +>>>8 byte&0xF0 0x00 \b +>>>>8 byte&0x0F 0x00 \b, root type: null +>>>>8 byte&0x0F 0x08 \b, root type: false boolean +>>>>8 byte&0x0F 0x09 \b, root type: true boolean +>>>8 byte&0xF0 0x10 \b, root type: integer +>>>8 byte&0xF0 0x20 \b, root type: real +>>>8 byte&0xF0 0x30 \b, root type: date +>>>8 byte&0xF0 0x40 \b, root type: data +>>>8 byte&0xF0 0x50 \b, root type: ascii string +>>>8 byte&0xF0 0x60 \b, root type: unicode string +>>>8 byte&0xF0 0x80 \b, root type: uid (CORRUPT) +>>>8 byte&0xF0 0xa0 \b, root type: array +>>>8 byte&0xF0 0xd0 \b, root type: dictionary # Apple/NeXT typedstream data # Serialization format used by NeXT and Apple for various @@ -478,7 +485,6 @@ # 0 string caff CoreAudio Format audio file >4 beshort <10 version %d ->6 beshort x #------------------------------------------------------------------------------ diff --git a/magic/Magdir/archive b/magic/Magdir/archive index 6e1f9678e7ac..b920f9930f41 100644 --- a/magic/Magdir/archive +++ b/magic/Magdir/archive @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------ -# $File: archive,v 1.193 2023/07/27 17:55:58 christos Exp $ +# $File: archive,v 1.207 2024/11/27 15:37:46 christos Exp $ # archive: file(1) magic for archive formats (see also "msdos" for self- # extracting compressed archives) # @@ -25,6 +25,11 @@ >>>>>>155 ubyte&0xDF =0 # space or ascii digit 0 at start of check sum >>>>>>>148 ubyte&0xEF =0x20 +# check for specific 1st member name that indicates other mime type and file name suffix +>>>>>>>>0 string TpmEmuTpms/permall +# maybe also look for 2nd tar member efi/nvram containing UEFI variables part +#>>>>>>>>>512 search/0x1800 efi/nvram\0 EFI_PART_FOUND +>>>>>>>>>0 use tar-nvram # FOR DEBUGGING: #>>>>>>>>0 regex \^[0-9]{2,4}[.](png|jpg|jpeg|tif|tiff|gif|bmp) NAME "%s" # check for 1st image main name with digits used for sorting @@ -34,9 +39,35 @@ # check for 1st member name with ovf suffix >>>>>>>>0 regex \^.{1,96}[.](ovf) >>>>>>>>>0 use tar-ova -# if 1st member name without digits and without used image suffix and without *.ovf then it is a TAR archive +# look for relative directory ./var/ or ./lte/ as 1st member name that indicates AVM firmware with other file name suffix +>>>>>>>>0 ubequad&0xFFffE5eaE8ffFFff 0x2e2f6460602f0000 +>>>>>>>>>0 use tar-avm +# maybe look for AVM specific 2nd name entry +# >>>>>>>>>517 string /content\0 content~ +# >>>>>>>>>>0 use tar-avm +# >>>>>>>>>517 string /install\0 install~ +# >>>>>>>>>>0 use tar-avm +# >>>>>>>>>517 string /chksum\0 chksum~ +# >>>>>>>>>>0 use tar-avm +# >>>>>>>>>517 string /modfw.nfo\0 modfw~ +# >>>>>>>>>>0 use tar-avm +# most (419/429) *.WBM (71/71) *.WBT with user name jcameron of Webmin developer Jamie Cameron in first tar archive member +>>>>>>>>265 string jcameron +>>>>>>>>>0 use tar-webmin +# if 1st member name without digits and without used image suffix, without *.ovf, +# ./var/ , ./lte/ and TpmEmuTpms/ then it is a pure TAR archive or Webmin without jcameron user name >>>>>>>>0 default x ->>>>>>>>>0 use tar-file +# few (10/429) *.WBM without user name jcameron in 1st tar member but with WBM module.info name like: +# apcupsd-0.81-2.wbm csavupdate.wbm cwmail.wbm dac960.wbm etcupdate.wbm logviewer.wbm memcached.wbm rinetd.wbm shoutcast.wbm vacationadmin-webmin-module-1.1.2.wbm +# few (10/95) *.WBT without user name jcameron in 1st tar member but with WBT theme.info name like: +# authentic-theme-21.09.5.wbt Mozilla-Modern.wbt virtual-server-theme-2.7.wbt fkn-webmintheme.0.6.0.wbt +>>>>>>>>>512 search/210965/s e.info\0 +>>>>>>>>>>0 use tar-webmin +# pure TAR +>>>>>>>>>0 default x +>>>>>>>>>>0 use tar-file +# Note: called "TAR - Tape ARchive" by TrID, "Tape Archive Format" by DROID via PUID x-fmt/265 +# and "Tar archive" by shared MIME-info database from freedesktop.org # minimal check and then display tar archive information which can also be # embedded inside others like Android Backup, Clam AntiVirus database 0 name tar-file @@ -86,7 +117,11 @@ >>261 default x tar archive (unknown ustar) !:mime application/x-ustar !:ext tar/ustar -# type flag of 1st tar archive member +# show information for 1st tar archive member +>0 use tar-entry +# display information of tar archive member (file type, name, permissions, user, group) +0 name tar-entry +# type flag of tar archive member #>156 ubyte x \b, %c-type >156 ubyte x >>156 ubyte 0 \b, file @@ -142,7 +177,7 @@ >>265 string >\0 \b, user %-.32s # group name null terminated >>297 string >\0 \b, group %-.32s -# device major minor if not zero +# device major minor if not zero (binary or ASCII) >>329 ubequad&0xCFCFCFCFcFcFcFdf !0 >>>329 string x \b, devmaj %-.7s >>337 ubequad&0xCFCFCFCFcFcFcFdf !0 @@ -157,6 +192,25 @@ >>508 default x # padding[255] in old tar sometimes comment field >>>257 string >\0 \b, comment: %-.40s +# Summary: VirtualBox NvramFile with UEFI variables packed inside TAR archive +# URL: hhttps://www.virtualbox.org/manual/ch08.html#vboxmanage-modifynvram +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/n/nvram-virtualbox-tar.trid.xml +# Note: called "VirtualBox saved (U)EFI BIOS settings (TAR) by TrID and +# verified by 7-Zip `7z l -ttar Mint-21.1.nvram` and +# VirtualBox `VBoxManage modifynvram "Mint-21.1" listvars` +0 name tar-nvram +# +>0 string x VirtualBox NVRAM file +#!:mime application/x-gtar +!:mime application/x-virtualbox-nvram +!:ext nvram +# first name[100] like: TpmEmuTpms/permall +>0 use tar-entry +# 2nd tar member efi/nvram contains UEFI variables part described by ./virtual +>512 search/0x1800/s efi/nvram\0 +>>&0 use tar-entry +# 2nd tar member efi/nvram content could be described by ./virtual +#>>&512 indirect x # Summary: Comic Book Archive *.CBT with TAR format # URL: https://en.wikipedia.org/wiki/Comic_book_archive # http://fileformats.archiveteam.org/wiki/Comic_Book_Archive @@ -169,7 +223,8 @@ !:ext cbt # name[100] probably like: 19.jpg 0001.png 0002.png # or maybe like ComicInfo.xml ->0 string >\0 \b, 1st image %-.60s +#>0 string >\0 \b, 1st image %-.60s +>0 use tar-entry # Summary: Open Virtualization Format *.OVF with disk images and more packed as TAR archive *.OVA # From: Joerg Jenderek # URL: https://en.wikipedia.org/wiki/Open_Virtualization_Format @@ -184,7 +239,85 @@ !:mime application/x-virtualbox-ova !:ext ova # assuming name[100] like: DOS-0.9.ovf FreeDOS_1.ovf Win98SE_DE.ovf ->0 string >\0 \b, with %-.60s +#>0 string >\0 \b, with %-.60s +>0 use tar-entry +# Summary: AVM firmware (FRITZ!OS) for the FRITZ!Box (router) +# From: Joerg Jenderek +# URL: https://en.wikipedia.org/wiki/Fritz!Box +# https://www.redteam-pentesting.de/de/advisories/rt-sa-2014-010/-avm-fritz-box-firmware-signature-bypass +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/i/image-avm.trid.xml +# Note: verified by 7-Zip `7z l -ttar FRITZ.Box_4040-07.57.image` +0 name tar-avm +>0 string x AVM FRITZ!Box firmware +#!:mime application/x-gtar +!:mime application/x-avm-image +!:ext image +# tar member ./var/content starts with line like "Product=Fritz_Box_HW227 (FRITZ!Box 4040)" +>>1024 search/512 Product=Fritz_Box_ +>>>&0 string x %s +# version string like: 07.57 07.58 +>>>1044 search Version= \b, version +>>>>&0 string x %s +# product phrase too far behind (dozen MB) in many samples like: FRITZ.Box_4040-07.12.image FRITZ.Box_6820v3_LTE-07.57.image +# so try to look for other characteristic foo +# >>1024 default x OTHER_PATTERN! +# >>>1023 search AVM_PATTERN PATTERNfound +# first name[100] like: ./var/ ./lte/ +>0 use tar-entry +# if 1st entry is directory then show 2nd entry +>156 ubyte 0x35 +# 2nd tar member name like: ./var/content (often ) ./var/install ./var/chksum ./lte/modfw.nfo +>>512 use tar-entry +# Summary: Webmin Module or Theme +# From: Joerg Jenderek +# URL: https://en.wikipedia.org/wiki/Webmin +# https://webmin.com/docs/development/creating-modules/ +# https://webmin.com/docs/development/creating-themes/ +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/w/wbm.trid.xml +# http://mark0.net/download/triddefs_xml.7z/defs/w/wbt.trid.xml +# http://mark0.net/download/triddefs_xml.7z/defs/w/wbt-gif.trid.xml +# Note: called "Webmin Module" "Webmin Theme" by TrID +# most verfied by 7-Zip `7z l -ttar *.wbm | grep "\module.info"` and +# `7z l -ttar *.wbt | grep "\theme.info"` +0 name tar-webmin +>0 string x Webmin +# Webmin module or theme +>>512 search/1767941/s /module.info Module +!:mime application/x-webmin-module +!:ext wbm +# According to documentation module.info is mandatory but instead theme.info is found in +# old-blue-theme.wbm old-blue-theme-1.0.wbm old-mscstyle3.wbm virtual-server-mobile.wbm +# GRR: maybe here wrong file name suffix WBM instead of WBT +>>512 default x +>>>512 search/3149333/s /theme.info Theme +!:mime application/x-webmin-theme +!:ext wbt +# next 3 lines should not happen +>>>512 default x Module or Theme +!:mime application/x-webmin +!:ext wbm/wbt +# GNU or POSIX tar +>257 string =ustar ( +# 2 space characters followed by a null for GNU variant for most (428/429) WBM samples +>>261 ubelong =0x72202000 \bGNU tar) +#!:mime application/x-gtar +# UStar version variant with ASCII "00" as in few (1/429) samples like cwmail.wbm +>>261 ubelong 0x72003030 \bPOSIX tar) +#!:mime application/x-ustar +#>>>156 ubyte x tar archive +# Apparently first archive member name[100] is directory like: dynbind/ ssh/ virtualmin-powerdns/ virtual-server-mobile/ vnc/ +>>0 use tar-entry +# look for characteristic WBM module info name starting with "module.info" for language variant like in: ssh2.wbm +>>512 search/1767941/s /module.info +# look for TAR magic of WBM archive module info +>>>&0 search/257/s ustar +# show details for WBM archive member module info +>>>>&-257 use tar-entry +# look for characteristic WBT theme info name with "theme.info" like in: authentic-theme-21.09.5.wbt +>>512 search/3149333/s /theme.info\0 +# look for TAR magic of WBT archive theme info +>>>&0 search/257/s ustar +>>>>&-257 use tar-entry # Incremental snapshot gnu-tar format from: # https://www.gnu.org/software/tar/manual/html_node/Snapshot-Files.html @@ -765,7 +898,7 @@ >>>>>>>(16.s) uleshort x >>>>>>>>&16 string x \b, %-.8s >>>>>>12 uleshort &0x10 ->>>>>>>(16.s) uleshort x +#>>>>>>>(16.s) uleshort x >>>>>>>&16 string x %-.8s >>>>>>>>&1 string x \b.%-.3s >>>12 uleshort &0x01 @@ -957,7 +1090,45 @@ # ZET 0 string OZ\xc3\x9d ZET archive data # TSComp -0 string \x65\x5d\x13\x8c\x08\x01\x03\x00 TSComp archive data +# Update: Joerg Jenderek 2023 Nov +# URL: http://fileformats.archiveteam.org/wiki/TSComp +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/t/tscomp.trid.xml +# https://entropymine.com/deark/releases/deark-1.6.5.tar.gz +# deark-1.6.5/modules/installshld.c +# Note: called "TSComp compressed data" by TrID +# verified by command like `deark -m tscomp -l -d2 MAKERRES.DL$` +# The "13" might be a version number. The "8c" is a mystery +0 string \x65\x5d\x13\x8c\x08\x01\x03\x00 TSComp archive +#!:mime application/octet-stream +!:mime application/x-tscomp-compressed +# filename style: 0~old version 1~without wildcard 2~with wildcard +#>0x08 ubyte x \b, filename style %u +>0x08 ubyte 0 data, filename style 0 +# no example found +!:ext ??$ +#>0x08 ubyte 1 data, without wildcard +>0x08 ubyte 1 data +# for single-file archives, often the last letter of the filename extension is changed to "$"; but also name like: BUILD3.BM! +!:ext ??$/??! +>0x08 ubyte 2 data, with wildcard +# for multi-file archives common extensions seem to be .lib and .cmp, but also names like: SAMPMIF$ OTDATA.$$$ TWOFILES.TSC WIN.PAK +!:ext /lib/cmp/$$$/tsc/pak +# fnlen; pascal string length; original 1st file name like: CHFORMAT.MML +>0x1c pstring x \b, %s +# md->fi->timestamp +>0x16 lemsdosdate x \b, modified %s +>0x18 lemsdostime x %s +# 1st compressed size: like 180 (SAMPMML$$) +>0x0E ulelong x \b, compressed size %u +# de_dbg_indent(c, 1): like: 12h +#>0x0d ubyte x b, at 0xD %#x +# like: 0 +#>0x1A ubeshort x \b, at 0x1A %#x +# 2nd member offset +#>0x12 ulelong x \b, next offset %#x +>0x12 ulelong >0 +# original 2nd archive member name like: FORMATS.MML +>>(0x12.l+15) pstring x \b, %s ... # ARQ 0 string gW\4\1 ARQ archive data # Squash @@ -1376,7 +1547,7 @@ # This is a really bad format. A file containing HAWAII will match this... #0 string HA HA archive data, #>2 leshort =1 1 file, -#>2 leshort >1 %hu files, +#>2 leshort >1 %u files, #>4 byte&0x0f =0 first is type CPY #>4 byte&0x0f =1 first is type ASC #>4 byte&0x0f =2 first is type HSC @@ -1466,7 +1637,7 @@ # check and display information of lharc header 0 name lharc-header # header size 0x4 , 0x1b-0x61 ->0 ubyte x +#>0 ubyte x # compressed data size != compressed file size #>7 ulelong x \b, data size %d # attribute: 0x2~?? 0x10~symlink|target 0x20~normal @@ -1590,7 +1761,7 @@ # RAR (Roshal Archive) archive 0 string Rar!\x1a\7\0 RAR archive data -!:mime application/x-rar +!:mime application/vnd.rar !:ext rar/cbr # file header >(0xc.l+9) byte 0x74 @@ -1602,13 +1773,13 @@ >>7 use rar-archive-header 0 string Rar!\x1a\7\1\0 RAR archive data, v5 -!:mime application/x-rar +!:mime application/vnd.rar !:ext rar # Very old RAR archive # https://jasonblanks.com/wp-includes/images/papers/KnowyourarchiveRAR.pdf 0 string RE\x7e\x5e RAR archive data (<v1.5) -!:mime application/x-rar +!:mime application/vnd.rar !:ext rar/cbr # SQUISH archiver (Greg Roelofs, newt@uchicago.edu) @@ -1623,9 +1794,19 @@ !:mime application/zip !:ext zip/cbz -# Android APK file (Zip archive) + 0 string PK\003\004 !:strength +1 +# IOS/IPadOS IPA file (Zip archive) +# Starts with Payload (file name length = 19) +>26 uleshort 8 +>>30 string Payload IOS/iPadOS IPA file +>>>&26 search/6000 PK\003\004 +>>>>&34 string x containing %s +!:mime application/x-ios-app +!:ext ipa + +# Android APK file (Zip archive) # Starts with AndroidManifest.xml (file name length = 19) >26 uleshort 19 >>30 string AndroidManifest.xml Android package (APK), with AndroidManifest.xml @@ -1693,20 +1874,7 @@ !:ext apk >>>>>-22 string PK\005\006 >>>>>>(-6.l-16) string APK\x20Sig\x20Block\x2042 \b, with APK Signing Block -# APK Signing Block ->0 default x ->>-22 string PK\005\006 ->>>(-6.l-16) string APK\x20Sig\x20Block\x2042 Android package (APK), with APK Signing Block -!:mime application/vnd.android.package-archive -!:ext apk -# Zip archives (Greg Roelofs, c/o zip-bugs@wkuvx1.wku.edu) -0 string PK\005\006 Zip archive data (empty) -!:mime application/zip -!:ext zip/cbz -!:strength +1 -0 string PK\003\004 -!:strength +1 # Specialised zip formats which start with a member named 'mimetype' # (stored uncompressed, with no 'extra field') containing the file's MIME type. @@ -1946,18 +2114,41 @@ #>30 search/100/b application/epub+zip EPUB document #!:mime application/epub+zip -# Generic zip archives (Greg Roelofs, c/o zip-bugs@wkuvx1.wku.edu) -# Next line excludes specialized formats: +# APK Signing Block >(26.s+30) leshort !0xcafe >>30 search/100/b !application/epub+zip ->>>26 string !\x8\0\0\0mimetype Zip archive data +>>>26 string !\x8\0\0\0mimetype +>>>>-22 string PK\005\006 +>>>>>(-6.l-16) string APK\x20Sig\x20Block\x2042 Android package (APK), with APK Signing Block +!:mime application/vnd.android.package-archive +!:ext apk + +# Keyman Compiled Package File (keyman.com) +# https://help.keyman.com/developer/current-version/reference/file-types/kmp +# Find start of central directory +>>>>>(-6.l) string PK\001\002 +# Scan central directory for string 'kmp.json', will suffice for a +# package containing about 150 files +>>>>>>(-6.l) search/9000 kmp.json Keyman Compiled Package File +!:mime application/vnd.keyman.kmp+zip +!:ext kmp + +# Generic zip archives (Greg Roelofs, c/o zip-bugs@wkuvx1.wku.edu) +# Next line excludes specialized formats: +>>>>+4 default x +>>>>>4 beshort x Zip archive data, at least !:mime application/zip ->>>>4 beshort x \b, at least ->>>>4 use zipversion ->>>>4 beshort x to extract ->>>>8 beshort x \b, compression method= ->>>>8 use zipcompression ->>>>0x161 string WINZIP \b, WinZIP self-extracting +>>>>>4 use zipversion +>>>>>4 beshort x to extract +>>>>>8 beshort x \b, compression method= +>>>>>8 use zipcompression +>>>>>0x161 string WINZIP \b, WinZIP self-extracting + +# Zip archives (Greg Roelofs, c/o zip-bugs@wkuvx1.wku.edu) +0 string PK\005\006 Zip archive data (empty) +!:mime application/zip +!:ext zip/cbz +!:strength +1 # StarView Metafile # From Pierre Ducroquet <pinaraf@pinaraf.info> @@ -2252,12 +2443,6 @@ 0 belong 0x1ee7ff00 EET archive !:mime application/x-eet -# rzip archives -0 string RZIP rzip compressed data ->4 byte x - version %d ->5 byte x \b.%d ->6 belong x (%d bytes) - # From: Joerg Jenderek # URL: https://help.foxitsoftware.com/kb/install-fzip-file.php # reference: http://mark0.net/download/triddefs_xml.7z/ @@ -2605,3 +2790,23 @@ >>(12.l+12) string }}}} Electron ASAR archive !:ext asar >>>12 ulelong x \b, header length: %d bytes + +# Wasay ImageIt DataPack +# From: Alexandre Iooss <erdnaxe@crans.org> +# URL: https://www.neowin.net/forum/topic/615151-anyone-know-what-program-opens-dsi-and-wsi-files/ +# Note: Used in Acer eRecovery and Lenovo OneKey Recovery (OKR) +4 string WSVD +# bytes 3-4 are the checksum or the first 32 bytes of the file +>0 uleshort 0x40 Wasay ImageIt DataPack +>>8 uleshort x v%u +>>10 uleshort x \b.%u +>>16 lestring16/8 x \b, "%s" +>>12 uleshort x (%u) +>>32 byte x \b, created on %02d +>>33 byte x \b%02d +>>34 byte x \b/%02d +>>35 byte x \b/%02d +>>36 byte x %02d +>>37 byte x \b:%02d +>>38 byte x \b:%02d +>>56 ulelong x \b, size: %u bytes diff --git a/magic/Magdir/aria b/magic/Magdir/aria index c3a6bf57e464..eb0a611427e9 100644 --- a/magic/Magdir/aria +++ b/magic/Magdir/aria @@ -1,5 +1,7 @@ #------------------------------------------------------------------------------ +# $File: aria,v 1.2 2024/06/10 23:09:52 christos Exp $ +# aria: file(1) magic for download manager aria # URL: https://de.wikipedia.org/wiki/Aria_(Software) # Reference: https://github.com/aria2/aria2/blob/master/doc/manual-src/en/technical-notes.rst # From: Joerg Jenderek diff --git a/magic/Magdir/arm b/magic/Magdir/arm index c514320354e6..fd0180316a35 100644 --- a/magic/Magdir/arm +++ b/magic/Magdir/arm @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------ -# $File: arm,v 1.3 2022/10/31 14:35:39 christos Exp $ +# $File: arm,v 1.4 2024/02/18 14:15:22 christos Exp $ # arm: file(1) magic for ARM COFF # # https://docs.microsoft.com/en-us/windows/win32/debug/pe-format @@ -40,6 +40,15 @@ >>0 use display-coff !:strength -10 +# ARM64 Compiled Hybrid PE X86 +0 leshort 0x3a64 +# test for unused flag bits in f_flags +>18 uleshort&0x8E80 0 +# use little endian variant of subroutine to +# display name+variables+flags for common object formatted files +>>0 use display-coff +!:strength -10 + # ARM64EC 0 leshort 0xa641 # test for unused flag bits in f_flags diff --git a/magic/Magdir/asf b/magic/Magdir/asf index 744a0afc2ca9..e4c3dd95c956 100644 --- a/magic/Magdir/asf +++ b/magic/Magdir/asf @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: asf,v 1.4 2022/10/31 13:22:26 christos Exp $ +# $File: asf,v 1.5 2024/09/04 19:06:12 christos Exp $ # asf: file(1) magic for Microsoft Advanced Systems Format (ASF) files # http://www.staroceans.org/e-book/ASF_Specification.pdf @@ -10,13 +10,13 @@ #>16 lequad >0 #>>(16.q) use asf-object # ASF_Simple_Index_Object ->0 guid 33000890-E5B1-11CF-89F4-00A0C90349CB +#>0 guid 33000890-E5B1-11CF-89F4-00A0C90349CB >0 guid D6E229D3-35DA-11D1-9034-00A0C90349BE ASF_Index_Object >0 guid FEB103F8-12AD-4C64-840F-2A1D2F7AD48C ASF_Media_Object_Index_Object >0 guid 3CB73FD0-0C4A-4803-953D-EDF7B6228F0C ASF_Timecode_Index_Object # ASF_File_Properties_Object ->0 guid 8CABDCA1-A947-11CF-8EE4-00C00C205365 +#>0 guid 8CABDCA1-A947-11CF-8EE4-00C00C205365 # ASF_Stream_Properties_Object >0 guid B7DC0791-A9B7-11CF-8EE6-00C00C205365 @@ -52,15 +52,15 @@ >>40 use asf-name >>0 lelong x \b) #ASF_Header_Extension_Object ->0 guid 5FBF03B5-A92E-11CF-8EE3-00C00C205365 +#>0 guid 5FBF03B5-A92E-11CF-8EE3-00C00C205365 # ASF_Codec_List_Object ->0 guid 86D15240-311D-11D0-A3A4-00A0C90348F6 +#>0 guid 86D15240-311D-11D0-A3A4-00A0C90348F6 >0 guid 1EFB1A30-0B62-11D0-A39B-00A0C90348F6 ASF_Script_Command_Object >0 guid F487CD01-A951-11CF-8EE6-00C00C205365 ASF_Marker_Object >0 guid D6E229DC-35DA-11D1-9034-00A0C90349BE ASF_Bitrate_Mutual_Exclusion_Object >0 guid 75B22635-668E-11CF-A6D9-00AA0062CE6C ASF_Error_Correction_Object # ASF_Content_Description_Object ->0 guid 75B22633-668E-11CF-A6D9-00AA0062CE6C +#>0 guid 75B22633-668E-11CF-A6D9-00AA0062CE6C #>>24 leshort title length %d #>>26 leshort author length %d #>>28 leshort copyright length %d @@ -73,7 +73,7 @@ >0 guid 298AE614-2622-4C17-B935-DAE07EE9289C ASF_Extended_Content_Encryption_Object >0 guid 2211B3FC-BD23-11D2-B4B7-00A0C955FC6E ASF_Digital_Signature_Object # ASF_Padding_Object ->0 guid 1806D474-CADF-4509-A4BA-9AABCB96AAE8 +#>0 guid 1806D474-CADF-4509-A4BA-9AABCB96AAE8 >0 guid 14E6A5CB-C672-4332-8399-A96952065B5A ASF_Extended_Stream_Properties_Object >0 guid A08649CF-4775-4670-8A16-6E35357566CD ASF_Advanced_Mutual_Exclusion_Object >0 guid D1465A40-5A79-4338-B71B-E36B8FD6C249 ASF_Group_Mutual_Exclusion_Object diff --git a/magic/Magdir/audio b/magic/Magdir/audio index 55c5cd0ad20e..991b75999608 100644 --- a/magic/Magdir/audio +++ b/magic/Magdir/audio @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: audio,v 1.127 2023/03/05 20:15:49 christos Exp $ +# $File: audio,v 1.133 2024/09/04 19:07:20 christos Exp $ # audio: file(1) magic for sound formats (see also "iff") # # Jan Nicolai Langfeldt (janl@ifi.uio.no), Dan Quinlan (quinlan@yggdrasil.com), @@ -99,8 +99,8 @@ !:mime audio/x-unknown # is this next line right? it came this way... >19 byte 0x1A ->23 byte >0 - version %d ->22 byte >0 \b.%d +>>23 byte >0 - version %d +>>22 byte >0 \b.%d # first entry is also the string "NTRK" 0 belong 0x4e54524b MultiTrack sound data @@ -276,13 +276,12 @@ # http://www-mmsp.ece.mcgill.ca/documents/AudioFormats/IRCAM/IRCAM.html 0 belong 0x64a30100 IRCAM file (VAX little-endian) 0 belong 0x0001a364 IRCAM file (VAX big-endian) -0 belong 0x64a30200 IRCAM file (Sun big-endian) 0 belong 0x0002a364 IRCAM file (Sun little-endian) +0 belong 0x64a30200 IRCAM file (Sun big-endian) 0 belong 0x64a30300 IRCAM file (MIPS little-endian) 0 belong 0x0003a364 IRCAM file (MIPS big-endian) -0 belong 0x64a30400 IRCAM file (NeXT big-endian) -0 belong 0x64a30400 IRCAM file (NeXT big-endian) 0 belong 0x0004a364 IRCAM file (NeXT little-endian) +0 belong 0x64a30400 IRCAM file (NeXT big-endian) # NIST SPHERE <mpruett@sgi.com> 0 string NIST_1A\n\ \ \ 1024\n NIST SPHERE file @@ -487,7 +486,7 @@ # Sharp Jisaku Melody format for PDC 0 string \001Sharp\040JisakuMelody SHARP Cell-Phone ringing Melody >20 string Ver01.00 Ver. 1.00 ->>32 byte x , %d tracks +>>32 byte x \b, %d tracks # Free lossless audio codec <http://flac.sourceforge.net> # From: Przemyslaw Augustyniak <silvathraec@rpg.pl> @@ -644,6 +643,7 @@ 0 string [Equalizer\ preset] XMMS equalizer preset # .m3u 0 search/1 #EXTM3U M3U playlist text +!:mime audio/x-mpegurl # .pls 0 search/1 [playlist] PLS playlist text # licq.conf @@ -713,10 +713,36 @@ # Type: Adaptive Multi-Rate Codec # URL: http://filext.com/detaillist.php?extdetail=AMR +# http://fileformats.archiveteam.org/wiki/Adaptive_Multi-Rate_Audio +# Reference: https://datatracker.ietf.org/doc/html/rfc4867 +# http://mark0.net/download/triddefs_xml.7z/defs/a/audio-amr.trid.xml +# Update: Joerg Jenderek # From: Russell Coker <russell@coker.com.au> -0 string #!AMR Adaptive Multi-Rate Codec (GSM telephony) -!:mime audio/amr +# Note: called "AMR (Adaptive Multi Rate) encoded audio" by TrID and +# "Adaptive Multi-Rate Audio" by DROID via PUID fmt/356 and +# "AMR" "AMR audio" or "Adaptive Multi-Rate" by shared MIME-info database from freedesktop.org +0 string #!AMR Adaptive Multi-Rate Codec +# Adaptive Multi-Rate Codec (strength=80) before wrong "a AMR script executable (binary data)" (strength=20=60/3) by ./varied.script +#!:strength +0 +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/a/audio-awb.trid.xml +# Note: called "Adaptive Multi-Rate Wideband ACELP codec" by TrID and +# "Adaptive Multi-Rate Wideband Audio" bY DROID via PUID fmt/954 and +# "AMR-WB" "AMR-WB audio" or "Adaptive Multi-Rate Wideband" by shared MIME-info database from freedesktop.org +>5 string -WB (Wideband) +# https://www.iana.org/assignments/media-types/audio/AMR-WB +!:mime audio/AMR-WB +#!:mime audio/amr-wb-encrypted +!:apple ????amrw +!:ext awb +# variant without Wideband +>5 default x (GSM telephony) +# https://www.iana.org/assignments/media-types/audio/AMR +!:mime audio/AMR +# last character in type code is space +!:apple ????amr !:ext amr +# GRR: maybe also 3ga suffix? https://telparia.com/fileFormatSamples/audio/amr/example.3ga +#!:ext amr/3ga # Type: SuperCollider 3 Synth Definition File Format # From: Mario Lang <mlang@debian.org> @@ -907,16 +933,16 @@ # From Martin Mueller Skarbiniks Pedersen 0 string GDM >0x3 byte 0xFE General Digital Music. ->0x4 string >\0 title: "%s" ->0x24 string >\0 musician: "%s" ->>0x44 beshort 0x0D0A ->>>0x46 byte 0x1A ->>>>0x47 string GMFS Version ->>>>0x4B byte x %d. ->>>>0x4C byte x \b%02d ->>>>0x4D beshort 0x000 (2GDM v ->>>>0x4F byte x \b%d. ->>>>>0x50 byte x \b%d) +>>0x4 string >\0 title: "%s" +>>0x24 string >\0 musician: "%s" +>>>0x44 beshort 0x0D0A +>>>>0x46 byte 0x1A +>>>>>0x47 string GMFS Version +>>>>>0x4B byte x %d. +>>>>>0x4C byte x \b%02d +>>>>>0x4D beshort 0x000 (2GDM v +>>>>>0x4F byte x \b%d. +>>>>>>0x50 byte x \b%d) 0 string MTM Multitracker >0x3 byte/16 x Version %d. @@ -939,18 +965,18 @@ >4 string "ArtOfNoise by Bastian Spiegel(twice/lego)" >0x2e string NAME Art of Noise Tracker Song >3 string <9 ->3 string 4 (4 voices) ->3 string 8 (8 voices) +>>3 string 4 (4 voices) +>>3 string 8 (8 voices) >>0x36 string >\0 Title: "%s" 0 string FAR >0x2c byte 0x0d ->0x2d byte 0x0a ->0x2e byte 0x1a ->>0x3 byte 0xFE Farandole Tracker Song ->>>0x31 byte/16 x Version %d. ->>>0x31 byte&0x0F x \b%02d ->>>>0x4 string >\0 \b, title: "%s" +>>0x2d byte 0x0a +>>>0x2e byte 0x1a +>>>>0x3 byte 0xFE Farandole Tracker Song +>>>>>0x31 byte/16 x Version %d. +>>>>>0x31 byte&0x0F x \b%02d +>>>>>0x4 string >\0 \b, title: "%s" # magic for Klystrack, https://kometbomb.github.io/klystrack/ # from Alex Myczko <alex@aiei.ch> @@ -1034,25 +1060,37 @@ # Added by David Korth <gerbilsoft@gerbilsoft.com> 0 string PSF >3 byte 0x01 +>>0 use portable_sound_format >3 byte 0x02 +>>0 use portable_sound_format >3 byte 0x11 +>>0 use portable_sound_format >3 byte 0x12 +>>0 use portable_sound_format >3 byte 0x13 +>>0 use portable_sound_format >3 byte 0x21 +>>0 use portable_sound_format >3 byte 0x22 +>>0 use portable_sound_format >3 byte 0x23 +>>0 use portable_sound_format >3 byte 0x41 ->>0 string PSF Portable Sound Format +>>0 use portable_sound_format + + +0 name portable_sound_format +>0 string PSF Portable Sound Format !:mime audio/x-psf ->>>3 byte 0x01 (Sony PlayStation) ->>>3 byte 0x02 (Sony PlayStation 2) ->>>3 byte 0x11 (Sega Saturn) ->>>3 byte 0x12 (Sega Dreamcast) ->>>3 byte 0x13 (Sega Mega Drive) ->>>3 byte 0x21 (Nintendo 64) ->>>3 byte 0x22 (Game Boy Advance) ->>>3 byte 0x23 (Super NES) ->>>3 byte 0x41 (Capcom QSound) +>>3 byte 0x01 (Sony PlayStation) +>>3 byte 0x02 (Sony PlayStation 2) +>>3 byte 0x11 (Sega Saturn) +>>3 byte 0x12 (Sega Dreamcast) +>>3 byte 0x13 (Sega Mega Drive) +>>3 byte 0x21 (Nintendo 64) +>>3 byte 0x22 (Game Boy Advance) +>>3 byte 0x23 (Super NES) +>>3 byte 0x41 (Capcom QSound) # Atari 8-bit SAP audio format # http://asap.sourceforge.net/sap-format.html @@ -1289,3 +1327,14 @@ # version > 1 or 0 >>&0 default x \b, unknown version + +# https://moddingwiki.shikadi.net/wiki/ROL_Format +4 string \\roll\\default AdLib Visual Composer ROL file +>0 leshort x \b, version %d. +>2 leshort x \b%d +>44 leshort x \b, tickBeat %d +>46 leshort x \b, beatMeasure %d +>48 leshort x \b, scaleY %d +>50 leshort x \b, scaleX %d +>52 byte 0 \b, percussive +>52 byte 1 \b, melodic diff --git a/magic/Magdir/ber b/magic/Magdir/ber index 15288c682416..8afd23d45594 100644 --- a/magic/Magdir/ber +++ b/magic/Magdir/ber @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: ber,v 1.2 2019/04/19 00:42:27 christos Exp $ +# $File: ber,v 1.3 2024/09/01 13:49:15 christos Exp $ # ber: file(1) magic for several BER formats used in the mobile # telecommunications industry (Georg Sauthoff) @@ -41,7 +41,6 @@ # NRT Files # NRT a.k.a. NRTRDE -0 byte 0x61 # <SpecificationVersionNumber>2</><ReleaseVersionNumber> block >&1 search/b8 \x5f\x29\x01\x02\x5f\x25\x01 >>&0 byte x NRT 2.%d (TD.35, Near Real Time Roaming Data Exchange) diff --git a/magic/Magdir/biosig b/magic/Magdir/biosig index 7d41713f24a5..dc99773e086f 100644 --- a/magic/Magdir/biosig +++ b/magic/Magdir/biosig @@ -1,7 +1,7 @@ -############################################################################## -# -# Magic ids for biomedical signal file formats +#------------------------------------------------------------------------------ +# $File: biosig,v 1.4 2024/06/10 23:09:52 christos Exp $ +# file(1) magic for biomedical signal file formats # Copyright (C) 2018 Alois Schloegl <alois.schloegl@gmail.com> # # The list has been derived from biosig projects diff --git a/magic/Magdir/bsdi b/magic/Magdir/bsdi index 8499b0c90363..d2fa6002aad4 100644 --- a/magic/Magdir/bsdi +++ b/magic/Magdir/bsdi @@ -1,21 +1,26 @@ #------------------------------------------------------------------------------ -# $File: bsdi,v 1.7 2014/03/29 15:40:34 christos Exp $ +# $File: bsdi,v 1.9 2024/03/31 15:06:56 christos Exp $ # bsdi: file(1) magic for BSD/OS (from BSDI) objects # Some object/executable formats use the same magic numbers as are used # in other OSes; those are handled by entries in aout. # -0 lelong 0314 386 compact demand paged pure executable +0 lelong 0314 i386 compact demand paged pure executable >16 lelong >0 not stripped >32 byte 0x6a (uses shared libs) +# Update: Joerg Jenderek # same as in SunOS 4.x, except for static shared libraries +# Note: was also called "a.out SunOS SPARC demand paged" by ./sun v 1.28 0 belong&077777777 0600413 SPARC demand paged >0 byte &0x80 >>20 belong <4096 shared library >>20 belong =4096 dynamically linked executable >>20 belong >4096 dynamically linked executable +#!:mime application/x-foo-executable +# typically no file name suffix for executables +!:ext / >0 byte ^0x80 executable >16 belong >0 not stripped >36 belong 0xb4100001 (uses shared libs) diff --git a/magic/Magdir/c64 b/magic/Magdir/c64 index 6c8732090ff3..36f30ab3b684 100644 --- a/magic/Magdir/c64 +++ b/magic/Magdir/c64 @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: c64,v 1.14 2023/06/16 19:24:06 christos Exp $ +# $File: c64,v 1.16 2024/03/07 22:30:21 christos Exp $ # c64: file(1) magic for various commodore 64 related files # # From: Dirk Jagdmann <doj@cubic.org> @@ -12,13 +12,32 @@ # C64 (and other CBM) cartridges # Extended by David Korth <gerbilsoft@gerbilsoft.com> +# Update: Joerg Jenderek # Reference: https://vice-emu.sourceforge.io/vice_17.html#SEC391 +# http://ist.uwaterloo.ca/~schepers/formats/CRT.TTX +# http://mark0.net/download/triddefs_xml.7z/defs/c/crt-c64.trid.xml +# Note: called "C64 Cartridge image" by TrID and +# "CRT C64 Cartridge Image Format" by DROID via PUID fmt/822 -0 string C64\40CARTRIDGE Commodore 64 cartridge +0 string C64\40CARTRIDGE +# skip DROID fmt-822-signature-id-1179.crt with missing packet length +>0x44 ubelong >0x10 +>>0 use c64-crt +# display Commodore 64 cartridge information +0 name c64-crt +>0 string x Commodore 64 cartridge +#!:mime application/octet-stream +!:mime application/x-commodore-crt +!:ext crt +# http://mark0.net/download/triddefs_xml.7z/defs/c/car-ccs64.trid.xml +#!:ext crt/car >0x20 ubyte 0 \b, >0x20 ubyte !0 +# 32-byte null padded cartridge name like: "BUGS BUNNY" "CART64" "EasyFlash" "FINAL CARTRIDGE" "Magic Desk" "VICE CART" >>0x20 string/T x \b: "%.32s", +# cartridge hardware type >0x16 beshort 0 +# cartridge port EXROM line status >>0x18 beshort 0x0000 16 KB game >>0x18 beshort 0x0001 8 KB game >>0x18 beshort 0x0100 UltiMax mode @@ -59,6 +78,7 @@ >0x16 beshort 34 Capture >0x16 beshort 35 Action Replay 3 >0x16 beshort 36 +# cartridge Hardware Revision/Subtype (usually 0) (added in v1.01) >>0x1A ubyte 1 Nordic Replay >>0x1A ubyte !1 Retro Replay >0x16 beshort 37 MMC64 @@ -104,6 +124,24 @@ >0x16 beshort 75 IEEE Flash! 64 >0x16 beshort 76 Turtle Graphics II >0x16 beshort 77 Freeze Frame MK2 +>0x16 beshort 78 Partner 64 +# cartridge hardware type: (0-78) +>0x16 ubeshort >78 unknown type %#x +# Cartridge Hardware Revision/Subtype (usually 0 added in v1.01) +>>0x1A ubyte >0 revision %#x +# padded with 3 space characters for CRT but for CCS64 Cartridge (*.CAR) maybe different according to TrID +>14 ubeshort !0x2020 \b, at 14 %#x +# file header length like: 20h (reported wrong) 40h (default and minimum) +>0x10 ubelong !0x40 \b, header length %#x +# cartridge version like: 1.0 1.1 (adds CRT sub type/hardware revision) 2.0 (introduces VIC20, PLUS4, C128, CBM2) +>0x14 ubeshort !0x0100 +>>0x14 ubyte x \b, version %u +>>0x15 ubyte x \b.%u +# cartridge content start with ROM signature which must be CHIP +>0x40 ubelong !0x43484950 \b, invalid ROM signature +>>0x40 string x "%0.4s" +# total packet length (length of ROM image size and header combined) like: 2010h 4010h +>0x44 ubelong x \b, packet length %#x 0 string C128\40CARTRIDGE Commodore 128 cartridge >0x20 ubyte 0 \b, @@ -164,26 +202,112 @@ 0 belong 0xFF424CFF WRAptor packer (c64) -0 string C64S\x20tape\x20file T64 tape Image ->32 leshort x Version:%#x ->36 leshort !0 Entries:%i ->40 string x Name:%.24s - -0 string C64\x20tape\x20image\x20file\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0 T64 tape Image ->32 leshort x Version:%#x ->36 leshort !0 Entries:%i ->40 string x Name:%.24s - -0 string C64S\x20tape\x20image\x20file\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0 T64 tape Image ->32 leshort x Version:%#x ->36 leshort !0 Entries:%i ->40 string x Name:%.24s +# URL: http://fileformats.archiveteam.org/wiki/T64 +# Reference: http://ist.uwaterloo.ca/~schepers/formats/T64.TXT +# https://vice-emu.sourceforge.io/vice_16.html#SEC394 +# https://www.infinite-loop.at/Power64/Documentation/Power64-ReadMe/AE-File_Formats.html +# http://mark0.net/download/triddefs_xml.7z/defs/e/emu-t64.trid.xml +# Note: called "Commodore 64 Tape container" by TrID, "T64 Tape Image Format" by DROID via PUID fmt/820 and +# "T64 tape Image" by ./c64,v 1.14 +# verified by command like `deark -m t64 -l -d2 Caitan_the_Demo.t64` and +# `cbmconvert -v2 -t -D4 ironmanoffroad.d64 ironmanoffroad.t64` +# 32 byte signature starting like C64S\x20tape\x20file +# C64\x20tape\x20image\x20file\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0 +# C64S\x20tape\x20image\x20file\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0 +0 string/b C64 +# skip raw Commodore TAPe by check for unsed areas (\0 filled) and valid low (40h+m*20h; m=0-FFffh) offset +>0x46 ubequad&0xFFff1F00C0ffFFff 0 Commodore Tape image +#!:mime application/octet-stream +#!:mime application/x-commodore-tape +!:ext t64 +# version like: 0100h (examples found) 0101h 0200h (no examples) +>>32 leshort x Version:%#x +#>>32 leshort !0x0100 Version:%#x +# number of used directory entries like: 0 1 2 5 +>>36 leshort !0 Entries:%i +# tape container name, 24 characters (padded with 20h but with A0h for DirMaster created samples) like: +# ->ZYRON'S PD<- IMAGETAPE MY-T64-TEST\240\240\240 OPERATIONWOLF+3-711.T64 +>>40 string/24/Tb >\040 Name:%.24s +# MaxFiles; maximal directory entries like: 0 1 2 5 30 (=1Eh some emulators expect exactly this value) 31 32 +>>34 uleshort x MaxFiles:%u +# 1st C64 filetype: 0~free 1~normal tape file 2~tape file with header 3~memory snapshot 4~tape block 5~digitized stream 6-255~reserved +>>0x40 ubyte !1 \b, C64 file type %#x +# 1st start address or load address of first entry like: 0000 (empty|snapshot) 04a0h (ironmanoffroad.t64) 0801h (typically) 1201h (3501_quizmaster_program_s1.t64) +>>0x42 uleshort !0x0801 \b, load address %#4.4x +# 1st actual end address in memory +>>0x44 uleshort x \b, end address %#4.4x +# reserved; must be 0 +>>0x26 ubeshort !0 \b, at +0x26 %#x +# not used like: 0 (examples found and according to TrID) +>>0x46 ubeshort !0 \b, at 0x46 %#4.4x +# not used like: 0 (examples found and according to TrID) +>>0x4c ubelong !0 \b, at 0x4C %#8.8x +# offset (=64+32*m) into 1st container file like: 0 (empty) 60h 80h E0h 400h 440h ... +>>0x48 ulelong >0 \b, at %#x +# 1st filename (in PETASCII, padded with 20h, not A0h) like: "DRILLINSTR. /HTL" "WIZBALL+ " ... +>>>0x50 string/16/bT x "%0.16s" +# https://www.lyonlabs.org/commodore/onrequest/Inside_Commodore_Dos.pdf +# file type like: 0~Scratched 1~SEQunclosed 81h~SEQ 82h~PRG C2h~PRGlocked ... +>>>0x41 ubyte x +>>>>0x41 ubyte =0x00 Scratched type +>>>>0x41 ubyte =0x01 SEQ unclosed type +#>>>>0x41 ubyte =0x44 foo type +>>>>0x41 ubyte =0x80 DEL type +>>>>0x41 ubyte =0x81 SEQ type +>>>>0x41 ubyte =0x82 PRG type +>>>>0x41 ubyte =0x83 USR type +>>>>0x41 ubyte =0x84 REL type +>>>>0x41 ubyte =0xC2 PRG locked type +# other unusual file type +>>>>0x41 default x +>>>>>0x41 ubyte x %#2.2x type +# inspect 1st entry content (often Commodore C64 BASIC program *.PRG) without load adress +#>>(0x48.l) ubequad x \b, 1st data %16.16llx... # Raw tape file format (.tap files) # Esa Hyyti <esa@netlab.tkk.fi> -0 string C64-TAPE-RAW C64 Raw Tape File (.tap), +# Update: Joerg Jenderek +# URL: http://fileformats.archiveteam.org/wiki/Tap_file +# https://vice-emu.sourceforge.io/vice_16.html#SEC392 +# Reference: http://ist.uwaterloo.ca/~schepers/formats/TAP.TXT +# Note: called "TAP (Commodore 64)" by DROID via PUID fmt/802 +# a variant starting with C16-TAPE-RAW should exist, but no examples found +0 string/b C64-TAPE-RAW Commodore raw Tape image (platform +#0 string C64-TAPE-RAW C64 Raw Tape File (.tap), +#!:mime application/octet-stream +!:mime application/x-commodore-tape +!:ext tap +# According to TrID als raw suffix, but no such samples found +#!:ext tap/raw +# computer platform like: 0~C64 1~VIC-20 2~C16 Plus/4 3~PET 4~C5x0 5~C6x0 C7x0 +>0xD ubyte 0 C64 +>0xD ubyte 1 VIC-20 +>0xD ubyte 2 C16 Plus/4 +>0xD ubyte 3 PET +>0xD ubyte 4 C5x0 +>0xD ubyte 5 C6x0 C7x0 +# this should not happen! +>0xD ubyte >5 %#2.2x +>0xD ubyte x \b), +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/t/tap.trid.xml +# http://mark0.net/download/triddefs_xml.7z/defs/t/tap-1.trid.xml +# Note: called "C64 Tape image format" (v0-original) (v1-updated)" by TrID +# TAP version like: 0~OriginalLayout 1~Updated (often) >0x0c byte x Version:%u, +# file data size (not including header) >0x10 lelong x Length:%u cycles +# video standard like: 0~PAL 1~NTSC 2~OLD NTSC 3~PALN +>0xE ubyte x \b, video +>0xE ubyte 0 PAL +>0xE ubyte 1 NTSC +>0xE ubyte 2 old NTSC +>0xE ubyte 3 PALN +# this should not happen! +>0xE ubyte >3 %#2.2x +# reserved for future expansion like: 0 +>0xF ubyte !0 \b, at 0xF %#2.2x +# file data +#>014 ubequad x \b, data %16.16llx # magic for Goattracker2, http://covertbitops.c64.org/ # from Alex Myczko <alex@aiei.ch> diff --git a/magic/Magdir/cafebabe b/magic/Magdir/cafebabe index 4f97cc0345eb..eb28a4b27651 100644 --- a/magic/Magdir/cafebabe +++ b/magic/Magdir/cafebabe @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: cafebabe,v 1.28 2022/07/01 23:24:47 christos Exp $ +# $File: cafebabe,v 1.31 2024/08/30 16:53:22 christos Exp $ # Cafe Babes unite! # # Since Java bytecode and Mach-O universal binaries have the same magic number, @@ -14,10 +14,47 @@ # (and use as a hack). Let's not use 18, because the Mach-O people # might add another one or two as time goes by... # + +### MACH-O START ### +# URL: https://en.wikipedia.org/wiki/Mach-O + +0 name mach-o \b [ +# for debugging purpose CPU type as hexadecimal +#>0 ubequad x CPU=%16.16llx +# display CPU type as string like: i386 x86_64 ... armv7 armv7k ... +>0 use mach-o-cpu \b +# for debugging purpose print offset to 1st mach_header like: +# 1000h 4000h seldom 2d000h 88000h 5b000h 10e000 h +#>8 ubelong x at %#x offset +>(8.L) indirect x \b: +>0 belong x \b] + +# Reference: https://opensource.apple.com/source/cctools/cctools-949.0.1/ +# include/mach-o/fat.h +# include/mach/machine.h +0 belong 0xcafebabe +>4 belong 1 Mach-O universal binary with 1 architecture: +!:mime application/x-mach-binary +>>8 use mach-o \b +# nfat_arch; number of CPU architectures; highest is 18 for CPU_TYPE_POWERPC in 2020 +>4 ubelong >1 +>>4 ubelong <20 Mach-O universal binary with %d architectures: +!:mime application/x-mach-binary +>>>8 use mach-o \b +>>>4 ubelong >1 +>>>>28 use mach-o \b +>>>4 ubelong >2 +>>>>48 use mach-o \b +>>>4 ubelong >3 +>>>>68 use mach-o \b +>>>4 ubelong >4 +>>>>88 use mach-o \b +>>>4 ubelong >5 +>>>>108 use mach-o \b +### MACH-O END ### ### JAVA START ### # Reference: http://en.wikipedia.org/wiki/Java_class_file # Update: Joerg Jenderek -0 belong 0xcafebabe >4 ubelong >30 compiled Java class data, !:mime application/x-java-applet #!:mime application/java-byte-code @@ -50,6 +87,12 @@ >>4 belong 0x003E (Java SE 18) >>4 belong 0x003F (Java SE 19) >>4 belong 0x0040 (Java SE 20) +>>4 belong 0x0041 (Java SE 21) +>>4 belong 0x0042 (Java SE 22) +>>4 belong 0x0043 (Java SE 23) +>>4 belong 0x0044 (Java SE 24) +>>4 belong 0x0045 (Java SE 25) +>>4 belong 0x0046 (Java SE 26) # pool count unequal zero #>>8 beshort x \b, pool count %#x # pool table @@ -60,48 +103,4 @@ >4 byte x \b%d !:mime application/x-java-pack200 - -0 belong 0xcafed00d JAR compressed with pack200, ->5 byte x version %d. ->4 byte x \b%d -!:mime application/x-java-pack200 - ### JAVA END ### -### MACH-O START ### -# URL: https://en.wikipedia.org/wiki/Mach-O - -0 name mach-o \b [ -# for debugging purpose CPU type as hexadecimal -#>0 ubequad x CPU=%16.16llx -# display CPU type as string like: i386 x86_64 ... armv7 armv7k ... ->0 use mach-o-cpu \b -# for debugging purpose print offset to 1st mach_header like: -# 1000h 4000h seldom 2d000h 88000h 5b000h 10e000 h -#>8 ubelong x at %#x offset ->(8.L) indirect x \b: ->0 belong x \b] - -# Reference: https://opensource.apple.com/source/cctools/cctools-949.0.1/ -# include/mach-o/fat.h -# include/mach/machine.h -0 belong 0xcafebabe ->4 belong 1 Mach-O universal binary with 1 architecture: -!:mime application/x-mach-binary ->>8 use mach-o \b -# nfat_arch; number of CPU architectures; highest is 18 for CPU_TYPE_POWERPC in 2020 ->4 ubelong >1 ->>4 ubelong <20 Mach-O universal binary with %d architectures: -!:mime application/x-mach-binary ->>>8 use mach-o \b ->>>4 ubelong >1 ->>>>28 use mach-o \b ->>>4 ubelong >2 ->>>>48 use mach-o \b ->>>4 ubelong >3 ->>>>68 use mach-o \b ->>>4 ubelong >4 ->>>>88 use mach-o \b ->>>4 ubelong >5 ->>>>108 use mach-o \b - -### MACH-O END ### diff --git a/magic/Magdir/cbor b/magic/Magdir/cbor index c780dc6594d3..75c09a1c1a4c 100644 --- a/magic/Magdir/cbor +++ b/magic/Magdir/cbor @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: cbor,v 1.1 2015/01/28 01:05:21 christos Exp $ +# $File: cbor,v 1.2 2024/09/04 19:06:12 christos Exp $ # cbor: file(1) magic for CBOR files as defined in RFC 7049 0 string \xd9\xd9\xf7 Concise Binary Object Representation (CBOR) container @@ -13,7 +13,7 @@ >3 ubyte <0x80 >>3 ubyte >0x5f (text string) >3 ubyte <0xa0 ->3 ubyte >0x7f (array) +>>3 ubyte >0x7f (array) >3 ubyte <0xc0 >>3 ubyte >0x9f (map) >3 ubyte <0xe0 diff --git a/magic/Magdir/claris b/magic/Magdir/claris index 6a1b68fb2275..3230bda2a7c4 100644 --- a/magic/Magdir/claris +++ b/magic/Magdir/claris @@ -1,8 +1,10 @@ #------------------------------------------------------------------------------ -# $File: claris,v 1.8 2016/07/18 19:23:38 christos Exp $ +# $File: claris,v 1.9 2024/07/07 14:36:49 christos Exp $ # claris: file(1) magic for claris # "H. Nanosecond" <aldomel@ix.netcom.com> +# Update: Joerg Jenderek 2024 May +# URL: https://en.wikipedia.org/wiki/AppleWorks # Claris Works a word processor, etc. # Version 3.0 @@ -12,8 +14,14 @@ #0001000 #010 250 377 377 377 377 000 213 000 230 000 021 002 377 014 000 #null to byte 1000 octal 514 string \377\377\377\377\000 +# https://sembiance.com/fileFormatSamples/image/pict/ +# Claris clip art (strength=80) after few Macintosh QuickDraw (strength=81=70+11 ./images) with corner coordinates -1/-1 and Y=0x00?? like PICT_2012.pict +#!:strength +0 >0 string \0\0\0\0\0\0\0\0\0\0\0\0\0 Claris clip art 514 string \377\377\377\377\001 +# https://sembiance.com/fileFormatSamples/image/pict/ +# Claris clip art (strength=80) after few Macintosh QuickDraw (strength=81=70+11 ./images) with corner coordinates -1/-1 and Y=0x01?? like PICT_129.pict +#!:strength +0 >0 string \0\0\0\0\0\0\0\0\0\0\0\0\0 Claris clip art # Claris works files diff --git a/magic/Magdir/coff b/magic/Magdir/coff index 5123b7213c4c..d42b9ebeec7a 100644 --- a/magic/Magdir/coff +++ b/magic/Magdir/coff @@ -1,49 +1,92 @@ #------------------------------------------------------------------------------ -# $File: coff,v 1.7 2022/11/21 22:30:22 christos Exp $ +# $File: coff,v 1.15 2024/11/10 18:54:33 christos Exp $ # coff: file(1) magic for Common Object Files not specific to known cpu types or manufactures # # COFF # -# by Joerg Jenderek at Oct 2015, Feb 2021 +# by Joerg Jenderek at Oct 2015, Feb 2021, Mar 2024 # https://en.wikipedia.org/wiki/COFF # https://de.wikipedia.org/wiki/Common_Object_File_Format # http://www.delorie.com/djgpp/doc/coff/filhdr.html +# https://learn.microsoft.com/en-us/windows/win32/debug/pe-format#coff-file-header-object-and-image +# https://formats.kaitai.io/uefi_te/index.html + +# Display COFF processor type, including MS COFF and PE/COFF +0 name display-coff-processor +# PE/COFF, DJGPP, i386 COFF executable, MS Windows COFF Intel i386 object file (./intel) +>0 uleshort 0x014c Intel i386 +>0 uleshort 0x014d Intel i860 +>0 uleshort 0x0160 MIPS R3000 (big-endian) +>0 uleshort 0x0162 MIPS R3000 +>0 uleshort 0x0166 MIPS R4000 +>0 uleshort 0x0168 MIPS R10000 +>0 uleshort 0x0169 MIPS WCE v2 +>0 uleshort 0x0184 Alpha 32-bit +>0 uleshort 0x01a2 Hitachi SH3 +>0 uleshort 0x01a3 Hitachi SH3 DSP +>0 uleshort 0x01a4 Hitachi SH4E +>0 uleshort 0x01a6 Hitachi SH4 +>0 uleshort 0x01a8 Hitachi SH5 +>0 uleshort 0x01c0 ARMv4 +>0 uleshort 0x01c2 ARMv4T +>0 uleshort 0x01c4 ARMv7 +>0 uleshort 0x01d3 Matsushita AM33 +# executable (RISC System/6000 V3.1) or obj module (./ibm6000 v 1.15), not PE/COFF +>0 uleshort 0x01df RISC System/6000 +>0 uleshort 0x01f0 PowerPC 32-bit (little-endian) +>0 uleshort 0x01f1 PowerPC 32-bit with FPU (little-endian) +>0 uleshort 0x01f2 PowerPC 64-bit (big-endian) +>0 uleshort 0x0200 Intel Itanium +>0 uleshort 0x0266 MIPS16 +>0 uleshort 0x0268 Motorola 68000 +>0 uleshort 0x0284 Alpha 64-bit +>0 uleshort 0x0290 PA-RISC +>0 uleshort 0x0366 MIPS with FPU +>0 uleshort 0x0466 MIPS16 with FPU +# Hitachi SH big-endian COFF (./hitachi-sh), not PE/COFF +>0 uleshort 0x0500 Hitachi SH (big-endian) +>0 uleshort 0x0520 Tricore +# Hitachi SH little-endian COFF (./hitachi-sh), not PE/COFF +>0 uleshort 0x0550 Hitachi SH (little-endian) +>0 uleshort 0x0601 PowerPC 32-bit (big-endian) +# Windows CE 3.0 Common Executable Format, created by linkcef.exe with /MACHINE:CEF flag +# https://web.archive.org/web/20000819035046/http://microsoft.com/windows/embedded/ce/downloads/cef.asp +# https://web.archive.org/web/20000914080342/http://microsoft.com/windows/embedded/ce/developer/applications/appdevelopment/cef2.asp +# https://web.archive.org/web/20021022055906/http://msdn.microsoft.com/library/en-us/dnce30/html/cef2.asp +>0 uleshort 0x0cef Common Executable Format +>0 uleshort 0x0ebc EFI byte code +>0 uleshort 0x3a64 ARM64 (i386 ABI) +>0 uleshort 0x5032 RISC-V 32-bit +>0 uleshort 0x5064 RISC-V 64-bit +>0 uleshort 0x5128 RISC-V 128-bit +>0 uleshort 0x6232 LoongArch 32-bit +>0 uleshort 0x6264 LoongArch 64-bit +>0 uleshort 0x8664 x86-64 +>0 uleshort 0x9041 Mitsubishi M32R +>0 uleshort 0xa641 ARM64 (x86-64 ABI) +>0 uleshort 0xa64e ARM64 (classic + x86-64 ABI) +# PE/COFF ARM64 classic ABI, ARM COFF (./arm) +>0 uleshort 0xaa64 ARM64 +>0 uleshort 0xace1 OMNI VM (omniprox.dll) +# Processor type CEE can be only in object files (created by older ilasm.exe with /OBJECT flag), not in PE executables +>0 uleshort 0xc0ee COM+ Execution Engine +>0 default x Unknown processor +>>0 uleshort x 0x%04x # display name+variables+flags of Common Object Files Format (32bit) # Maybe used also in adi,att3b,clipper,hitachi-sh,hp,ibm6000,intel, # mips,motorola,msdos,osf1,sharc,varied.out,vax 0 name display-coff -# test for unused flag bits (0x8000,0x0800,0x0400,0x0200,x0080) in f_flags ->18 uleshort&0x8E80 0 +# test for unused flag bits (0x8000,x0080) in f_flags +# flag bits (0x0800,0x0400,0x0200) now seems to be used in RISC System/6000 V3.1 +>18 uleshort&0x8080 0 # skip DOCTOR.DAILY READER.NDA REDBOX.ROOT by looking for positive number of sections >>2 uleshort >0 # skip ega80woa.fnt svgafix.fnt HP3FNTS1.DAT HP3FNTS2.DAT INTRO.ACT LEARN.PIF by looking for low number of sections >>>2 uleshort <4207 ->>>>0 clear x # f_magic - magic number -# DJGPP, 80386 COFF executable, MS Windows COFF Intel 80386 object file (./intel) ->>>>0 uleshort 0x014C Intel 80386 -# Hitachi SH big-endian COFF (./hitachi-sh) ->>>>0 uleshort 0x0500 Hitachi SH big-endian -# Hitachi SH little-endian COFF (./hitachi-sh) ->>>>0 uleshort 0x0550 Hitachi SH little-endian -# executable (RISC System/6000 V3.1) or obj module (./ibm6000) -#>>>>0 uleshort 0x01DF -# MS Windows COFF Intel Itanium, AMD64 -# https://msdn.microsoft.com/en-us/library/windows/desktop/ms680313(v=vs.85).aspx ->>>>0 uleshort 0x0200 Intel ia64 ->>>>0 uleshort 0x8664 Intel amd64 -# ARM COFF (./arm) ->>>>0 uleshort 0xaa64 Aarch64 ->>>>0 uleshort 0x01c0 ARM ->>>>0 uleshort 0xa641 ARM64EC ->>>>0 uleshort 0x01c2 ARM Thumb ->>>>0 uleshort 0x01c4 ARMv7 Thumb -# TODO for other COFFs -#>>>>0 uleshort 0xABCD COFF_TEMPLATE ->>>>0 default x ->>>>>0 uleshort x type %#04x +>>>>0 use display-coff-processor >>>>0 uleshort x COFF # F_EXEC flag bit >>>>18 leshort ^0x0002 object file @@ -53,6 +96,9 @@ #!:ext cof/o/obj/lib >>>>18 leshort &0x0002 executable #!:mime application/x-coffexec +!:mime application/x-coff-executable +# typically no file name suffix for executables +!:ext / # F_RELFLG flag bit,static object >>>>18 leshort &0x0001 \b, no relocation info # F_LNNO flag bit @@ -79,16 +125,39 @@ # like: 0 2 7 9 10 11 20 35 41 63 71 80 105 146 153 158 170 208 294 572 831 1546 >>>>12 ulelong >0 \b, %d symbols # f_opthdr - optional header size. An object file should have a value of 0 +# like: 72 (IBM\HH\HYPERHLP) >>>>16 uleshort >0 \b, optional header size %u -# f_timdat - file time & date stamp only for little endian +# f_timdat - file time & date stamp >>>>4 ledate >0 \b, created %s # at offset 20 can be optional header, extra bytes FILHSZ-20 because # do not rely on sizeof(FILHDR) to give the correct size for header. # or first section header # additional variables for other COFF files >>>>16 uleshort =0 -# first section name s_name[8] like: .text .data .debug$S .drectve .testseg ->>>>>20 string x \b, 1st section name "%.8s" +# most section names start with point character except samples created by "exotic" compilers +# first section name s_name[8] like: .text .data .debug$S .drectve .testseg .rsrc .rsrc$01 .pad +>>>>>(16.s+20) string x \b, 1st section name "%.8s" +# physical address s_paddr like: 0 +#>>>>>(16.s+28) lelong !0 \b, s_paddr %#8.8x +# virtual address s_vaddr like: 0 +#>>>>>(16.s+32) lelong !0 \b, s_vaddr %#8.8x +# section size s_size +#>>>>>(16.s+36) lelong x \b, s_size %#8.8x +# file ptr to raw data for section s_scnpt +#>>>>>(16.s+40) lelong x \b, s_scnpt %#8.8x +# file ptr to relocation s_relptr like: 0 +#>>>>>(16.s+44) lelong !0 \b, s_relptr %#8.8x +# file ptr to gp histogram s_lnnoptr like: 0 +#>>>>>(16.s+48) lelong !0 \b, s_lnnoptr %#8.8x +# number of relocation entries s_nreloc like: 0 1 2 5 6 8 19h 26h 27h 38h 50h 5Fh 89h Dh 1Ch 69h A9h 1DCh 651h +#>>>>>(16.s+52) uleshort x \b, s_nreloc %#4.4x +# number of gp histogram entries s_nlnno like: 0 +#>>>>>(16.s+54) uleshort !0 \b, s_nlnno %#4.4x +# flags s_flags +#>>>>>(16.s+56) lelong x \b, s_flags %#8.8x +# second section name s_name[8] like: .bss .data .debug$S .rsrc$01 +>>>>2 uleshort >1 +>>>>>(16.s+60) string x \b, 2nd section name "%.8s" # >20 beshort 0407 (impure) # >20 beshort 0410 (pure) # >20 beshort 0413 (demand paged) @@ -96,3 +165,53 @@ # >22 leshort >0 - version %d # >168 string .lowmem Apple toolbox +# PowerPC COFF object file or executable +0 leshort 0x01f0 +>16 leshort 0 +>>0 use display-coff +# can be created by: LINK.EXE /MACHINE:powerpc /ROM +>16 leshort !0 +>>18 leshort &0x0002 +>>>20 leshort 0x010b +>>>>0 use display-coff +0 leshort 0x01f1 +>16 leshort 0 +>>0 use display-coff +0 leshort 0x01f2 +>16 leshort 0 +>>0 use display-coff +0 leshort 0x0601 +>16 leshort 0 +>>0 use display-coff +# can be created by: LINK.EXE /MACHINE:MPPC /ROM +>16 leshort !0 +>>18 leshort &0x0002 +>>>20 leshort 0x010b +>>>>0 use display-coff + +0 name display-subsystem +>0 ubyte 0 unknown +>0 ubyte 1 native +>0 ubyte 2 windows_gui +>0 ubyte 3 windows_cui +>0 ubyte 7 posix_cui +>0 ubyte 9 windows_ce_gui +>0 ubyte 10 efi_application +>0 ubyte 11 efi_boot_service_driver +>0 ubyte 12 efi_runtime_driver +>0 ubyte 13 efi_rom +>0 ubyte 14 xbox +>0 ubyte 16 windows_boot-application +>0 default x Unknown subsystem +>>0 ubyte x %#x + + +# https://formats.kaitai.io/uefi_te/index.html +0 string VZ TE (Terse Executable) file +>2 use display-coff-processor +>4 byte x \b, sections %d +>5 use display-subsystem +>6 uleshort x \b, stripped-size %u +>8 ulelong x \b, entry %#x +>12 ulelong x \b, base_of_code %#x +>16 ulequad x \b, image_base %#llx diff --git a/magic/Magdir/commands b/magic/Magdir/commands index 6ad87fd7578d..88aa6920be86 100644 --- a/magic/Magdir/commands +++ b/magic/Magdir/commands @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: commands,v 1.73 2022/11/06 18:39:23 christos Exp $ +# $File: commands,v 1.77 2024/11/10 16:55:15 christos Exp $ # commands: file(1) magic for various shells and interpreters # #0 string/w : shell archive or script for antique kernel text @@ -89,6 +89,13 @@ !:mime text/x-shellscript 0 string/fwt #!\ /usr/bin/env\ bash Bourne-Again shell script text executable !:mime text/x-shellscript +0 string/fwt #!\ /bin/env\ bash Bourne-Again shell script text executable +!:mime text/x-shellscript + +0 string/fwt #!\ /bin/dash Dash shell script text executable +!:mime text/x-shellscript +0 string/fwt #!\ /usr/bin/dash Dash shell script text executable +!:mime text/x-shellscript # Fish shell magic # From: Benjamin Lowry <ben@ben.gmbh> @@ -110,6 +117,8 @@ 0 search/1/fwt #!\ /usr/bin/stap Systemtap script text executable !:mime text/x-systemtap +0 search/1/fwt #!\ /sbin/openrc-run OpenRC script text executable +!:mime text/x-shellscript # From: Kylie McClain <kylie@somas.is> # Type: execline scripts @@ -127,6 +136,9 @@ >0 regex \^#!.*/bin/execlineb([[:space:]].*)*$ execline script text executable !:mime text/x-execline +0 string #!/nix/store/ +>&-11 string/T x a %s script text executable + # PHP scripts # Ulf Harnhammar <ulfh@update.uu.se> 0 search/1/c =<?php PHP script text diff --git a/magic/Magdir/compress b/magic/Magdir/compress index c3f93fa3bed1..78395c526a63 100644 --- a/magic/Magdir/compress +++ b/magic/Magdir/compress @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------ -# $File: compress,v 1.91 2023/06/16 19:37:47 christos Exp $ +# $File: compress,v 1.96 2024/11/09 23:47:04 christos Exp $ # compress: file(1) magic for pure-compression formats (no archives) # # compress, gzip, pack, compact, huf, squeeze, crunch, freeze, yabba, etc. @@ -203,6 +203,7 @@ # lzop from <markus.oberhumer@jk.uni-linz.ac.at> 0 string \x89\x4c\x5a\x4f\x00\x0d\x0a\x1a\x0a lzop compressed data !:ext lzo +!:mime application/x-lzop >9 beshort <0x0940 >>9 byte&0xf0 =0x00 - version 0. >>9 beshort&0x0fff x \b%03x, @@ -376,18 +377,15 @@ 0 string ArC\x01 FreeArc archive <http://freearc.org> -# Type: DACT compressed files -0 long 0x444354C3 DACT compressed data ->4 byte >-1 (version %i. ->5 byte >-1 %i. ->6 byte >-1 %i) ->7 long >0 , original size: %i bytes ->15 long >30 , block size: %i bytes - # Valve Pack (VPK) files +# https://developer.valvesoftware.com/wiki/VPK_(file_format)#File_Format 0 lelong 0x55aa1234 Valve Pak file >0x4 lelong x \b, version %u ->0x8 lelong x \b, %u entries +>0x8 lelong x \b, tree size %u +>0x12 lelong x \b, file data size %u +>0x16 lelong x \b, archive MD5 size %u +>0x20 lelong x \b, other MD5 size %u +>0x24 lelong x \b, signature size %u # Snappy framing format # https://code.google.com/p/snappy/source/browse/trunk/framing_format.txt @@ -424,11 +422,6 @@ 0 string bvx2 lzfse compressed, compressed tables 0 string bvxn lzfse encoded, lzvn compressed -# pcxLib.exe compression program -# http://www.shikadi.net/moddingwiki/PCX_Library -0 string/b pcxLib ->0x0A string/b Copyright\020(c)\020Genus\020Microprogramming,\020Inc. pcxLib compressed - # https://support-docs.illumina.com/SW/ORA_Format_Specification/Content/SW/ORA/ORAFormatSpecification.htm 0 uleshort 0x7c49 >2 lelong 0x80 ORA FASTQ compressed file @@ -459,3 +452,7 @@ >-125 u8 x NB reads: %llu, >-109 u8 x NB bases: %llu. >-219 u4&0x02 2 File contains interleaved paired reads + +# https://github.com/xamarin/xamarin-android/pull/4686 +0 string XALZ Xamarin LZ4-compressed assembly +>8 ulelong x \b, uncompressed size %u diff --git a/magic/Magdir/console b/magic/Magdir/console index 0ed53fe34d15..8fef21f73ab8 100644 --- a/magic/Magdir/console +++ b/magic/Magdir/console @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: console,v 1.72 2023/06/16 19:24:06 christos Exp $ +# $File: console,v 1.80 2024/11/09 23:55:02 christos Exp $ # Console game magic # Toby Deshane <hac@shoelace.digivill.net> @@ -115,17 +115,18 @@ # gameboy: file(1) magic for the Nintendo (Color) Gameboy raw ROM format # Reference: http://gbdev.gg8.se/wiki/articles/The_Cartridge_Header # -0x104 bequad 0xCEED6666CC0D000B Game Boy ROM image -# TODO: application/x-gameboy-color-rom for GBC. -!:mime application/x-gameboy-rom + +# Title (16 chars for GB; 15 chars for CGB) +0 name gameboy-title >0x143 byte&0x80 0x80 >>0x134 string >\0 \b: "%.15s" >0x143 byte&0x80 !0x80 >>0x134 string >\0 \b: "%.16s" >0x14c byte x (Rev.%02u) -# Machine type. (SGB, CGB, SGB+CGB) +# Machine type (SGB, CGB, SGB+CGB) # Old licensee code 0x33 is required for SGB, but not CGB. +0 name gameboy-machine-type >0x14b byte 0x33 >>0x146 byte 0x03 >>>0x143 byte&0x80 0x80 [SGB+CGB] @@ -137,53 +138,78 @@ >>0x143 byte&0xC0 0x80 [CGB] >>0x143 byte&0xC0 0xC0 [CGB ONLY] -# Mapper. ->0x147 byte 0x00 [ROM ONLY] ->0x147 byte 0x01 [MBC1] ->0x147 byte 0x02 [MBC1+RAM] ->0x147 byte 0x03 [MBC1+RAM+BATT] ->0x147 byte 0x05 [MBC2] ->0x147 byte 0x06 [MBC2+BATTERY] ->0x147 byte 0x08 [ROM+RAM] ->0x147 byte 0x09 [ROM+RAM+BATTERY] ->0x147 byte 0x0B [MMM01] ->0x147 byte 0x0C [MMM01+SRAM] ->0x147 byte 0x0D [MMM01+SRAM+BATT] ->0x147 byte 0x0F [MBC3+TIMER+BATT] ->0x147 byte 0x10 [MBC3+TIMER+RAM+BATT] ->0x147 byte 0x11 [MBC3] ->0x147 byte 0x12 [MBC3+RAM] ->0x147 byte 0x13 [MBC3+RAM+BATT] ->0x147 byte 0x19 [MBC5] ->0x147 byte 0x1A [MBC5+RAM] ->0x147 byte 0x1B [MBC5+RAM+BATT] ->0x147 byte 0x1C [MBC5+RUMBLE] ->0x147 byte 0x1D [MBC5+RUMBLE+SRAM] ->0x147 byte 0x1E [MBC5+RUMBLE+SRAM+BATT] ->0x147 byte 0xFC [Pocket Camera] ->0x147 byte 0xFD [Bandai TAMA5] ->0x147 byte 0xFE [Hudson HuC-3] ->0x147 byte 0xFF [Hudson HuC-1] - -# ROM size. ->0x148 byte 0 \b, ROM: 256Kbit ->0x148 byte 1 \b, ROM: 512Kbit ->0x148 byte 2 \b, ROM: 1Mbit ->0x148 byte 3 \b, ROM: 2Mbit ->0x148 byte 4 \b, ROM: 4Mbit ->0x148 byte 5 \b, ROM: 8Mbit ->0x148 byte 6 \b, ROM: 16Mbit ->0x148 byte 7 \b, ROM: 32Mbit ->0x148 byte 0x52 \b, ROM: 9Mbit ->0x148 byte 0x53 \b, ROM: 10Mbit ->0x148 byte 0x54 \b, ROM: 12Mbit - -# RAM size. ->0x149 byte 1 \b, RAM: 16Kbit ->0x149 byte 2 \b, RAM: 64Kbit ->0x149 byte 3 \b, RAM: 256Kbit ->0x149 byte 4 \b, RAM: 1Mbit ->0x149 byte 5 \b, RAM: 512Kbit +# Mapper +0 name gameboy-mapper +>0 byte 0x00 [ROM ONLY] +>0 byte 0x01 [MBC1] +>0 byte 0x02 [MBC1+RAM] +>0 byte 0x03 [MBC1+RAM+BATT] +>0 byte 0x05 [MBC2] +>0 byte 0x06 [MBC2+BATTERY] +>0 byte 0x08 [ROM+RAM] +>0 byte 0x09 [ROM+RAM+BATTERY] +>0 byte 0x0B [MMM01] +>0 byte 0x0C [MMM01+SRAM] +>0 byte 0x0D [MMM01+SRAM+BATT] +>0 byte 0x0F [MBC3+TIMER+BATT] +>0 byte 0x10 [MBC3+TIMER+RAM+BATT] +>0 byte 0x11 [MBC3] +>0 byte 0x12 [MBC3+RAM] +>0 byte 0x13 [MBC3+RAM+BATT] +>0 byte 0x19 [MBC5] +>0 byte 0x1A [MBC5+RAM] +>0 byte 0x1B [MBC5+RAM+BATT] +>0 byte 0x1C [MBC5+RUMBLE] +>0 byte 0x1D [MBC5+RUMBLE+SRAM] +>0 byte 0x1E [MBC5+RUMBLE+SRAM+BATT] +>0 byte 0xFC [Pocket Camera] +>0 byte 0xFD [Bandai TAMA5] +>0 byte 0xFE [Hudson HuC-3] +>0 byte 0xFF [Hudson HuC-1] + +# ROM size +0 name gameboy-rom-size +>0 byte 0 \b, ROM: 256Kbit +>0 byte 1 \b, ROM: 512Kbit +>0 byte 2 \b, ROM: 1Mbit +>0 byte 3 \b, ROM: 2Mbit +>0 byte 4 \b, ROM: 4Mbit +>0 byte 5 \b, ROM: 8Mbit +>0 byte 6 \b, ROM: 16Mbit +>0 byte 7 \b, ROM: 32Mbit +>0 byte 0x52 \b, ROM: 9Mbit +>0 byte 0x53 \b, ROM: 10Mbit +>0 byte 0x54 \b, ROM: 12Mbit + +# RAM size +0 name gameboy-ram-size +>0 byte 1 \b, RAM: 16Kbit +>0 byte 2 \b, RAM: 64Kbit +>0 byte 3 \b, RAM: 256Kbit +>0 byte 4 \b, RAM: 1Mbit +>0 byte 5 \b, RAM: 512Kbit + +# Game Boy (Color) +0x104 bequad 0xCEED6666CC0D000B +>0x143 byte&0x80 0x80 Game Boy Color ROM image +!:mime application/x-gameboy-color-rom +>0x143 byte&0x80 !0x80 Game Boy ROM image +!:mime application/x-gameboy-rom +>0 use gameboy-title +>0 use gameboy-machine-type +>0x147 use gameboy-mapper +>0x148 use gameboy-rom-size +>0x149 use gameboy-ram-size + +# Analogue Pocket +0x104 bequad 0x0110CEEF000044AA +>0 byte x Analogue Pocket ROM image +!:mime application/x-analogue-pocket-rom +>0 use gameboy-title +>0 use gameboy-machine-type +>0x147 use gameboy-mapper +>0x148 use gameboy-rom-size +>0x149 use gameboy-ram-size #------------------------------------------------------------------------------ # genesis: file(1) magic for various Sega Mega Drive / Genesis ROM image and disc formats @@ -210,45 +236,45 @@ # TODO: Check for 32X CD? # Sega Mega CD disc images: 2048-byte sectors. -0 string SEGADISCSYSTEM\ \ Sega Mega CD disc image +0 string SEGADISCSYSTEM\040\040 Sega Mega CD disc image !:mime application/x-sega-cd-rom >0 use sega-mega-drive-header >0 byte x \b, 2048-byte sectors -0 string SEGABOOTDISC\ \ \ \ Sega Mega CD disc image +0 string SEGABOOTDISC\040\040\040\040 Sega Mega CD disc image !:mime application/x-sega-cd-rom >0 use sega-mega-drive-header >0 byte x \b, 2048-byte sectors # Sega Mega CD disc images: 2352-byte sectors. -0x10 string SEGADISCSYSTEM\ \ Sega Mega CD disc image +0x10 string SEGADISCSYSTEM\040\040 Sega Mega CD disc image !:mime application/x-sega-cd-rom >0x10 use sega-mega-drive-header >0 byte x \b, 2352-byte sectors -0x10 string SEGABOOTDISC\ \ \ \ Sega Mega CD disc image +0x10 string SEGABOOTDISC\040\040\040\040 Sega Mega CD disc image !:mime application/x-sega-cd-rom >0x10 use sega-mega-drive-header >0 byte x \b, 2352-byte sectors # Sega Mega Drive: Identify the system ID. 0x100 string SEGA ->0x3C0 string MARS\ CHECK\ MODE Sega 32X ROM image +>0x3C0 string MARS\040CHECK\040MODE Sega 32X ROM image !:mime application/x-genesis-32x-rom >>0 use sega-mega-drive-header ->0x104 string \ PICO Sega Pico ROM image +>0x104 string \040PICO Sega Pico ROM image !:mime application/x-sega-pico-rom >>0 use sega-mega-drive-header ->0x104 string TOYS\ PICO Sega Pico ROM image +>0x104 string TOYS\040PICO Sega Pico ROM image !:mime application/x-sega-pico-rom >>0 use sega-mega-drive-header ->0x104 string \ TOYS\ PICO Sega Pico ROM image +>0x104 string \040TOYS\040PICO Sega Pico ROM image !:mime application/x-sega-pico-rom >>0 use sega-mega-drive-header ->0x104 string \ IAC Sega Pico ROM image +>0x104 string \040IAC Sega Pico ROM image !:mime application/x-sega-pico-rom >>0 use sega-mega-drive-header ->0x104 string \ TERA68K Sega Teradrive (68K) ROM image +>0x104 string \040TERA68K Sega Teradrive (68K) ROM image !:mime application/x-sega-teradrive-rom >>0 use sega-mega-drive-header ->0x104 string \ TERA286 Sega Teradrive (286) ROM image +>0x104 string \040TERA286 Sega Teradrive (286) ROM image !:mime application/x-sega-teradrive-rom >>0 use sega-mega-drive-header >0x180 string BR Sega Mega CD Boot ROM image @@ -259,23 +285,23 @@ >>0 use sega-mega-drive-header # Sega Mega Drive: Some ROMs have "SEGA" at 0x101, not 0x100. -0x100 string \ SEGA Sega Mega Drive / Genesis ROM image +0x100 string \040SEGA Sega Mega Drive / Genesis ROM image >0 use sega-mega-drive-header # Sega Pico ROMs that don't start with "SEGA". -0x100 string SAMSUNG\ PICO Samsung Pico ROM image +0x100 string SAMSUNG\040PICO Samsung Pico ROM image !:mime application/x-sega-pico-rom >0 use sega-mega-drive-header -0x100 string IMA\ IKUNOUJYUKU Samsung Pico ROM image +0x100 string IMA\040IKUNOUJYUKU Samsung Pico ROM image !:mime application/x-sega-pico-rom >0 use sega-mega-drive-header -0x100 string IMA IKUNOJYUKU Samsung Pico ROM image +0x100 string IMA\040IKUNOJYUKU Samsung Pico ROM image !:mime application/x-sega-pico-rom >0 use sega-mega-drive-header # Sega Picture Magic (modified 32X) -0x100 string Picture\ Magic ->0x3C0 string PICTURE MAGIC-01 Sega 32X ROM image +0x100 string Picture\040Magic +>0x3C0 string PICTURE\040MAGIC-01 Sega 32X ROM image !:mime application/x-genesis-32x-rom >>0 use sega-mega-drive-header @@ -314,59 +340,59 @@ # The SMS boot ROM checks the header at three locations. 0 name sega-master-system-rom-header # Machine type. ->0x0F byte&0xF0 0x30 Sega Master System +>0x0F ubyte&0xF0 0x30 Sega Master System !:mime application/x-sms-rom ->0x0F byte&0xF0 0x40 Sega Master System +>0x0F ubyte&0xF0 0x40 Sega Master System !:mime application/x-sms-rom ->0x0F byte&0xF0 0x50 Sega Game Gear +>0x0F ubyte&0xF0 0x50 Sega Game Gear !:mime application/x-gamegear-rom ->0x0F byte&0xF0 0x60 Sega Game Gear +>0x0F ubyte&0xF0 0x60 Sega Game Gear !:mime application/x-gamegear-rom ->0x0F byte&0xF0 0x70 Sega Game Gear +>0x0F ubyte&0xF0 0x70 Sega Game Gear !:mime application/x-gamegear-rom >0x0F default x Sega Master System / Game Gear !:mime application/x-sms-rom >0 byte x ROM image: # Product code. ->0x0E byte&0xF0 0x10 1 ->0x0E byte&0xF0 0x20 2 ->0x0E byte&0xF0 0x30 3 ->0x0E byte&0xF0 0x40 4 ->0x0E byte&0xF0 0x50 5 ->0x0E byte&0xF0 0x60 6 ->0x0E byte&0xF0 0x70 7 ->0x0E byte&0xF0 0x80 8 ->0x0E byte&0xF0 0x90 9 ->0x0E byte&0xF0 0xA0 10 ->0x0E byte&0xF0 0xB0 11 ->0x0E byte&0xF0 0xC0 12 ->0x0E byte&0xF0 0xD0 13 ->0x0E byte&0xF0 0xE0 14 ->0x0E byte&0xF0 0xF0 15 +>0x0E ubyte&0xF0 0x10 1 +>0x0E ubyte&0xF0 0x20 2 +>0x0E ubyte&0xF0 0x30 3 +>0x0E ubyte&0xF0 0x40 4 +>0x0E ubyte&0xF0 0x50 5 +>0x0E ubyte&0xF0 0x60 6 +>0x0E ubyte&0xF0 0x70 7 +>0x0E ubyte&0xF0 0x80 8 +>0x0E ubyte&0xF0 0x90 9 +>0x0E ubyte&0xF0 0xA0 10 +>0x0E ubyte&0xF0 0xB0 11 +>0x0E ubyte&0xF0 0xC0 12 +>0x0E ubyte&0xF0 0xD0 13 +>0x0E ubyte&0xF0 0xE0 14 +>0x0E ubyte&0xF0 0xF0 15 # If the product code is 5 digits, we'll need to backspace here. ->0x0E byte&0xF0 !0 ->>0x0C leshort x \b%04x ->0x0E byte&0xF0 0 ->>0x0C leshort x %04x +>0x0E ubyte&0xF0 !0 +>>0x0C uleshort x \b%04x +>0x0E ubyte&0xF0 0 +>>0x0C uleshort x %04x # Revision. ->0x0E byte&0x0F x (Rev.%02d) +>0x0E ubyte&0x0F x (Rev.%02d) # ROM size. (Used for the boot ROM checksum routine.) ->0x0F byte&0x0F 0x0A (8 KB) ->0x0F byte&0x0F 0x0B (16 KB) ->0x0F byte&0x0F 0x0C (32 KB) ->0x0F byte&0x0F 0x0D (48 KB) ->0x0F byte&0x0F 0x0E (64 KB) ->0x0F byte&0x0F 0x0F (128 KB) ->0x0F byte&0x0F 0x00 (256 KB) ->0x0F byte&0x0F 0x01 (512 KB) ->0x0F byte&0x0F 0x02 (1 MB) +>0x0F ubyte&0x0F 0x0A (8 KB) +>0x0F ubyte&0x0F 0x0B (16 KB) +>0x0F ubyte&0x0F 0x0C (32 KB) +>0x0F ubyte&0x0F 0x0D (48 KB) +>0x0F ubyte&0x0F 0x0E (64 KB) +>0x0F ubyte&0x0F 0x0F (128 KB) +>0x0F ubyte&0x0F 0x00 (256 KB) +>0x0F ubyte&0x0F 0x01 (512 KB) +>0x0F ubyte&0x0F 0x02 (1 MB) # SMS/GG header locations. -0x7FF0 string TMR\ SEGA +0x7FF0 string TMR\040SEGA >0x7FF0 use sega-master-system-rom-header -0x3FF0 string TMR\ SEGA +0x3FF0 string TMR\040SEGA >0x3FF0 use sega-master-system-rom-header -0x1FF0 string TMR\ SEGA +0x1FF0 string TMR\040SEGA >0x1FF0 use sega-master-system-rom-header #------------------------------------------------------------------------------ @@ -384,12 +410,12 @@ >>0x2A byte 0 \b) # 2048-byte sector version. -0 string SEGA\ SEGASATURN\ Sega Saturn disc image +0 string SEGA\040SEGASATURN\040 Sega Saturn disc image !:mime application/x-saturn-rom >0 use sega-saturn-disc-header >0 byte x (2048-byte sectors) # 2352-byte sector version. -0x10 string SEGA\ SEGASATURN\ Sega Saturn disc image +0x10 string SEGA\040SEGASATURN\040 Sega Saturn disc image !:mime application/x-saturn-rom >0x10 use sega-saturn-disc-header >0 byte x (2352-byte sectors) @@ -410,12 +436,12 @@ >>0x4A byte 0 \b) # 2048-byte sector version. -0 string SEGA\ SEGAKATANA\ Sega Dreamcast disc image +0 string SEGA\040SEGAKATANA\040 Sega Dreamcast disc image !:mime application/x-dc-rom >0 use sega-dreamcast-disc-header >0 byte x (2048-byte sectors) # 2352-byte sector version. -0x10 string SEGA\ SEGAKATANA\ Sega Dreamcast disc image +0x10 string SEGA\040SEGAKATANA\040 Sega Dreamcast disc image !:mime application/x-dc-rom >0x10 use sega-dreamcast-disc-header >0 byte x (2352-byte sectors) @@ -509,7 +535,7 @@ # - https://neogpc.googlecode.com/svn-history/r10/trunk/src/core/neogpc.cpp # - https://www.devrs.com/ngp/files/ngpctech.txt # -0x0A string BY\ SNK\ CORPORATION Neo Geo Pocket +0x0A string BY\040SNK\040CORPORATION Neo Geo Pocket !:mime application/x-neo-geo-pocket-rom >0x23 byte 0x10 Color >0 byte x ROM image @@ -524,7 +550,7 @@ #------------------------------------------------------------------------------ # Sony Playstation executables (Adam Sjoegren <asjo@diku.dk>) : -0 string PS-X\ EXE Sony Playstation executable +0 string PS-X\040EXE Sony Playstation executable >16 lelong x PC=%#08x, >20 lelong !0 GP=%#08x, >24 lelong !0 .text=[%#08x, @@ -723,17 +749,54 @@ # From: Alex Myczko <alex@aiei.ch> # From: David Pflug <david@pflug.email> +# Update: Joerg Jenderek +# URL: http://fileformats.archiveteam.org/wiki/Game_Boy_Sound +# http://en.wikipedia.org/wiki/Game_Boy_Sound_System +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/g/gbs.trid.xml +# Note: called "GameBoy Sound System dump" by TrID, +# "Gameboy GBS rom image" by X11 Gameboy sound player xgbsplay and +# verified by gbsplay `LANG=C gbsinfo /usr/share/doc/gbsplay/examples/nightmode.gbs` # is the offset 12 or the offset 16 correct? # GBS (Game Boy Sound) magic -# ftp://ftp.modland.com/pub/documents/format_documentation/\ +# http://ftp.modland.com/pub/documents/format_documentation/\ # Gameboy%20Sound%20System%20(.gbs).txt -0 string GBS Nintendo Gameboy Music/Audio Data -#12 string GameBoy\ Music\ Module Nintendo Gameboy Music Module +# skip Grand Theft Auto 2 Style data (*.sty via sty-gta2.trid.xml) and Opera (*.patch) by check for valid "low" version +0 string GBS\001 Nintendo Gameboy Music/Audio Data +!:mime audio/x-nintendo-gbs +# by gbsplay or xgbsplay tools +#!:mime audio/gbs +#!:mime audio/prs.gbs +!:ext gbs +# fields are right null-filled; no terminating \0 if all bytes are used; if field unknown, should be set to a single ? +# title string like: "Blues Brothers" "Bugs Bunny Crazy Castle 3" +#12 string GameBoy\040Music\040Module Nintendo Gameboy Music Module >16 string >\0 ("%.32s" by +# author string like: <?>, by Laxity, Justin Muir, 1993 Ocean >48 string >\0 %.32s, copyright ->80 string >\0 %.32s), ->3 byte x version %u, ->4 byte x %u tracks +# copyright string like: empty "1991 Titus" "2001 Imagineer/KT.Kodansha/P&B" "2000 Newline, Ubisoft, D. Eclip." +>80 string >\0 %.32s +# GBSVersion; 1 +#>3 byte !1 version %u, +# number of songs (1-255) +>4 ubyte x \b), %u track +# plural s +>4 ubyte >1 \bs +# default subsong; like: 1 (often) 2 29 60 79 82 +>5 ubyte !1 \b, %u first +# load address (400h-7fffh) +>6 uleshort x \b, load address %#4.4x +# init address (400h-7fffh) +>8 uleshort x \b, init address %#4.4x +# play address (400-7fffh) +>10 uleshort x \b, play address %#4.4x +# stack pointer; like: FFFEh (default) CFFFh DCFEh DDFEh DDFFh DEFFh E000h FFF4h +>12 uleshort x \b, stack pointer %#4.4x +# timer modulo; often 0 +>14 ubyte !0 \b, timer modulo %#x +# timer control; often 0 +>15 ubyte !0 \b, timer control %#x +# code and Data (see RST VECTORS) +#>0x70 ubequad x \b, data %#16.16llx... # IPS Patch Files from: From: Thomas Klausner <tk@giga.or.at> # see https://zerosoft.zophar.net/ips.php @@ -807,6 +870,37 @@ !:ext ciso/cso >>>>8 ulequad x \b, original size %llu bytes >>>>16 ulelong x \b, datablock size %u bytes +# Type: Nintendo GameCube/Wii disc image (CISO format) +# NOTE: This is NOT the same as Compact ISO or PSP CISO, +# though it has the same magic number. +# Other fields are used to determine what type of CISO this is: +# - 0x04 == 0x00200000: GameCube/Wii CISO (block_size) +# - 0x10 == 0x00000800: PSP CISO (ISO-9660 sector size) +# - None of the above: Compact ISO. +>4 lelong 0x200000 +>>8 byte 1 +>>>0x801C belong 0xC2339F3D Nintendo GameCube disc image (CISO format): +!:mime application/x-wii-rom +>>>>0x8000 use nintendo-gcn-disc-common +>>>0x8018 belong 0x5D1C9EA3 Nintendo Wii disc image (CISO format): +!:mime application/x-wii-rom +>>>>0x8000 use nintendo-gcn-disc-common +# .cso files +# Reference: https://pismotec.com/ciso/ciso.h +# NOTE: There are two other formats with the same magic but +# completely incompatible specifications: +# - GameCube/Wii CISO: https://github.com/dolphin-emu/dolphin/blob/master/Source/Core/DiscIO/CISOBlob.h +# - PSP CISO: https://github.com/jamie/ciso/blob/master/ciso.h +# Other fields are used to determine what type of CISO this is: +# - 0x04 == 0x00200000: GameCube/Wii CISO (block_size) +# - 0x10 == 0x00000800: PSP CISO (ISO-9660 sector size) +# - 0x10 == 0x00004000: For >2GB files using maxcso... +# https://github.com/unknownbrackets/maxcso/issues/26 +# - None of the above: Compact ISO. +>4 lelong !0 +>>4 lelong !0x200000 +>>>16 lelong !0x800 +>>>>16 lelong !0x4000 Compressed ISO CD image # From: Daniel Dawson <ddawson@icehouse.net> # SNES9x .smv "movie" file format. @@ -918,22 +1012,6 @@ !:mime application/x-wii-rom >>0x200 use nintendo-gcn-disc-common -# Type: Nintendo GameCube/Wii disc image (CISO format) -# NOTE: This is NOT the same as Compact ISO or PSP CISO, -# though it has the same magic number. -0 string CISO -# Other fields are used to determine what type of CISO this is: -# - 0x04 == 0x00200000: GameCube/Wii CISO (block_size) -# - 0x10 == 0x00000800: PSP CISO (ISO-9660 sector size) -# - None of the above: Compact ISO. ->4 lelong 0x200000 ->>8 byte 1 ->>>0x801C belong 0xC2339F3D Nintendo GameCube disc image (CISO format): -!:mime application/x-wii-rom ->>>>0x8000 use nintendo-gcn-disc-common ->>>0x8018 belong 0x5D1C9EA3 Nintendo Wii disc image (CISO format): -!:mime application/x-wii-rom ->>>>0x8000 use nintendo-gcn-disc-common # Type: Nintendo GameCube/Wii disc image (GCZ format) # Due to zlib compression, we can't get the actual disc information. @@ -1133,7 +1211,7 @@ # The header is terminated with a 0, so that will # terminate the title as well. # -0 string g\ GCE Vectrex ROM image +0 string g\040GCE Vectrex ROM image >0x11 string >\0 \b: "%.16s" #------------------------------------------------------------------------------ @@ -1213,8 +1291,8 @@ # From: David Korth <gerbilsoft@gerbilsoft.com> # References: # - https://problemkaputt.de/fullsnes.htm#snescartsufamiturbominicartridgeadaptor -0 string BANDAI\ SFC-ADX ->0x10 string !SFC-ADX\ BACKUP Sufami Turbo ROM image: +0 string BANDAI\040SFC-ADX +>0x10 string !SFC-ADX\040BACKUP Sufami Turbo ROM image: >>0x10 string/T x "%.14s" >>0x30 byte x \b, ID %02X >>0x31 byte x \b%02X @@ -1224,3 +1302,77 @@ >>0x34 ubyte 1 [FastROM] >>0x35 ubyte 1 [SRAM] >>0x35 ubyte 3 [Special] + +#------------------------------------------------------------------------------ +# Type: Super NES ROM image +# From: Alexandre Iooss <erdnaxe@crans.org> +# Reference: https://snes.nesdev.org/wiki/ROM_header +0 name snes-rom-hdr +# cartridge title is encoded in JIS X 0201, 21 chars padded with spaces +>0 ubyte-0x20 <0xC0 +>>1 ubyte-0x20 <0xC0 +>>>2 ubyte-0x20 <0xC0 +>>>>3 ubyte-0x20 <0xC0 +>>>>>4 ubyte-0x20 <0xC0 +>>>>>>5 ubyte-0x20 <0xC0 +>>>>>>>6 ubyte-0x20 <0xC0 +>>>>>>>>7 ubyte-0x20 <0xC0 +>>>>>>>>>8 ubyte-0x20 <0xC0 +>>>>>>>>>>9 ubyte-0x20 <0xC0 +>>>>>>>>>>>10 ubyte-0x20 <0xC0 +>>>>>>>>>>>>21 ubyte-0x20 <0xC0 Super NES ROM image +>>>>>>>>>>>>>0 string/21/T x "%s" +>>>>>>>>>>>>>25 byte 0 (Japan) +>>>>>>>>>>>>>25 byte 1 (USA) +>>>>>>>>>>>>>25 byte 2 (Europe) +>>>>>>>>>>>>>25 byte 6 (France) +>>>>>>>>>>>>>25 byte 7 (Netherlands) +>>>>>>>>>>>>>25 byte 9 (Germany) +>>>>>>>>>>>>>25 byte 10 (Brazil) +>>>>>>>>>>>>>27 byte >0 (Rev.%02u) +>>>>>>>>>>>>>21 byte&0xF 0x0 \b, LoROM +>>>>>>>>>>>>>21 byte&0xF 0x1 \b, HiROM +>>>>>>>>>>>>>21 byte&0x10 0x10 \b, FastROM +>>>>>>>>>>>>>23 byte 8 \b, ROM size: 256KB +>>>>>>>>>>>>>23 byte 9 \b, ROM size: 512KB +>>>>>>>>>>>>>23 byte 10 \b, ROM size: 1024KB +>>>>>>>>>>>>>23 byte 11 \b, ROM size: 2048KB +>>>>>>>>>>>>>23 byte 12 \b, ROM size: 4096KB +>>>>>>>>>>>>>24 byte 0 \b, RAM size: 1KB +>>>>>>>>>>>>>24 byte 1 \b, RAM size: 2KB +>>>>>>>>>>>>>24 byte 2 \b, RAM size: 4KB +>>>>>>>>>>>>>24 byte 3 \b, RAM size: 8KB +>>>>>>>>>>>>>24 byte 4 \b, RAM size: 16KB +>>>>>>>>>>>>>24 byte 5 \b, RAM size: 32KB +>>>>>>>>>>>>>24 byte 6 \b, RAM size: 64KB + +# header position for LoROM: $007FC0 +32725 ubyte&0xEF 0x20 +# ROM is <=4096KB, RAM is <=64KB and country<=10 +>32727 ubyte <13 +>>32728 ubyte <7 +>>>32729 ubyte <11 +>>>>32704 use snes-rom-hdr + +# HiROM header at $00FFC0 +65493 ubyte&0xEF 0x21 +# ROM is <=4096KB, RAM is <=64KB and country<=10 +>65495 ubyte <13 +>>65496 ubyte <7 +>>>65497 ubyte <11 +>>>>65472 use snes-rom-hdr + +#------------------------------------------------------------------------------ +# ancast: file(1) magic for Wii U firmware images, aka "ancast" images. +# From: David Korth <gerbilsoft@gerbilsoft.com> +# References: +# - https://wiiubrew.org/wiki/Ancast_image +0 ubelong 0xEFA282D9 Wii U firmware image: +>0x20 ubelong 2 ARM +>>0x1A4 ubelong 0x21 \b, NAND boot +>>0x1A4 ubelong 0x22 \b, SD boot +>>0x1A8 ubelong 1 \b, for devkits +>>0x1A8 ubelong 2 \b, for retail +>0x20 ubelong 1 PowerPC +>>0xA4 ubelong 0x11 \b, Wii U mode +>>0xA4 ubelong 0x12 \b, Wii mode diff --git a/magic/Magdir/ctf b/magic/Magdir/ctf index d91684d18c40..0134b70b1d3c 100644 --- a/magic/Magdir/ctf +++ b/magic/Magdir/ctf @@ -1,5 +1,6 @@ #-------------------------------------------------------------- +# $File: ctf,v 1.5 2024/06/10 23:09:52 christos Exp $ # ctf: file(1) magic for CTF (Common Trace Format) trace files # # Specs. available here: <https://www.efficios.com/ctf> diff --git a/magic/Magdir/database b/magic/Magdir/database index 03ac4235f735..c4462f96675e 100644 --- a/magic/Magdir/database +++ b/magic/Magdir/database @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: database,v 1.69 2023/01/12 00:14:04 christos Exp $ +# $File: database,v 1.73 2024/11/09 19:54:36 christos Exp $ # database: file(1) magic for various databases # # extracted from header/code files by Graeme Wilford (eep2gw@ee.surrey.ac.uk) @@ -740,13 +740,6 @@ >32 lelong 0x2601196D version 6, little-endian >>36 lelong x hash size %d bytes -# SE Linux policy database -0 lelong 0xf97cff8c SE Linux policy ->16 lelong x v%d ->20 lelong 1 MLS ->24 lelong x %d symbols ->28 lelong x %d ocons - # ICE authority file data (Wolfram Kleff) 2 string ICE ICE authority data @@ -820,7 +813,9 @@ 0 string ZEC3 Zope Object Database Client Cache File (data) # IDA (Interactive Disassembler) database +0 string IDA0 IDA (Interactive Disassembler) database 0 string IDA1 IDA (Interactive Disassembler) database +0 string IDA2 IDA (Interactive Disassembler) database # Hopper (reverse engineering tool) https://www.hopperapp.com/ 0 string hopperdb Hopper database @@ -871,8 +866,31 @@ # Used by older versions of Mozilla Suite and Firefox, # and current versions of Thunderbird. # From: David Korth <gerbilsoft@gerbilsoft.com> +# Update: Joerg Jenderek +# URL: http://fileformats.archiveteam.org/wiki/Mork +# https://en.wikipedia.org/wiki/Mork_(file_format) +# Note: called "Mork" by DROID via fmt/612 0 string //\ <!--\ <mdb:mork:z\ v=" Mozilla Mork database +# display Mozilla Mork database (strength=260=260+0) before "exported SGML document" (strength=28=38-10) via ./sgml +#!:strength +0 +#!:mime text/plain +!:mime text/x-mozilla-mork +# version like 1.4 >23 string x \b, version %.3s +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/d/msf.trid.xml +# Note: called "Mozilla Mail Summary file" by TrID +>26 search/7516 mailboxName \b, Mail Summary file +# like: Archives.msf Drafts.msf INBOX.msf Junk.msf Sent.msf Templates.msf Trash.msf +!:ext msf +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/m/mab.trid.xml +# Note: called "Mozilla Address Book" by TrID +>26 search/192 addrbk \b, Address Book +!:ext mab +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/d/dat-mork.trid.xml +# Note: called "Mozilla Mail folder cache" by TrID +>26 search/210 indexingPriority \b, Mail folder cache +# panacea.dat +!:ext dat # URL: https://en.wikipedia.org/wiki/Management_Information_Format # Reference: https://www.dmtf.org/sites/default/files/standards/documents/DSP0005.pdf @@ -884,3 +902,10 @@ !:mime text/x-dmtf-mif !:ext mif +# https://github.com/boltdb/bolt +# https://github.com/etcd-io/bbolt +# See magic value here: https://github.com/boltdb/bolt/blob/fd01fc79c553a8e99d512a07e8e0c63d4a3ccfc5/db.go#L24 +# The magic value is written according to endianess of the host, +# so we check both to detect them also on hosts with differnet endianess +16 lelong 0xED0CDAED BoltDB database +16 belong 0xED0CDAED BoltDB database, big-endian diff --git a/magic/Magdir/dataone b/magic/Magdir/dataone index 566633eff22c..ac32a04b17cd 100644 --- a/magic/Magdir/dataone +++ b/magic/Magdir/dataone @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: dataone,v 1.3 2022/04/18 21:38:10 christos Exp $ +# $File: dataone,v 1.4 2024/08/27 19:17:10 christos Exp $ # # DataONE- files from Dave Vieglais <dave.vieglais@gmail.com> & # Pratik Shrivastava <pratikshrivastava23@gmail.com> @@ -11,6 +11,11 @@ # EML (Ecological Metadata Language Format) 0 string \<?xml\ version= >&0 regex/1024 eml-[0-9]\\.[0-9]\\.[0-9]+ eml://ecoinformatics.org/%s +# Object Reuse and Exchange Vocabulary +>&0 search/1024 rdf +>>&0 search/1024 openarchives https://www.openarchives.org/ore/terms +!:mime application/rdf+xml + # onedcx (DataONE Dublin Core Extended v1.0) >&0 regex/1024 onedcx/v[0-9]\\.[0-9]+ https://ns.dataone.org/metadata/schema/onedcx/v1.0 @@ -34,12 +39,6 @@ !:mime text/xml -# Object Reuse and Exchange Vocabulary -0 string \<?xml\ version= ->&0 search/1024 rdf ->>&0 search/1024 openarchives https://www.openarchives.org/ore/terms -!:mime application/rdf+xml - # Dryad Metadata Application Profile Version 3.1 0 string <DryadData diff --git a/magic/Magdir/diff b/magic/Magdir/diff index a6124e3f703b..f894ab00b890 100644 --- a/magic/Magdir/diff +++ b/magic/Magdir/diff @@ -1,33 +1,142 @@ #------------------------------------------------------------------------------ -# $File: diff,v 1.17 2020/08/22 18:16:58 christos Exp $ +# $File: diff,v 1.21 2024/07/13 14:47:09 christos Exp $ # diff: file(1) magic for diff(1) output # +# Update: Joerg Jenderek +# URL: https://en.wikipedia.org/wiki/Diff +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/d/diff.trid.xml +# Note: called "diff output text" by TrID and +# "Differences between files" by shared MIME-info database from freedesktop.org +# According to shared MIME-info database also tabulator character instead of space character and +# by TrID minus character after space character 0 search/1 diff\040 diff output text +# diff output text (strength=40=40+0) after unified diff output (strength=131=38+93) +#!:strength +0 !:mime text/x-diff +#!:mime text/x-patch +!:ext diff/patch +# no short named pch dif examples found +#!:ext diff/patch/dif/pch +# URL: https://en.wikipedia.org/wiki/Diff_utility#Context_format +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/d/diff-context.trid.xml +# Note: called "context diff output" by TrID +# and "Differences between files" by shared MIME-info database from freedesktop.org 0 search/1 ***\040 +# context diff output text (strength=42=38+4) before +# C source (strength=41,39,37) exported SGML document (strength=39,28) +!:strength +4 >&0 search/1024 \n---\040 context diff output text !:mime text/x-diff +#!:mime text/x-patch +!:ext diff/patch +# no short named pch dif examples found +#!:ext diff/patch/dif/pch 0 search/1 Only\040in\040 diff output text +# diff output text output text (strength=38=38+0) after unified diff output (strength=131=38+93) +#!:strength +0 !:mime text/x-diff +#!:mime text/x-patch +!:ext diff 0 search/1 Common\040subdirectories:\040 diff output text !:mime text/x-diff +# URL: https://en.wikipedia.org/wiki/Diff#Extensions +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/d/diff-rcs.trid.xml +# Note: called "RCS/CVS diff output" by TrID +# and "Differences between files" by shared MIME-info database from freedesktop.org 0 search/1 Index: RCS/CVS diff output text +# RCS/CVS diff output text (strength=36=36+0) after unified diff output (strength=131=38+93) +#!:strength +0 !:mime text/x-diff +#!:mime text/x-patch +!:ext diff/patch # bsdiff: file(1) magic for bsdiff(1) output -0 string/b BSDIFF40 bsdiff(1) patch file +# Update: Joerg Jenderek +# URL: http://www.daemonology.net/bsdiff/ +# Reference: https://github.com/cperciva/bsdiff/blob/master/bsdiff-ra/FORMAT +# http://mark0.net/download/triddefs_xml.7z/defs/b/bsdiff.trid.xml +# Note: called "bsdiff patch" by TrID and and "BSDIFF" version 4.0 by DROID via PUID fmt/439 and +# "Binary differences between files" by shared MIME-info database from freedesktop.org +0 string/b BSDIFF40 +# skip DROID fmt-439-signature-id-672.bsdiff with invalid new file segment length 0 +>16 long !0 bsdiff(1) patch file +#!:mime application/octet-stream +!:mime application/x-bsdiff +!:ext bsdiff +# new file length +#>>8 lequad x \b, new length %lld +# new file segment length +#>>16 lelong x \b, new segment length %d +# compressed header block length +#>>20 lelong !0 \b, compressed header length %d +# patch data block length +#>>24 lequad x \b, data length %lld +# look for bzip data by ./compress after message with 1 space at end +>>0x20 indirect x \b, at 0x20 +# From: Joerg Jenderek +# URL: https://www.chromium.org/developers/design-documents/software-updates-courgette/ +# Reference: https://github.com/adobe/chromium/blob/master/courgette/third_party/bsdiff.h +# http://mark0.net/download/triddefs_xml.7z/defs/b/bsdiff-chrome.trid.xml +# Note: called "Courgette Binary Diff output" by TrID +# the Courgette bsdiff tool use a total different file format compared with BSD variant from Colin Percival +0 string/b GBSDIF42 Courgette binary diff output +#!:mime application/octet-stream +!:mime application/x-patch +!:ext patch/bsdiff +# slen; length of the file to be patched +#>8 ubelong x \b, source length %u +# scrc32; CRC32 of the file to be patched +>12 ubelong x \b, crc %#8.8x +# dlen; length of the result file +#>16 ubelong x \b, result length %u +# cblen; length of the control block +#>20 ubelong x \b, control length %u +# difflen; length of the diff block +#>24 ubelong x \b, patch length %u +# extralen; length of the extra block +#>28 ubelong x \b, extra length %u # unified diff -0 search/4096 ---\040 ->&0 search/1024 \n ->>&0 search/1 +++\040 ->>>&0 search/1024 \n ->>>>&0 search/1 @@ unified diff output text +# URL: http://fileformats.archiveteam.org/wiki/Unified_diff +# https://en.wikipedia.org/wiki/Diff_utility#Unified_format +# Reference: https://www.artima.com/weblogs/viewpost.jsp?thread=164293 +# http://mark0.net/download/triddefs_xml.7z/defs/d/diff-unified.trid.xml +# Note: called "unified diff output" by TrID and +# "Differences between files" by shared MIME-info database from freedesktop.org +# use b flag to forces the test to be done for binary files (non ASCII text like with Ctrl-D Ctrl-V Ctrl-Z) +0 search/4096/b ---\040 +!:strength + 93 +>0 use diff-unified +# most samples are just pure ASCII text like: ShellR64.patch +0 search/11054 ---\040 +# unified diff (strength=131=38+93) before +# HTML document text (strength=170,90,71,53,52,51,49) POSIX shell script (fix-qt5.6-build.patch strength=130 ./commands) +# JavaScript source (strength=112,84,81,80,79,78,72,69) C++ source (strength=71,70,69,68,67,54), +# Python script (strength=69,67,63,60,58,57,56,54,52,37)LaTeX document text (strength=62,56,55,51,43) +# TeX document (strength=51,38) C source (strength=41,39,37) +# exported SGML document (strength=39,28) diff output text (strength=38=38+0) +# Pascal source (strength=37) RCS/CVS diff (strength=36=36+0), +# Algol 68 source (strength=?) CSV ASCII text (strength=?) +!:strength + 93 +>0 use diff-unified +# check for 3 characteristic lines of unified diff +0 name diff-unified +>0 search/11084 +++\040 +>>&0 search/1024 \n +# at signs line sometimes other (with 2 space chars before) like: indent-header.patch +>>>&0 search/2 @@\040- unified diff output text !:mime text/x-diff -!:strength + 90 +#!:mime text/x-patch +# https://file-extension.net/seeker/file_extension_dif file_extension_pch file_extension_rej +!:ext diff/patch/dif/pch/rej +# GRR: mainly for debugging purpose for variants with text before real diff output +>>>>0 string !---\040 +>>>>>0 string x \b, 1st line "%s" +>>>>>>&1 string x \b, 2nd line "%s" +>>>>>>>&1 string x \b, 3rd line "%s" # librsync -- the library for network deltas # diff --git a/magic/Magdir/digital b/magic/Magdir/digital index b2753b989859..55d06c139953 100644 --- a/magic/Magdir/digital +++ b/magic/Magdir/digital @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: digital,v 1.12 2021/07/03 14:01:46 christos Exp $ +# $File: digital,v 1.17 2024/08/30 16:53:22 christos Exp $ # Digital UNIX - Info # 0 string =!<arch>\n________64E Alpha archive @@ -10,7 +10,12 @@ 0 leshort 0603 >24 leshort 0410 COFF format alpha pure >24 leshort 0413 COFF format alpha demand paged +# TODO: use other subroutine (./coff) to display name+flags+variables for common object formatted files +#>0 use display-coff-foo >>22 leshort&030000 !020000 executable +#!:mime application/x-foo-executable +# typically no file name suffix for executables like \DEC\HH\HYPERHLP +!:ext / >>22 leshort&020000 !0 dynamically linked >>16 lelong !0 not stripped >>16 lelong 0 stripped @@ -23,6 +28,19 @@ >>26 byte x \b.%d >>28 byte x \b-%d +# Alpha COFF object file or executable +0 leshort 0x0184 +>16 leshort 0 +>>0 use display-coff +# can be created by LINK.EXE /MACHINE:ALPHA /ROM +>16 leshort !0 +>>18 leshort &0x0002 +>>>20 leshort 0x0107 +>>>>0 use display-coff +0 leshort 0x0284 +>16 leshort 0 +>>0 use display-coff + # Basic recognition of Digital UNIX core dumps - Mike Bremford <mike@opac.bl.uk> # # The actual magic number is just "Core", followed by a 2-byte version diff --git a/magic/Magdir/efi b/magic/Magdir/efi index 7760100b1989..6b40e1519c57 100644 --- a/magic/Magdir/efi +++ b/magic/Magdir/efi @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: efi,v 1.5 2014/04/30 21:41:02 christos Exp $ +# $File: efi,v 1.7 2024/02/18 14:15:22 christos Exp $ # efi: file(1) magic for Universal EFI binaries 0 lelong 0x0ef1fab9 @@ -13,3 +13,46 @@ >>&20 lelong 7 \b, i386 >>&20 lelong 0x01000007 \b, x86_64 >4 lelong >2 Universal EFI binary with %d architectures + +# EFI Signature List +# From: Alexandre Iooss <erdnaxe@crans.org> +# URL: https://git.kernel.org/pub/scm/linux/kernel/git/jejb/efitools.git +0 name efi_sig_list +>0 guid D719B2CB-3D3A-4596-A3BC-DAD00E67656F EFI Signature List, SIG DB +>0 guid 4AAFD29D-68DF-49EE-8AA9-347D375665A7 EFI Signature List, PKCS7 +>0 guid 3C5766E8-269C-4E34-AA14-ED776E85B3B6 EFI Signature List, RSA2048 +>0 guid E2B36190-879B-4A3D-AD8D-F2E7BBA32784 EFI Signature List, RSA2048 SHA256 +>0 guid 67F8444F-8743-48F1-A328-1EAAB8736080 EFI Signature List, RSA2048 SHA1 +>0 guid A7717414-C616-4977-9420-844712A735BF EFI Signature List, RSA2048 SHA256 type +>0 guid 826CA512-CF10-4AC9-B187-BE01496631BD EFI Signature List, SHA1 +>0 guid 0B6E5233-A65C-44C9-9407-D9AB83BFC8BD EFI Signature List, SHA224 +>0 guid C1C41626-504C-4092-ACA9-41F936934328 EFI Signature List, SHA256 +>0 guid FF3E5307-9FD0-48C9-85F1-8AD56C701E01 EFI Signature List, SHA384 +>0 guid 093E0FAE-A6C4-4F50-9F1B-D41E2B89C19A EFI Signature List, SHA512 +>0 guid A5C059A1-94E4-4AA7-87B5-AB155C2BF072 EFI Signature List, X509 +>0 guid 3BD2A492-96C0-4079-B420-FCF98EF103ED EFI Signature List, X509 SHA256 +>0 guid 7076876E-80C2-4EE6-AAD2-28B349A6865B EFI Signature List, X509 SHA384 +>0 guid 446DBF63-2502-4CDA-BCFA-2465D2B0FE9D EFI Signature List, X509 SHA512 +>0 guid 605DAB50-E046-4300-ABB6-3DD810DD8B23 EFI Signature List, MOK_OWNER +>0 guid A46423E3-4617-49F1-B9FF-D1BFA9115839 EFI Signature List, SECURITY PROTOCOL +>0 guid 94AB2F58-1438-4EF1-9152-18941A3A0E68 EFI Signature List, SECURITY2 PROTOCOL +>0 guid AAF32C78-947B-439A-A180-2E144EC37792 EFI Signature List, SECURE VARIABLE +# Hypothesis: EFI Signature List are smaller than 16MiB +19 byte =0 +>23 byte =0 +>>27 byte =0 +>>>0 use efi_sig_list +>>>>16 ulelong x \b, total size: %d bytes +# Variant: EFI Signature List as an EFI variable +# See https://docs.kernel.org/filesystems/efivarfs.html +23 byte =0 +>27 byte =0 +>>31 byte =0 +>>>4 use efi_sig_list +>>>>0 ulelong x \b, EFI variable %d +>>>>20 ulelong x \b, total size: %d bytes + +# EFI byte code COFF object file +0 leshort 0x0ebc +>16 leshort 0 +>>0 use display-coff diff --git a/magic/Magdir/elf b/magic/Magdir/elf index d3ec0260af25..404a509db50e 100644 --- a/magic/Magdir/elf +++ b/magic/Magdir/elf @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: elf,v 1.88 2023/01/08 17:09:18 christos Exp $ +# $File: elf,v 1.91 2024/11/09 23:52:23 christos Exp $ # elf: file(1) magic for ELF executables # # We have to check the byte order flag to see what byte order all the @@ -82,15 +82,15 @@ >18 leshort 0 no machine, >18 leshort 1 AT&T WE32100, >18 leshort 2 SPARC, ->18 leshort 3 Intel 80386, +>18 leshort 3 Intel i386, >18 leshort 4 Motorola m68k, >>4 byte 1 >>>36 lelong &0x01000000 68000, >>>36 lelong &0x00810000 CPU32, >>>36 lelong 0 68020, >18 leshort 5 Motorola m88k, ->18 leshort 6 Intel 80486, ->18 leshort 7 Intel 80860, +>18 leshort 6 Intel i486, +>18 leshort 7 Intel i860, # The official e_machine number for MIPS is now #8, regardless of endianness. # The second number (#10) will be deprecated later. For now, we still # say something if #10 is encountered, but only gory details for #8. @@ -375,5 +375,29 @@ >7 byte 16 (FenixOS) >7 byte 17 (Nuxi CloudABI) >7 byte 97 (ARM) +>7 byte 102 (Cell LV2) >7 byte 202 (Cafe OS) >7 byte 255 (embedded) + +# SELF Signed ELF used on the playstation +# https://www.psdevwiki.com/ps4/SELF_File_Format#make_fself_by_flatz +# https://www.psdevwiki.com/ps3/SELF_-_SPRX +0 lelong 0x4F153D1D +>4 lelong 0x00010112 PS4 Signed ELF file +>8 byte 1 \b, SELF/SPRX signed-elf/prx +>8 byte 2 \b, SRVK signed-revoke-list +>8 byte 3 \b, SPKG signed-package +>8 byte 4 \b, SSPP signed-security-policy-profile +>8 byte 5 \b, SDIFF signed-diff +>8 byte 6 \b, SPSFO signed-param-sfo +>9 byte&0xf0 x \b, version %#x +>9 byte&0x0f 4 \b, game +>9 byte&0x0f 5 \b, module +>9 byte&0x0f 6 \b, video app +>9 byte&0x0f 8 \b, System/EX application +>9 byte&0x0f 9 \b, System/EX module/dll +#>12 leshort x \b, header size %d +#>14 leshort x \b, signature size %d +#>16 lelong x \b, file size %d +#>18 leshort x \b, number of segments %d +#>20 leshort 22 diff --git a/magic/Magdir/epoc b/magic/Magdir/epoc index 6f4ab5fc38e2..98f62fcba62d 100644 --- a/magic/Magdir/epoc +++ b/magic/Magdir/epoc @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: epoc,v 1.9 2013/12/21 14:28:15 christos Exp $ +# $File: epoc,v 1.10 2024/02/14 23:51:54 rrt Exp $ # EPOC : file(1) magic for EPOC documents [Psion Series 5/Osaris/Geofox 1] # Stefan Praszalowicz <hpicollo@worldnet.fr> and Peter Breitenlohner <peb@mppmu.mpg.de> # Useful information for improving this file can be found at: @@ -8,55 +8,82 @@ #------------------------------------------------------------------------------ 0 lelong 0x10000037 Psion Series 5 >4 lelong 0x10000039 font file +!:mime application/x-epoc-font >4 lelong 0x1000003A printer driver +!:mime application/x-epoc-pdriver >4 lelong 0x1000003B clipboard +!:mime application/x-epoc-clipboard >4 lelong 0x10000042 multi-bitmap image !:mime image/x-epoc-mbm >4 lelong 0x1000006A application information file ->4 lelong 0x1000006D +>4 lelong 0x1000006D Record file +!:mime image/x-epoc-record >>8 lelong 0x1000007D Sketch image !:mime image/x-epoc-sketch >>8 lelong 0x1000007E voice note +!:mime application/x-epoc-voice >>8 lelong 0x1000007F Word file !:mime application/x-epoc-word >>8 lelong 0x10000085 OPL program (TextEd) !:mime application/x-epoc-opl +>>8 lelong 0x10000086 Data file +!:mime application/x-epoc-data >>8 lelong 0x10000087 Comms settings >>8 lelong 0x10000088 Sheet file !:mime application/x-epoc-sheet >>8 lelong 0x100001C4 EasyFax initialisation file +!:mime application/x-epoc-eini >4 lelong 0x10000073 OPO module !:mime application/x-epoc-opo >4 lelong 0x10000074 OPL application !:mime application/x-epoc-app >4 lelong 0x1000008A exported multi-bitmap image +!:mime image/x-epoc-xmbm >4 lelong 0x1000016D >>8 lelong 0x10000087 Comms names 0 lelong 0x10000041 Psion Series 5 ROM multi-bitmap image +!:mime image/x-epoc-mbm 0 lelong 0x10000050 Psion Series 5 >4 lelong 0x1000006D database >>8 lelong 0x10000084 Agenda file !:mime application/x-epoc-agenda ->>8 lelong 0x10000086 Data file -!:mime application/x-epoc-data +>>8 lelong 0x10000086 Address book +!:mime application/x-epoc-addressbook >>8 lelong 0x10000CEA Jotter file !:mime application/x-epoc-jotter >4 lelong 0x100000E4 ini file +!:mime application/x-epoc-ini +>4 lelong 0x10000075 Backlite file +!:mime application/x-epoc-backlite 0 lelong 0x10000079 Psion Series 5 binary: >4 lelong 0x00000000 DLL +!:mime application/x-epoc-dll >4 lelong 0x10000049 comms hardware library +!:mime application/x-epoc-chlib >4 lelong 0x1000004A comms protocol library +!:mime application/x-epoc-cplib >4 lelong 0x1000005D OPX +!:mime application/x-epoc-opx >4 lelong 0x1000006C application +!:mime application/x-epoc-app >4 lelong 0x1000008D DLL +!:mime application/x-epoc-dll >4 lelong 0x100000AC logical device driver +!:mime application/x-epoc-ldd >4 lelong 0x100000AD physical device driver +!:mime application/x-epoc-pdd >4 lelong 0x100000E5 file transfer protocol ->4 lelong 0x100000E5 file transfer protocol +!:mime application/x-epoc-ftp >4 lelong 0x10000140 printer definition +!:mime application/x-epoc-ppd >4 lelong 0x10000141 printer definition +!:mime application/x-epoc-ppd 0 lelong 0x1000007A Psion Series 5 executable + +4 lelong 0x1000006d +>8 lelong 0x10000419 Psion Series 5 Application Installer +!:mime application/x-epoc-sis diff --git a/magic/Magdir/espressif b/magic/Magdir/espressif index a97c09301fd1..4909a7cd68f6 100644 --- a/magic/Magdir/espressif +++ b/magic/Magdir/espressif @@ -1,5 +1,7 @@ -# $File: espressif,v 1.3 2021/04/26 15:56:00 christos Exp $ +#------------------------------------------------------------------------------ +# $File: espressif,v 1.4 2024/06/10 23:09:52 christos Exp $ +# espressif: file(1) magic for ESP8266 based devices # configuration dump of Tasmota firmware for ESP8266 based devices by Espressif # URL: https://github.com/arendst/Sonoff-Tasmota/ # Reference: https://codeload.github.com/arendst/Sonoff-Tasmota/zip/release-6.2/ diff --git a/magic/Magdir/filesystems b/magic/Magdir/filesystems index cd7213051686..a15e5e74d971 100644 --- a/magic/Magdir/filesystems +++ b/magic/Magdir/filesystems @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------ -# $File: filesystems,v 1.158 2023/05/21 17:19:08 christos Exp $ +# $File: filesystems,v 1.165 2024/09/01 15:51:51 christos Exp $ # filesystems: file(1) magic for different filesystems # 0 name partid @@ -1282,7 +1282,7 @@ #>>>(0x1BC.s+11) ubyte x \b,cfg_def %#x # for older versions >>>(0x1BC.s+9) ubyte <2 -#>>>>(0x1BC.s+12) ubyte 18 \b,%hhu/18 seconds +#>>>>(0x1BC.s+12) ubyte 18 \b,%u/18 seconds >>>>(0x1BC.s+12) ubyte !18 \b,%u/18 seconds # floppy A: or B: >>>>(0x1BC.s+13) ubyte <2 \b,floppy %#x @@ -1401,14 +1401,14 @@ >>>>>16 ubyte =1 \b, FAT %u >>>>>16 ubyte >0 >>>>>17 uleshort >0 \b, root entries %u -#>>>>>17 uleshort =0 \b, root entries %hu=0 (usual Fat32) +#>>>>>17 uleshort =0 \b, root entries %u=0 (usual Fat32) >>>>>19 uleshort >0 \b, sectors %u (volumes <=32 MB) -#>>>>>19 uleshort =0 \b, sectors %hu=0 (usual Fat32) +#>>>>>19 uleshort =0 \b, sectors %u=0 (usual Fat32) >>>>>21 ubyte >0xF0 \b, Media descriptor %#x #>>>>>21 ubyte =0xF0 \b, Media descriptor %#x (usual floppy) >>>>>21 ubyte <0xF0 \b, Media descriptor %#x >>>>>22 uleshort >0 \b, sectors/FAT %u -#>>>>>22 uleshort =0 \b, sectors/FAT %hu=0 (usual Fat32) +#>>>>>22 uleshort =0 \b, sectors/FAT %u=0 (usual Fat32) >>>>>24 uleshort x \b, sectors/track %u >>>>>26 ubyte >2 \b, heads %u #>>>>>26 ubyte =2 \b, heads %u (usual floppy) @@ -1479,7 +1479,7 @@ >>>>>>36 ulelong x \b, sectors/FAT %u # https://technet.microsoft.com/en-us/library/cc977221.aspx >>>>>>40 uleshort >0 \b, extension flags %#x -#>>>>>>40 uleshort =0 \b, extension flags %hu +#>>>>>>40 uleshort =0 \b, extension flags %u >>>>>>42 uleshort >0 \b, fsVersion %u #>>>>>>42 uleshort =0 \b, fsVersion %u (usual) >>>>>>44 ulelong >2 \b, rootdir cluster %u @@ -1938,26 +1938,29 @@ # defect IO.SYS+MSDOS.SYS ? #>>>>>0x162 use 2xDOS-filename -0 name cdrom ->38913 string !NSR0 ISO 9660 CD-ROM filesystem data +0 name cdrom ISO 9660 CD-ROM filesystem data !:mime application/x-iso9660-image !:ext iso/iso9660 ->38913 string NSR0 UDF filesystem data -!:mime application/x-iso9660-image -!:ext iso/udf ->>38917 string 1 (version 1.0) ->>38917 string 2 (version 1.5) ->>38917 string 3 (version 2.0) ->>38917 byte >0x33 (unknown version, ID %#X) ->>38917 byte <0x31 (unknown version, ID %#X) # The next line is not necessary because the MBR staff is done looking for boot signature >0x1FE leshort 0xAA55 (DOS/MBR boot sector) # "application id" which appears to be used as a volume label >32808 string/T >\0 '%.32s' >34816 string \000CD001\001EL\ TORITO\ SPECIFICATION (bootable) +# check for extended area (combined ISO + UDF) +>36865 string BEA01 + +>>36864 use extendedarea + 37633 string CD001 ISO 9660 CD-ROM filesystem data (raw 2352 byte sectors) !:mime application/x-iso9660-image + +# URL: http://fileformats.archiveteam.org/wiki/High_Sierra +# Update: Joerg Jenderek 32777 string CDROM High Sierra CD-ROM filesystem data +# https://www.unix.com/man-page/OpenSolaris/7fs/hsfs/ +#!:mime application/octet-stream +#!:mime application/x-hsfs-image +# BOOKSHELF.ISO "Shareware Grab Bag.iso" +!:ext iso # "application id" which appears to be used as a volume label >32816 string/T >\0 '%.32s' @@ -1973,6 +1976,55 @@ !:strength +35 >0 use cdrom +# From: Joerg Jenderek +# URL: http://fileformats.archiveteam.org/wiki/Universal_Disk_Format +# https://en.wikipedia.org/wiki/Universal_Disk_Format +# Reference: https://wiki.osdev.org/UDF +# Note: called "UDF Disc Image" by DROID via PUID fmt/1738 +# verified by udftools `udfinfo nero-UDFv26.iso` and 7-Zip `7z l -tUdf nero-UDF1.iso` +# +# look for type descriptor at relative offset 1 of block 16 if it is an extended descriptor section +32769 string BEA01 +>32768 use extendedarea + +0 name extendedarea +# look for type descriptor at relative offset 1 of block 17 with size 2048 (valid for images with blocksize of 512, 1024 or 2048 bytes) +>2049 string NSR0 +>>2048 use NSR0 +>2049 default x +# look for type descriptor at relative offset 1 of block 17 with size 4096 (valid for images with blocksize of 4096 bytes) +>>4097 string NSR0 +>>>4096 use NSR0 +>>4097 default x +# look for type descriptor at relative offset 1 of block 17 with size 8192 (valid for images with blocksize of 8192 bytes) +>>>8193 string NSR0 +>>>>8192 use NSR0 +>>>8193 default x +# look for type descriptor at relative offset 1 of block 17 with size 16384 (valid for images with blocksize of 16384 bytes) +>>>>16385 string NSR0 +>>>>>16384 use NSR0 +>>>>16385 default x +# look for type descriptor at relative offset 1 of block 17 with size 32768 (valid for images with blocksize of 32768 bytes) +>>>>>32769 string NSR0 +>>>>>>32768 use NSR0 +>>>>>32769 default x + +0 name NSR0 +# NSR02 indicates ISO/IEC 13346 first edition, or ECMA-167 second edition +# OSTA UDF 1.x revisions are based on ISO/IEC 13346 first edition +# FIXME: This detection is incorrect as it does not detect UDF 1.x, but ECMA-167 2nd +>5 ubyte 0x32 UDF filesystem data (version 1.x) +#!:mime application/octet-stream +!:mime application/x-udf-image +!:ext iso/udf +# NSR03 indicates ISO/IEC 13346 second edition, or ECMA-167 third edition +# OSTA UDF 2.x revisions are based on ECMA-167 third edition +# FIXME: This detection is incorrect as it does not detect UDF 2.x, but ECMA-167 3rd +>5 ubyte 0x33 UDF filesystem data (version 2.x) +#!:mime application/octet-stream +!:mime application/x-udf-image +!:ext iso/udf + # URL: https://en.wikipedia.org/wiki/NRG_(file_format) # Reference: https://dl.opendesktop.org/api/files/download/id/1460731811/ # 11577-mount-iso-0.9.5.tar.bz2/mount-iso-0.9.5/install.sh @@ -1983,24 +2035,6 @@ !:ext nrg >307200 use cdrom -# .cso files -# Reference: https://pismotec.com/ciso/ciso.h -# NOTE: There are two other formats with the same magic but -# completely incompatible specifications: -# - GameCube/Wii CISO: https://github.com/dolphin-emu/dolphin/blob/master/Source/Core/DiscIO/CISOBlob.h -# - PSP CISO: https://github.com/jamie/ciso/blob/master/ciso.h -0 string CISO -# Other fields are used to determine what type of CISO this is: -# - 0x04 == 0x00200000: GameCube/Wii CISO (block_size) -# - 0x10 == 0x00000800: PSP CISO (ISO-9660 sector size) -# - 0x10 == 0x00004000: For >2GB files using maxcso... -# https://github.com/unknownbrackets/maxcso/issues/26 -# - None of the above: Compact ISO. ->4 lelong !0 ->>4 lelong !0x200000 ->>>16 lelong !0x800 ->>>>16 lelong !0x4000 Compressed ISO CD image - # cramfs filesystem - russell@coker.com.au 0 lelong 0x28cd3d45 Linux Compressed ROM File System data, little endian >4 lelong x size %u @@ -2199,20 +2233,6 @@ >560 string x label: %.64s, >136 string x mountpoint: %.128s -# Summary: Oracle ASM tagged volume -# Created by: Aaron Botsis <redhat@digitalmafia.org> -32 string ORCLDISK Oracle ASM Volume, ->40 string x Disk Name: %0.12s -32 string ORCLCLRD Oracle ASM Volume (cleared), ->40 string x Disk Name: %0.12s - -# Oracle Clustered Filesystem - Aaron Botsis <redhat@digitalmafia.org> -8 string OracleCFS Oracle Clustered Filesystem, ->4 long x rev %d ->0 long x \b.%d, ->560 string x label: %.64s, ->136 string x mountpoint: %.128s - # Oracle ASM tagged volume - Aaron Botsis <redhat@digitalmafia.org> 32 string ORCLDISK Oracle ASM Volume, >40 string x Disk Name: %0.12s @@ -2278,12 +2298,6 @@ # From: "Nelson A. de Oliveira" <naoliv@gmail.com> 0 string *dvdisaster* dvdisaster error correction file -# xfs metadump image -# mb_magic XFSM at 0; superblock magic XFSB at 1 << mb_blocklog -# but can we do the << ? For now it's always 512 (0x200) anyway. -0 string XFSM ->0x200 string XFSB XFS filesystem metadump image - # Type: CROM filesystem # From: Werner Fink <werner@suse.de> 0 string CROMFS CROMFS @@ -2692,3 +2706,60 @@ >>0 ubelong >5 >>0 default x YAFFS filesystem root entry (big endian) >>>0 use \^yaffs + +# littlefs superblock +# From: Alexandre Iooss <erdnaxe@crans.org> +# URL: https://github.com/littlefs-project/littlefs/blob/v2.9.0/SPEC.md +# Match first commit tag, then "littlefs" magic +4 ulelong 0xf7ff0ff0 +>8 string littlefs littlefs superblock +>>22 uleshort x \b, version %u +>>20 uleshort x \b.%u +>>24 ulelong x \b, block size: %u bytes +>>28 ulelong x \b, %u blocks + +# EldOS Corporation SolidFS (aka SolFS) +# 256 bytes page size +0x0 string \x08\x00\x4e\x57\x20 +>0x100 string \x4e\x57\x00\x00\x01 +>0x1A2 string \x4C\x00\x40 EldOS Corporation SolidFS, 256 bytes page size + +# 512 bytes page size +0x0 string \x09\x00\x4e\x57\x20 +>0x200 string \x4e\x57\x00\x00\x01 +>0x2A2 string \x4C\x00\x40 EldOS Corporation SolidFS, 512 bytes page size + +# 1 kibibyte page size +0x0 string \x0A\x00\x4e\x57\x20 +>0x400 string \x4e\x57\x00\x00\x01 +>0x4A2 string \x4C\x00\x40 EldOS Corporation SolidFS, 1KiB page size + +# 2 kibibyte page size +0x0 string \x0B\x00\x4e\x57\x20 +>0x800 string \x4e\x57\x00\x00\x01 +>0x8A2 string \x4C\x00\x40 EldOS Corporation SolidFS, 2KiB page size + +# 4 kibibyte page size +0x0 string \x0C\x00\x4e\x57\x20 +>0x1000 string \x4e\x57\x00\x00\x01 +>0x10A2 string \x4C\x00\x40 EldOS Corporation SolidFS, 4KiB page size + +# 8 kibibyte page size +0x0 string \x0D\x00\x4e\x57\x20 +>0x2000 string \x4e\x57\x00\x00\x01 +>0x20A2 string \x4C\x00\x40 EldOS Corporation SolidFS, 8KiB page size + +# 16 kibibyte page size +0x0 string \x0E\x00\x4e\x57\x20 +>0x4000 string \x4e\x57\x00\x00\x01 +>0x40A2 string \x4C\x00\x40 EldOS Corporation SolidFS, 16KiB page size + +# 32 kibibyte page size +0x0 string \x0F\x00\x4e\x57\x20 +>0x8000 string \x4e\x57\x00\x00\x01 +>0x80A2 string \x4C\x00\x40 EldOS Corporation SolidFS, 32KiB page size + +# 64 kibibyte page size +0x0 string \x10\x00\x4e\x57\x20 +>0x10000 string \x4e\x57\x00\x00\x01 +>0x100A2 string \x4C\x00\x40 EldOS Corporation SolidFS, 64KiB page size diff --git a/magic/Magdir/firmware b/magic/Magdir/firmware index 4835b12e8d04..21ba1ed591b6 100644 --- a/magic/Magdir/firmware +++ b/magic/Magdir/firmware @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------ -# $File: firmware,v 1.7 2023/03/11 18:52:03 christos Exp $ +# $File: firmware,v 1.13 2024/09/04 19:04:03 christos Exp $ # firmware: file(1) magic for firmware files # @@ -111,11 +111,20 @@ # ESP-IDF application image # From: Alexandre Iooss <erdnaxe@crans.org> +# Update: Joerg Jenderek # URL: https://github.com/espressif/esp-idf/blob/v5.0/components/bootloader_support/include/esp_app_format.h +# Reference: https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/app_image_format.html # Note: Concatenation of esp_image_header_t, esp_image_segment_header_t and esp_app_desc_t # First segment contains esp_app_desc_t +# ESP_IMAGE_HEADER_MAGIC at the beginning of esp_image_header_t structure 0 ubyte 0xE9 +# display ESP-IDF application image (strength=40=40+0) before DOS executable with 16bit JuMP (strength=40) handled by ./msdos +#!:strength +0 +# ESP_APP_DESC_MAGIC_WORD; magic for the esp_app_desc_t structure >32 ulelong 0xABCD5432 ESP-IDF application image +#!:mime application/octet-stream +!:mime application/x-espressif-bin +!:ext bin >>12 uleshort 0x0000 for ESP32 >>12 uleshort 0x0002 for ESP32-S2 >>12 uleshort 0x0005 for ESP32-C3 @@ -131,3 +140,138 @@ >>>112 string/16 x %s >>144 string/32 x \b, IDF version: %s >>4 ulelong x \b, entry address: 0x%08X + +# AVR firmware +# From: Alexandre Iooss <erdnaxe@crans.org> +# URL: https://microchipdeveloper.com/8avr:int +# Match 4-byte JMP for Reset, Int0-2, PcInt0-3 and WDT +0 uleshort&0xFE0E 0x940C +>4 uleshort&0xFE0E 0x940C +>>8 uleshort&0XFE0E 0x940C +>>>12 uleshort&0XFE0E 0x940C +>>>>16 uleshort&0XFE0E 0x940C +>>>>>20 uleshort&0XFE0E 0x940C +>>>>>>24 uleshort&0XFE0E 0x940C +>>>>>>>28 uleshort&0XFE0E 0x940C +>>>>>>>>32 uleshort&0XFE0E 0x940C AVR firmware +# Handle only 16-bit addressing +>>>>>>>>>0 uleshort 0x940C +>>>>>>>>>>2 uleshort x \b, reset at 0x%04x +# Match 2-byte RJMP for Reset, Int0-2, PcInt0-3 and WDT for smaller AVR +1 byte&0xF0 0xC0 +>3 byte&0xF0 0xC0 +>>5 byte&0xF0 0xC0 +>>>7 byte&0xF0 0xC0 +>>>>9 byte&0xF0 0xC0 +>>>>>11 byte&0xF0 0xC0 +>>>>>>13 byte&0xF0 0xC0 +>>>>>>>15 byte&0xF0 0xC0 +>>>>>>>>17 byte&0xF0 0xC0 AVR firmware +>>>>>>>>>0 uleshort&0x0FFF x \b, reset at 0x%04x + +# Summary: Intel HEXadecimal file format +# URL: https://en.wikipedia.org/wiki/Intel_HEX +# Reference: http://www.piclist.com/techref/fileext/hex/intel.htm +# http://mark0.net/download/triddefs_xml.7z/defs/h/hex-intel.trid.xml +# From: Joerg Jenderek +# Note: called "Intel Hexadecimal object format" by TrID, "Intel® hexadecimal object file" on Linux +# and "Intel HEX binary data" by Notepad++ +# look for start code; 1 character, an ASCII colon ':'; all characters preceding this symbol should be ignored +0 ubyte 0x3A +# check for valid record type string with range 00 - 05 (3030h - 3035h) +>&6 ubeshort&0xFFf8 =0x3030 +# check for valid record length string like: 02 04 08 10h 20h 03 (usbdload.hex usbdldv2.hex from Windows Vista) +#>>1 string x LENGTH_STRING=%0.2s +#>>1 ubeshort x LENGTH=%#4.4x +>>&-8 ubeshort&0xFCf0 =0x3030 +>>>0 use intel-hex +# display information (offset, record length and type) of Intel HEX +0 name intel-hex +# RECORD MARK +>0 ubyte x Intel hexadecimal object +#!:mime text/plain +!:mime text/x-hex +!:ext hex +# no samples with other suffix found +# .hex .mcs .int .ihex .ihe .ihx .h80 .h86 .a43 .a90 .obj .obl .obh .rom .eep +# .hxl-.hxh .h00-.h15 .p00-.pff +# RECLEN; 2 hex digits for number of bytes in 1st data field; like 0x02 0x03 0x04 0x08 0x10 0x20; maximum 255 +>1 string x \b, 0x%2.2s record length +# OFFSET; 4 hex digits for 1st 16-bit memory offset of data like: 0000 (often) 1C00h 1E00h 3800h 3E00h 76EDh 7800h 7E00h ... +>3 string x \b, 0x%4.4s offset +# RECTYP; 2 hex digits (00 - 05); meaning of 1st data field; 00~DataRecord (often) 0l~EndOfFileRecord 02~ExtendedSegmentAddressRecord 03~StartSegmentAddressRecord 04~ExtendedLinearAddressRecord 05~StartLinearAddressRecord +>7 string x \b, '%2.2s' type +# DATA; n bytes of 1st data represented by 2n hex digits followed by 1 byte checksum +>9 string x \b, data+checksum %s +# last record :00000001FF with RECLEN 0, OFFSET 0, record type 01 for EndOfFile and 1 checksum byte FF +# samples with CarriageReturnLineFeed terminator +>-2 ubeshort =0x0d0a +# This should not happen! +>>-13 string !:00000001FF \b, last line %s +>-2 ubeshort !0x0d0a +# samples with LineFeed terminator +>>-1 ubyte =0x0a +# This should not happen! +>>>-12 string !:00000001FF \b, last line %s + +# Raspberry Pi RP2040 firmware +# From: Alexandre Iooss <erdnaxe@crans.org> +# Note: RP2040 flash image starts with stage2 bootloader, then a vector table. +# URL: https://github.com/raspberrypi/pico-sdk/tree/1.5.1/src/rp2_common/boot_stage2 +# boot2_*.S code (_stage2_boot) +0 ulelong 0x4B32B500 +>4 ulelong 0x60582021 +>>8 ulelong 0x21026898 +# exit_from_boot2.S code (check_return) `pop {r0}; cmp r0, #0` +>>>148 ulelong 0x2800bc01 +# Cortex-M vector table with reserved section filled with a default interrupt address +>>>>259 byte 0x20 +# make sure required vector table entries are ARM Thumb and in flash +>>>>>260 ulelong&0xE0000001 1 +>>>>>>264 ulelong&0xE0000001 1 +>>>>>>>268 ulelong&0xE0000001 1 +>>>>>>>>300 ulelong&0xE0000001 1 +>>>>>>>>>312 ulelong&0xE0000001 1 Raspberry Pi RP2040 firmware +>>>>>>>>>>256 ulelong >0 \b, initial SP at 0x%08x +>>>>>>>>>>260 ulelong^1 x \b, reset at 0x%08x +>>>>>>>>>>264 ulelong^1 x \b, NMI at 0x%08x +>>>>>>>>>>268 ulelong^1 x \b, HardFault at 0x%08x +>>>>>>>>>>300 ulelong^1 x \b, SVCall at 0x%08x +>>>>>>>>>>312 ulelong^1 x \b, PendSV at 0x%08x +# optional binary_info in the first 256 bytes, used by picotool +# https://github.com/raspberrypi/pico-sdk/blob/master/src/common/pico_binary_info/include/pico/binary_info/defs.h +>>>>>>>>>>256 search/256 \xf2\xeb\x88\x71 \b, with binary_info + +# Silicon Labs Gecko Bootloader update image +# From: Alexandre Iooss <erdnaxe@crans.org> +# Reference: https://github.com/raboof/gbl +# https://github.com/dsyx/emberznet-doc +# Note: TLV always starting with tag 0x03A617EB of length 8 +0 ulelong 0x03A617EB +>4 ulelong 8 Silicon Labs Gecko bootloader update image +!:ext gbl +>>12 byte 1 \b, encrypted (AES-CTR-128) +>>13 byte 1 \b, signed (ECDSA-P256) +# If not encrypted, indicate first image type +>>16 ulelong 0xF40A0AF4 \b, application image +>>16 ulelong 0xF50909F5 \b, bootloader image + +# Silicon Labs Gecko Bootloader OTA update with Zigbee EmberZNet SDK +# URL: https://github.com/SiliconLabs/gecko_sdk +0 ulelong 0x0BEEF11E +>6 ulelong 0x38 Silicon Labs Gecko EmberZNet OTA image +!:ext ota/zigbee +>>4 ubeshort x v%d + +# Device Firmware Upgrade with ST STMicroelectronics extensions +# From: Alexandre Iooss <erdnaxe@crans.org> +# Reference: STMicroelectronics note UM0391 +# Reference: https://dfu-util.sourceforge.net/dfuse.html +# DFU prefix +0 string DfuSe\x01 DFU image (STM variant) +!:ext dfu +>6 ulelong x \b, size: %d bytes +# DFU suffix, specification 0x011A +>-10 string \x1A\x01UFD +>>-12 uleshort x \b, for device %04X: +>>-14 uleshort x \b%04X diff --git a/magic/Magdir/fonts b/magic/Magdir/fonts index 17373b5a580c..e059ba563317 100644 --- a/magic/Magdir/fonts +++ b/magic/Magdir/fonts @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: fonts,v 1.51 2022/08/16 11:16:39 christos Exp $ +# $File: fonts,v 1.52 2024/11/09 23:52:53 christos Exp $ # fonts: file(1) magic for font data # 0 search/1 FONT ASCII vfont text @@ -447,3 +447,37 @@ #>20 belong x \b, totalCompressedSize %d >24 beshort x \b, version %d >26 beshort x \b.%d + +### fontconfig cache files + +# fontconfig cache files: little-endian +0 name fc-cache-le +# size is at offset 8, and is intptr_t +# hence, if offset 12 is zero, this is likely 64-bit +# NOTE: cannot determine double alignment here +>12 ulelong 0 le64 +>12 ulelong !0 le32 +# version number +>4 lelong x \b-%d + +# fontconfig cache files: big-endian +0 name fc-cache-be +# size is at offset 8, and is intptr_t +# hence, if offset 12 is zero, this is likely 64-bit +# NOTE: cannot determine double alignment here +>12 ubelong 0 be64 +>12 ubelong !0 be32 +# version number +>4 belong x \b-%d + +# fontconfig cache files +# https://gitlab.freedesktop.org/fontconfig/fontconfig +# https://www.microsoft.com/typography/otspec/otff.htm +0 ulelong 0xFC02FC04 fontconfig cache file: +>0 use fc-cache-le +0 ulelong 0xFC02FC05 fontconfig cache file (mmap): +>0 use fc-cache-le +0 ubelong 0xFC02FC04 fontconfig cache file: +>0 use fc-cache-be +0 ubelong 0xFC02FC05 fontconfig cache file (mmap): +>0 use fc-cache-be diff --git a/magic/Magdir/frame b/magic/Magdir/frame index c0fd840a46fa..fce87196752f 100644 --- a/magic/Magdir/frame +++ b/magic/Magdir/frame @@ -1,23 +1,53 @@ #------------------------------------------------------------------------------ -# $File: frame,v 1.14 2019/11/25 00:31:30 christos Exp $ +# $File: frame,v 1.19 2024/03/04 00:34:31 christos Exp $ # frame: file(1) magic for FrameMaker files # # This stuff came on a FrameMaker demo tape, most of which is # copyright, but this file is "published" as witness the following: # -# Note that this is the Framemaker Maker Interchange Format, not the -# Normal format which would be application/vnd.framemaker. +# URL: https://en.wikipedia.org/wiki/Adobe_FrameMaker # -0 string \<MakerFile FrameMaker document -!:mime application/x-mif ->11 string 5.5 (5.5 ->11 string 5.0 (5.0 ->11 string 4.0 (4.0 ->11 string 3.0 (3.0 ->11 string 2.0 (2.0 ->11 string 1.0 (1.0 ->14 byte x %c) +# Update: Joerg Jenderek 2024 Mar +# URL: http://fileformats.archiveteam.org/wiki/FrameMaker +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/f/fm.trid.xml +# Note: called "FrameMaker document" by TrID and "Adobe FrameMaker document" by shared MIME-info database +# skip "text" DROID samples like: fmt-190-signature-id-840.fm fmt-533-signature-id-837.fm fmt-534-signature-id-838.fm fmt-535-signature-id-839.fm fmt-536-signature-id-841.fm +# fmt-537-signature-id-842.fm fmt-538-signature-id-843.fm fmt-539-signature-id-844.fm x-fmt-302-signature-id-395.fm +0 string/b \<MakerFile FrameMaker document +#!:mime application/octet-stream +# https://www.iana.org/assignments/media-types/application/vnd.framemaker +!:mime application/vnd.framemaker +# version string like 1.0 2.0 3.0 4.0 5.0 5.5 6.0 7.0 8.0 9.0 10.0 +>11 string x (%0.3s +# before closing directive ">" is appended version letter like: F H J K Q Y +>>14 ubyte >0x40 %c +# or last digit of 4 character version string +>>14 ubyte <0x41 \b%c +# test again so that next default clause works +>14 ubyte x +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/h/hlp-fm.trid.xml +# Note: called "FrameMaker Help" by TrID +# look for reference to FrameMaker help name suffix like in: index1.hlp +>>18 search/9688/s .hlp: \b) help +# the internal FrameMaker help are just FrameMaker document with hlp suffix; XREF.HLP is same as Xref-hlp.fm +!:ext hlp +# For control reason show link name like: +# "Overview" "lastpage "firstpage "Add File" "Conditional Text" "Table Format" "Creating a reference frame" "firstpageCov" "Spot Colors" "Selecting text" "proceduresbl" "lastpageu" "Introducing HelpHe" "Menu of Syntax Descriptions" "Main FrameMaker window" +#>>>&5 string x LINK_NAME "%s" +>>>&5 string x +# look for gotolink or openlink keyword before help file name +>>>&-18 search/18/s link\040 +# link construct with help name like: "gotolink xref.hlp:Overview" "openlink syntax1.hlp:firstpage" +>>>>&-4 regex/s =^\[A-Za-z0-9.:\040]{1,} with "%s" +# if not FrameMaker Help assume it is "normal" FrameMaker document +# shown with closing parenthesis to get look like in frame,v 1.18 +>>18 default x \b) +# sometimes without suffix like: CHAPTER HARVARD LETTER MEMO1 NEWSLTR REPORT3 +# no samples found with .bk or .book extension +# allchaps.ix (Framemaker Index) and others like: +# title.fm4 wp.filt textre1.htr pmscript.ind change.nbh books.prd executiv.sum Hyper.Template +!:ext /fm/doc/toc/ix # URL: http://fileformats.archiveteam.org/wiki/Maker_Interchange_Format # Reference: https://help.adobe.com/en_US/framemaker/mifreference/mifref.pdf # Update: Joerg Jenderek 2019 Nov @@ -36,22 +66,70 @@ # comment starting with # shows the name+version number of generating program >13 search/3 # >>&0 string x "%s" +# Update: Joerg Jenderek +# Note: called "Adobe FrameMaker document" by shared MIME-info database from freedesktop.org 0 search/1 \<MakerDictionary FrameMaker Dictionary text -!:mime application/x-mif +#!:mime text/plain +#!:mime application/x-mif +!:mime application/vnd.framemaker +# like site.dict but often extension is a 3 letters country code like in: hyphens.brt hyphens.eng +!:ext dict/eng/brt +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/f/fm-hyph-dict-30.trid.xml +# Note: called "FrameMaker hyphens dictionary (v3.0)" by TrID >17 string 3.0 (3.0) +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/f/fm-hyph-dict-20.trid.xml +# Note: called "FrameMaker hyphens dictionary (v2.0)" by TrID >17 string 2.0 (2.0) >17 string 1.0 (1.x) +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/b/bfont.trid.xml +# Update: Joerg Jenderek 2023 +# Note: called "XFrameMaker Bitmapped screen Font" by TrID and +# "Adobe FrameMaker font" by shared MIME-info database from freedesktop.org 0 string \<MakerScreenFont FrameMaker Font file -!:mime application/x-mif +#!:mime application/octet-stream +#!:mime application/x-mif +!:mime application/x-font-framemaker +!:ext bfont +# Note: maybe also other version like: 1.x +>17 string !1.01 +>>17 string x (%-0.4s) >17 string 1.01 (%s) +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/m/mml-fm.trid.xml +# Update: Joerg Jenderek 2023 Nov +# Note: called "FrameMaker Maker Markup Language" by TrID and +# "Adobe FrameMaker document" by shared MIME-info database from freedesktop.org 0 string \<MML FrameMaker MML file -!:mime application/x-mif -0 string \<BookFile FrameMaker Book file -!:mime application/x-mif ->10 string 3.0 (3.0 ->10 string 2.0 (2.0 ->10 string 1.0 (1.0 ->13 byte x %c) +#!:mime text/plain +#!:mime application/x-mif +!:mime application/vnd.framemaker +!:ext mml +# Note: sometimes followed by space and version like 1.00 (formats.mml sample.mml) and more text +>5 string >0 (%-0.4s) +# URL: http://fileformats.archiveteam.org/wiki/FrameMaker +# Reference: http://mark0.net/download/triddefs_xml.7z +# defs/b/book-fm.trid.xml +# defs/b/bk-fm.trid.xml +# Update: Joerg Jenderek 2023 Dez +# Note: called "FrameMaker book (binary)" by TrID and +# "Adobe FrameMaker document" by shared MIME-info database from freedesktop.org +# look for BookFile, Bookfile (capitalized) or BOOKFILE (upcased) directive +0 string/c \<Bookfile FrameMaker Book file +#!:mime application/octet-stream +#!:mime application/x-mif +!:mime application/vnd.framemaker +# http://extension.nirsoft.net/book +!:ext bk/book +# version like: 1.0 2.0 3.0 4.0 5.0 5.5 6.0 7.0 8.0 10.0 +# 3 characters of version number string +>10 string x (%-0.3s +# if greater sign then exact 3 byte version string +>13 ubyte =0x3e \b) +# if digit then 4 byte version string +>13 ubyte <0x3A \b%c) +# if letter then this is appended sub level after 3 byte version string +>13 ubyte >0x3A %c) +# first directive typically is followed by one space character +>9 ubyte !0x20 \b, no space before version # XXX - this book entry should be verified, if you find one, uncomment this #0 string \<Book\040 FrameMaker Book (ASCII) file #!:mime application/x-mif diff --git a/magic/Magdir/games b/magic/Magdir/games index 0ccb4acff517..b8ead41b1dba 100644 --- a/magic/Magdir/games +++ b/magic/Magdir/games @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: games,v 1.31 2023/03/29 22:57:27 christos Exp $ +# $File: games,v 1.35 2024/11/09 23:04:46 christos Exp $ # games: file(1) for games # Fabio Bonelli <fabiobonelli@libero.it> @@ -32,53 +32,6 @@ >0 string x , name=%s >44 string x , world=%s -# Quake - -# Update: Joerg Jenderek -# URL: http://fileformats.archiveteam.org/wiki/PAK -# reference: https://quakewiki.org/wiki/.pak -# GRR: line below is too general as it matches also Acorn PackDir compressed Archive -# and Git pack ./revision -0 string PACK -# real Quake examples like pak0.pak have only some hundreds like 150 files -# So test for few files ->8 ulelong <0x01000000 -# in file version 5.32 test for null terminator is only true for -# offset ~< FILE_BYTES_MAX = 1 MB defined in ../../src/file.h -# look for null terminator of 1st entry name ->>(4.l+55) ubyte 0 Quake I or II world or extension -!:mime application/x-dzip -!:ext pak -#>>>8 ulelong x \b, table size %u -# dividing this by entry size (64) gives number of files ->>>8 ulelong/64 x \b, %u files -# offset to the beginning of the file table ->>>4 ulelong x \b, offset %#x -# 1st file entry ->>>(4.l) use pak-entry -# 2nd file entry -#>>>4 ulelong+64 x \b, offset %#x -#>>>(4.l+64) use pak-entry -# -# display file table entry of Quake PAK archive -0 name pak-entry -# normally entry start after header which implies offset 12 or higher ->56 ulelong >11 -# the offset from the beginning of pak to beginning of this entry file contents ->>56 ulelong x at %#x -# the size of file for this entry ->>60 ulelong x %u bytes -# 56 byte null-terminated entry name string includes path like maps/e1m1.bsp ->>0 string x '%-.56s' -# inspect entry content by jumping to entry offset ->>(56) indirect x \b: - -#0 string -1\x0a Quake I demo -#>30 string x version %.4s -#>61 string x level %s - -#0 string 5\x0a Quake I save - # The levels # Quake 1 @@ -186,12 +139,12 @@ # MAME input recordings -0 string MAMEINP\0 MAME input recording ->8 leqdate x at %s, ->16 leshort x format version %d. ->18 leshort x \b%d, ->20 string x %s driver, ->32 string x %s +0 string MAMEINP\0 MAME input recording +>8 leqdate x at %s, +>16 leshort x format version %d. +>18 leshort x \b%d, +>20 string/12 x %s driver, +>32 string/32 x %s # doom - submitted by Jon Dowland @@ -694,3 +647,20 @@ # Big-endian version (such as PS3) >8 ubelong <0x100 Wwise Audio Package (big-endian) !:ext pck + +# RPG Maker MV/MZ encrypted assets. Version was only ever known to be 00030100. +0 string RPGMV\0\0\0 +>12 string \0\0\0\0 +>>8 belong x RPG Maker MV encrypted asset, version %08x +!:ext png_/ogg_/m4a_/rpgmvp/rpgmvo/rpgmvm + +# https://arthran2.itch.io/encrypterator-3000 +0 string ART\0ENCRYPTER100FREE\0VERSION\0\0\0\0 RPG Maker MV encrypted asset, Encrypterator 3000 variant. +!:ext png_/ogg_/m4a_/rpgmvp/rpgmvo/rpgmvm + + +# http://www.shikadi.net/moddingwiki/PCX_Library +0 string/b pcxLib\0 +>122 ubyte 0x01 pcxLib archive +>>144 uleshort 0 \b, uncompressed +>>144 uleshort !0 \b, compressed diff --git a/magic/Magdir/gentoo b/magic/Magdir/gentoo index f988047ad400..fc3fca779684 100644 --- a/magic/Magdir/gentoo +++ b/magic/Magdir/gentoo @@ -1,34 +1,34 @@ #------------------------------------------------------------------------------ -# $File: gentoo,v 1.5 2022/12/26 17:16:55 christos Exp $ +# $File: gentoo,v 1.6 2024/02/11 15:39:59 christos Exp $ # gentoo: file(1) magic for gentoo specific formats # # Summary: Gentoo ebuild Manifest files (GLEP 74) # Reference: https://www.gentoo.org/glep/glep-0074.html # Submitted by: Michal Gorny <mgorny@gentoo.org> # Start by doing a fast check for the most common tags. -0 string AUX +0 string AUX\040 >0 use gentoo-manifest -0 string DATA +0 string DATA\040 >0 use gentoo-manifest -0 string DIST +0 string DIST\040 >0 use gentoo-manifest -0 string EBUILD +0 string EBUILD\040 >0 use gentoo-manifest -0 string MANIFEST +0 string MANIFEST\040 >0 use gentoo-manifest # Manifest can be PGP-signed. 0 string -----BEGIN\040PGP\040SIGNED\040MESSAGE----- >34 search/32 \n\n ->>&0 string AUX +>>&0 string AUX\040 >>>&0 use gentoo-manifest ->>&0 string DATA +>>&0 string DATA\040 >>>&0 use gentoo-manifest ->>&0 string DIST +>>&0 string DIST\040 >>>&0 use gentoo-manifest ->>&0 string EBUILD +>>&0 string EBUILD\040 >>>&0 use gentoo-manifest ->>&0 string MANIFEST +>>&0 string MANIFEST\040 >>>&0 use gentoo-manifest # Use a more detailed regex to verify that we were correct. diff --git a/magic/Magdir/geo b/magic/Magdir/geo index 1fde25e57be2..5065db5581fe 100644 --- a/magic/Magdir/geo +++ b/magic/Magdir/geo @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: geo,v 1.10 2022/10/31 13:22:26 christos Exp $ +# $File: geo,v 1.11 2024/11/09 23:35:01 christos Exp $ # Geo- files from Kurt Schwehr <schwehr@ccom.unh.edu> ###################################################################### @@ -164,3 +164,7 @@ # alex myczko <alex@aiei.ch> # http://pointclouds.org/documentation/tutorials/pcd_file_format.php 0 string #\ .PCD Point Cloud Data + +# FlatGeobuf is a GIS file format for encoding geographic data. +# https://flatgeobuf.org/#specification +0 bequad 0x6667620366676201 FlatGeobuf file diff --git a/magic/Magdir/geos b/magic/Magdir/geos index 66c2bd1a2904..f1a12d38ee9c 100644 --- a/magic/Magdir/geos +++ b/magic/Magdir/geos @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: geos,v 1.4 2009/09/19 16:28:09 christos Exp $ +# $File: geos,v 1.5 2024/04/07 17:56:40 christos Exp $ # GEOS files (Vidar Madsen, vidar@gimp.org) # semi-commonly used in embedded and handheld systems. 0 belong 0xc745c153 GEOS @@ -18,3 +18,12 @@ #>52 short x \b, proto %d #>54 short x \br%d #>168 string >\0 \b, copyright "%s" + +30 string PRG\ formatted\ GEOS\ file Formatted GEOS file +>22 byte 6 \b, APPLICATION +>22 byte 14 \b, AUTO_EXEC +>22 byte 5 \b, DESK_ACC +>22 byte 2 \b, ASSEMBLY +>22 byte 11 \b, DISK_DEVICE +>22 byte 9 \b, PRINTER +>22 byte 4 \b, SYSTEM diff --git a/magic/Magdir/hitachi-sh b/magic/Magdir/hitachi-sh index f64489f7fcf6..cfcda8494ce7 100644 --- a/magic/Magdir/hitachi-sh +++ b/magic/Magdir/hitachi-sh @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: hitachi-sh,v 1.10 2020/12/12 20:01:47 christos Exp $ +# $File: hitachi-sh,v 1.11 2024/02/18 14:15:22 christos Exp $ # hitach-sh: file(1) magic for Hitachi Super-H # # Super-H COFF @@ -28,3 +28,19 @@ >>0 use display-coff !:strength -10 +# Hitachi SH COFF object file +0 leshort 0x01a2 +>16 leshort 0 +>>0 use display-coff +0 leshort 0x01a3 +>16 leshort 0 +>>0 use display-coff +0 leshort 0x01a4 +>16 leshort 0 +>>0 use display-coff +0 leshort 0x01a6 +>16 leshort 0 +>>0 use display-coff +0 leshort 0x01a8 +>16 leshort 0 +>>0 use display-coff diff --git a/magic/Magdir/hp b/magic/Magdir/hp index d57169ee16e7..5bf30b3ec085 100644 --- a/magic/Magdir/hp +++ b/magic/Magdir/hp @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: hp,v 1.25 2019/01/13 00:32:38 christos Exp $ +# $File: hp,v 1.27 2024/08/27 18:50:57 christos Exp $ # hp: file(1) magic for Hewlett Packard machines (see also "printer") # # XXX - somebody should figure out whether any byte order needs to be @@ -261,25 +261,6 @@ >7 string J (ASCII Vector specification) >7 string K (wildcard) -# Summary: HP-38/39 calculator -# Created by: Samuel Thibault <samuel.thibault@ens-lyon.org> -0 string HP3 ->3 string 8 HP 38 ->3 string 9 HP 39 ->4 string Bin binary ->4 string Asc ASCII ->7 string A (Directory List) ->7 string B (Zaplet) ->7 string C (Note) ->7 string D (Program) ->7 string E (Variable) ->7 string F (List) ->7 string G (Matrix) ->7 string H (Library) ->7 string I (Target List) ->7 string J (ASCII Vector specification) ->7 string K (wildcard) - # hpBSD magic numbers 0 beshort 200 hp200 (68010) BSD >2 beshort 0407 impure binary @@ -430,4 +411,8 @@ >>>>>>>>>0xC4 belong 33 - received SIGXCPU >>>>>>>>>0xC4 belong 34 - received SIGXFSZ +# PA-RISC COFF object file +0 leshort 0x0290 +>16 leshort 0 +>>0 use display-coff diff --git a/magic/Magdir/ibm370 b/magic/Magdir/ibm370 index dc976f8705ea..95f737128c97 100644 --- a/magic/Magdir/ibm370 +++ b/magic/Magdir/ibm370 @@ -1,10 +1,10 @@ #------------------------------------------------------------------------------ -# $File: ibm370,v 1.11 2021/03/14 16:51:45 christos Exp $ +# $File: ibm370,v 1.13 2024/06/19 16:52:57 christos Exp $ # ibm370: file(1) magic for IBM 370 and compatibles. # # "ibm370" said that 0x15d == 0535 was "ibm 370 pure executable". -# What the heck *is* "USS/370"? +# "USS/370" is an old name for the z/OS Unix subsystem # AIX 4.1's "/etc/magic" has # # 0 short 0535 370 sysV executable @@ -48,5 +48,11 @@ >24 belong >0 - version %d # NETDATA (https://en.wikipedia.org/wiki/NETDATA) -# -\INMR01 In EBCDIC -0 string \x60\xe0\xc9\xd5\xd4\xd9\xf0\xf1 IBM NETDATA file +# INMR01 In EBCDIC starting at offset 2 +2 string \xc9\xd5\xd4\xd9\xf0\xf1 IBM NETDATA file + +# z/OS Program Object executable +# Starts with "IEWPLMH" in EBCDIC, followed by a single EBCDIC space to pad +# to 8 bytes. According to https://www.ibm.com/support/pages/apar/PK91585 +# IEWPLMH is eyecatcher for "Binder Program Load Module Header" control block +0 string \xc9\xc5\xe6\xd7\xd3\xd4\xc8\x40 z/OS Program Object executable diff --git a/magic/Magdir/ibm6000 b/magic/Magdir/ibm6000 index 724b64d3a5eb..78804b4fb785 100644 --- a/magic/Magdir/ibm6000 +++ b/magic/Magdir/ibm6000 @@ -1,10 +1,13 @@ #------------------------------------------------------------------------------ -# $File: ibm6000,v 1.15 2021/07/03 14:01:46 christos Exp $ +# $File: ibm6000,v 1.16 2024/03/31 15:06:56 christos Exp $ # ibm6000: file(1) magic for RS/6000 and the RT PC. # -0 beshort 0x01df executable (RISC System/6000 V3.1) or obj module ->12 belong >0 not stripped +# Update: Joerg Jenderek +#0 beshort 0x01df executable (RISC System/6000 V3.1) or obj module +0 beshort 0x01df +# use subroutine (./coff) to display name+flags+variables for common object formatted files +>0 use \^display-coff # Breaks sun4 statically linked execs. #0 beshort 0x0103 executable (RT Version 2) or obj module #>2 byte 0x50 pure diff --git a/magic/Magdir/iff b/magic/Magdir/iff index 258d16a4e1e3..aa31ddc0ec4b 100644 --- a/magic/Magdir/iff +++ b/magic/Magdir/iff @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: iff,v 1.18 2022/03/21 19:57:18 christos Exp $ +# $File: iff,v 1.20 2024/02/09 00:44:31 christos Exp $ # iff: file(1) magic for Interchange File Format (see also "audio" & "images") # # Daniel Quinlan (quinlan@yggdrasil.com) -- IFF was designed by Electronic @@ -10,11 +10,25 @@ # IFF files begin with an 8 byte FORM header, followed by a 4 character # FORM type, which is followed by the first chunk in the FORM. +# URL: http://fileformats.archiveteam.org/wiki/IFF +# https://en.wikipedia.org/wiki/Interchange_File_Format +# Reference: https://wiki.amigaos.net/wiki/IFF_FORM_and_Chunk_Registry +# Note: called "Interchange File" by DROID via PUID x-fmt/157 and +# "IFF file" or as alias expanded "Interchange File Format" by shared MIME-info database from freedesktop.org 0 string FORM IFF data #>4 belong x \b, FORM is %d bytes long # audio formats +# Update: Joerg Jenderek +# URL: http://fileformats.archiveteam.org/wiki/AIFF +# https://en.wikipedia.org/wiki/Audio_Interchange_File_Format +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/a/audio-aiff.trid.xml +# Note: called "AIFF Audio Interchange File Format" by TrID and +# "Audio Interchange File Format" by DROID via PUID fmt/414 >8 string AIFF \b, AIFF audio !:mime audio/x-aiff +# not officially registered +#!:mime audio/aiff +!:ext aiff/aif/aff >8 string AIFC \b, AIFF-C compressed audio !:mime audio/x-aiff >8 string 8SVX \b, 8SVX 8-bit sampled sound voice @@ -51,7 +65,14 @@ >8 string CTLG \b, CTLG message catalog >8 string PREF \b, PREF preferences >8 string DTYP \b, DTYP datatype description +# Update: Joerg Jenderek +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/i/iff-pch.trid.xml +# Note: called "IFF binary Patch" by TrID >8 string PTCH \b, PTCH binary patch +#!:mime application/octet-stream +#!:mime application/x-iff +#!:mime application/x-amiga-patch +!:ext patch/pch >8 string AMFF \b, AMFF AmigaMetaFile format >8 string WZRD \b, WZRD StormWIZARD resource >8 string DOC\040 \b, DOC desktop publishing document diff --git a/magic/Magdir/images b/magic/Magdir/images index 48e9f6dabfc2..a3b972fb1ee1 100644 --- a/magic/Magdir/images +++ b/magic/Magdir/images @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: images,v 1.243 2023/07/17 16:49:09 christos Exp $ +# $File: images,v 1.263 2024/11/10 20:44:30 christos Exp $ # images: file(1) magic for image formats (see also "iff", and "c-lang" for # XPM bitmaps) # @@ -13,8 +13,10 @@ # Targa - matches `povray', `ppmtotga' and `xv' outputs # by Philippe De Muyter <phdm@macqel.be> # URL: http://justsolve.archiveteam.org/wiki/TGA +# https://en.wikipedia.org/wiki/Truevision_TGA # Reference: http://www.dca.fee.unicamp.br/~martino/disciplinas/ea978/tgaffs.pdf -# Update: Joerg Jenderek +# Update: Joerg Jenderek February 2024 +# Note: called by DROID "Truevision TGA Bitmap" version 1.0 via PUID x-fmt/367 # at 2, byte ImgType must be 1, 2, 3, 9, 10 or 11 # ,32 or 33 (both not observed) # at 1, byte CoMapType must be 1 if ImgType is 1 or 9, 0 otherwise @@ -27,6 +29,8 @@ # and Image Type 1 2 3 9 10 11 32 33 # and Color Map Entry Size 0 15 16 24 32 0 ubequad&0x00FeC400000000C0 0 +# Targa image data (strength=70=110-40) before some Commodore disc image (strength=70=70+0 ./c64) like Cabal+2-MarioSoft(1).d64 +# and some MMDF mailbox (strength=70=70+0 ./mmdf) like uupc.input.1 # Conflict with MPEG sequences. !:strength -40 # Prevent conflicts with CRI ADX. @@ -42,7 +46,10 @@ >>>>17 ubyte&0x0F !11 # skip arches.3200 , Finder.Root , Slp.1 by looking for low pixel depth 1 8 15 16 24 32 >>>>>16 ubyte 1 ->>>>>>0 use tga-image +# skip few Commodore D64 disc image like "The Great Gianna Sisters.d64" and +# few MMDF mailbox like uupc.input.1 with unlikely black&white, dimension 0101h x 0101h (257x257) and +0101h origin (+257 +257) +>>>>>>8 quad !0x0101010101010101 +>>>>>>>0 use tga-image >>>>>16 ubyte 8 >>>>>>0 use tga-image >>>>>16 ubyte 15 @@ -57,9 +64,11 @@ 0 name tga-image >2 ubyte <34 Targa image data !:mime image/x-tga +# Apple Uniform Type Identifier: com.truevision.tga-image !:apple ????TPIC # normal extension .tga but some Truevision products used others: # tpic (Apple),icb (Image Capture Board),vda (Video Display Adapter),vst (NuVista),win (UNSURE about that) +# afi bpx !:ext tga/tpic/icb/vda/vst # image type 1 2 3 9 10 11 32 33 >2 ubyte&0xF7 1 - Map @@ -110,6 +119,7 @@ # positive length implies identification field >0 ubyte >0 >>18 string x "%s" +# Note: called by DROID "Truevision TGA Bitmap" version 2.0 via fmt/402 # last 18 bytes of newer tga file footer signature >18 search/4261301/s TRUEVISION-XFILE.\0 # extension area offset if not 0 @@ -327,17 +337,21 @@ # NewSubFileType >0 uleshort 0xfe >>12 use tiff_entry +# Width >0 uleshort 0x100 >>4 ulelong 1 ->>>12 use tiff_entry >>>8 uleshort x \b, width=%d +>>>12 use tiff_entry +# Height >0 uleshort 0x101 >>4 ulelong 1 >>>8 uleshort x \b, height=%d >>>12 use tiff_entry +# BPS >0 uleshort 0x102 >>8 uleshort x \b, bps=%d >>12 use tiff_entry +# Compression >0 uleshort 0x103 >>4 ulelong 1 \b, compression= >>>8 uleshort 1 \bnone @@ -365,6 +379,7 @@ >>>8 default x >>>>8 uleshort x \b(unknown %#x) >>>12 use tiff_entry +# Photometric Interpretation >0 uleshort 0x106 \b, PhotometricInterpretation= >>8 clear x >>8 uleshort 0 \bWhiteIsZero @@ -460,10 +475,8 @@ # GPS IFD >0 uleshort 0x8825 \b, GPS-Data >>12 use tiff_entry - #>0 uleshort x \b, unknown=%#x #>>12 use tiff_entry - 0 string MM\x00\x2b Big TIFF image data, big-endian !:mime image/tiff 0 string II\x2b\x00 Big TIFF image data, little-endian @@ -496,6 +509,12 @@ !:ext png !:strength +10 >16 use png-ihdr +>33 string \x00\x00\x00\x08acTL \b, animated +>>41 ubelong 1 (%d frame +>>41 ubelong >1 (%d frames +>>45 ubelong 0 \b, infinite repetitions) +>>45 ubelong 1 \b, %d repetition) +>>45 ubelong >1 \b, %d repetitions) # Apple CgBI PNG image. 0 string \x89PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x04CgBI @@ -544,6 +563,23 @@ #>10 ubyte&0x07 =0x06 128 colors #>10 ubyte&0x07 =0x07 256 colors +# URL: http://fileformats.archiveteam.org/wiki/Jeff%27s_Image_Format +# http://web.archive.org/web/20010603113404/http://jeff.cafe.net/jif +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/b/bitmap-jif.trid.xml +# https://www.nationalarchives.gov.uk/PRONOM/fmt/994 +# From: Joerg Jenderek +# Note: nearly identical to GIF, except that it uses zlib compression instead of LZW +# called by TrID "Jeff's Image Format bitmap" and "Jeffs Image Format" by DROID via fmt/994 +# verfied by XnView `nconvert -fullinfo *.jif` as "Jeff's Image Format" +0 string JIF99a Jeffs Image Format data +!:mime image/x-jif +# http://extension.nirsoft.net/jif +#!:mime image/jif +!:apple ????JIFf +!:ext jif +>6 uleshort x %u x +>8 uleshort x %u + # ITC (CMU WM) raster files. It is essentially a byte-reversed Sun raster, # 1 plane, no encoding. 0 string \361\0\100\273 CMU window manager raster image data @@ -1171,6 +1207,22 @@ #>>(10.l) ubequad !0 \b, bits %#16.16llx # dib header size: 12~Ch~OS/2 1.x 64~40h~OS/2 2.x #>>14 ulelong x \b, dib header size %u +# Type: Vision Research Phantom CINE Format +# URL: https://www.phantomhighspeed.com/ +# URL2: http://phantomhighspeed.force.com/vriknowledge/servlet/fileField?id=0BEU0000000Cfyk +# From: Harry Mallon <hjmallon at gmail.com> +# +# This has a short "CI" code but the 44 is the size of the struct which is +# stable +>2 uleshort 44 Vision Research CINE Video, +>>4 uleshort 0 Grayscale, +>>4 uleshort 1 JPEG Compressed, +>>4 uleshort 2 RAW, +>>6 uleshort x version %d, +>>20 ulelong x %d frames, +>>48 ulelong x %dx +>>52 ulelong x \b%d + # Conflicts with other entries [BABYL] # URL: http://fileformats.archiveteam.org/wiki/BMP#OS.2F2_Bitmap_Array # Note: container for OS/2 icon "IC", color icon "CI", color pointer "CP" or bitmap "BM" @@ -1296,20 +1348,75 @@ # SGI image file format, from Daniel Quinlan (quinlan@yggdrasil.com) # -# See -# http://reality.sgi.com/grafica/sgiimage.html -# -0 ubeshort 474 SGI image data -#>2 ubyte 0 \b, verbatim ->2 ubyte 1 \b, RLE -#>3 ubyte 1 \b, normal precision ->3 ubyte 2 \b, high precision ->4 ubeshort x \b, %d-D ->6 ubeshort x \b, %d x ->8 ubeshort x %d ->10 ubeshort x \b, %d channel ->10 ubeshort !1 \bs ->80 string >0 \b, "%s" +# Update: Joerg Jenderek +# URL: http://fileformats.archiveteam.org/wiki/SGI_(image_file_format) +# https://en.wikipedia.org/wiki/Silicon_Graphics_Image +# Reference: https://paulbourke.net/dataformats/sgirgb/sgiversion.html +# http://mark0.net/download/triddefs_xml.7z/defs/b/bitmap-sgi.trid.xml +# Note: called "Silicon Graphics bitmap (generic)" by TrID, +# "Silicon Graphics Image" by DROID via PUID x-fmt/140 and shared MIME-info database from freedesktop.org, +# verfied by ImageMagick `identify -verbose *.sgi` as SGI (Irix RGB image) and +# verfied by XnView `nconvert -in sgi -info *.sgi` as SGI RGB +# look for magic number (integer 474=0x01DA) + storage format (0 or 1) + number of bytes per pixel channel (1 or 2) +# to skip few TeX font metric data (like pxmi.tfm pxmi1.tfm eksfi8a.tfm ./tex) with invalid "high" bytes/pixel (11 12) +0 ubelong&0xFFffFEfc 0x01da0000 +# skip DROID x-fmt-140-signature-id-623.bw with invalid "low" dimensions "0 x 0" +>6 long !0 SGI image data +#!:mime image/sgi +!:mime image/x-sgi +!:apple ????.SGI +# STORAGE format; allowed values 0~VERBATIM 1~RLE +#>>2 ubyte 0 \b, verbatim +>>2 ubyte 1 \b, RLE +#>>2 ubyte >1 STORAGE=%#x +# BPC; number of bytes per pixel component; allowed values 1 2 +#>>3 ubyte 1 \b, normal precision +>>3 ubyte 2 \b, high precision +#>>3 ubyte x BPC=%#x +# DIMENSION; allowed values are 1~scanline 2~XSIZExYSIZE 3~XSIZExYSIZExZSIZE +>>4 ubeshort x \b, %d-D +# XSIZE; width of image in pixels +>>6 ubeshort x \b, %d x +# YSIZE; height of image in pixels +>>8 ubeshort x %d +# ZSIZE; number of channels in image; 1~B/W (greyscale) 3~RGB 4~RGB+ALPHA channel +>>10 ubeshort x \b, %d +# GRR: avoid +# Magdir\images, 1347: Warning: Current entry does not yet have a description for adding a EXTENSION type +>>>10 ubeshort 1 channel +# GRR: exception https://sembiance.com/fileFormatSamples/image/sgi/greytest.rgb +!:ext bw +# no examples found with .int suffix +#!:ext bw/int +# no examples found with .inta suffix for black/white+ALPHA channel +# no examples found with 2 channels +#>>>10 ubeshort 2 channels +#!:ext sgi +>>>10 ubeshort 3 channels +!:ext rgb/sgi +>>>10 ubeshort 4 channels +!:ext rgba/sgi +>>>10 default x channels +# no examples found with 5 and more channels +!:ext sgi +# IMAGENAME; null terminated ascii string of up to 79 characters +>>24 string >\0 \b, "%0.80s" +# PINMIN; minimum pixel value in the image; often 0 +>>12 ubelong !0 \b, %u PINMIN +# PINMAX; maximum pixel value in the image; often 255 +>>16 ubelong !255 \b, %u PINMAX +# DUMMY; 4 bytes of data should be set to 0 +>>20 ubelong !0 \b, at 20 %#x +# COLORMAP; 0~normal 1~DITHEREDobsolete 2~SCREENobsolete 3~COLORMAP +>>104 ubelong !0 \b, %u COLORMAP +# DUMMY; 404 bytes should be set to 0 but not always true; makes header exactly 512 bytes +>>111 ubyte !0 \b, at 111 %#x +>>113 ubyte !0 \b, at 113 %#x +>>118 ubeshort !0 \b, at 118 %#4.4x +>>121 ubyte !0 \b, at 121 %#x +>>132 ubelong !0 \b, at 132 %#8.8x +>>135 ubyte !0 \b, at 135 %#x +>>137 ubequad !0 \b, at 137 %#16.16llx 0 string IT01 FIT image data >4 ubelong x \b, %d x @@ -1329,17 +1436,95 @@ 0 string PCD_OPA Kodak Photo CD overview pack file # FITS format. Jeff Uphoff <juphoff@tarsier.cv.nrao.edu> +# Update: Joerg Jenderek +# URL: http://fileformats.archiveteam.org/wiki/Flexible_Image_Transport_System +# https://en.wikipedia.org/wiki/FITS +# Reference: https://mark0.net/download/triddefs_xml.7z/defs/b/bitmap-fts.trid.xml +# Note: called "Flexible Image Transport System bitmap" by TrID, GIMP and DROID via PUID x-fmt/383 +# "FITS document" with expanded acronym "Flexible Image Transport System" by shared MIME-info database from freedesktop.org +# verified as "Flexible Image Transport System" by XnView `nconvert -fullinfo M57.FIT MOON.FTS` , +# as "FTS (Flexible Image Transport System)" by ImageMagick command `identify MOON.FTS` , +# by NetPBM `fitstopnm M57.FIT | file` , +# falsified by `fitsverify M57.FIT MOON.FTS` # FITS is the Flexible Image Transport System, the de facto standard for # data and image transfer, storage, etc., for the astronomical community. # (FITS floating point formats are big-endian.) -0 string SIMPLE\ \ = FITS image data +# keyword is a 1- to 8-character, left-justified ASCII string; columns that do not contain data are filled with spaces +# The assignment indicator (=) always occupies columns nine and ten in the card +0 string SIMPLE\ \ = +# skip DROID x-fmt-383-signature-id-57.fits by check for left padding spaces of 2nd card value +>89 ubeshort =0x2020 FITS image +# URL: https://heasarc.gsfc.nasa.gov/fitsio/fpack/ +# Reference: https://mark0.net/download/triddefs_xml.7z/defs/b/bitmap-fz.trid.xml +# https://heasarc.gsfc.nasa.gov/FTP/software/fitsio/c/docs/fpackguide.pdf +# Note: called "Flexible Image Transport System bitmap (compressed)" by TrID +>>240 search/0x4790/b ZCMPTYPE= data, compression type +# fz suffix for compressed fits +!:ext fz +# Flexible Image Transport System compression value (followed by optional FITS comment) like: NOCOMPRESS GZIP_1 GZIP_2 HCOMPRESS_1 PLIO_1 RICE_1 +#>>>&0 string x COMPRESSION=%0.13s +>>>&0 regex [A-Z_1-2]{4,11} %s +# not compressed Flexible Image Transport System with other filename suffix +>>240 default x data +!:ext fits/fit/fts +# five keywords that are required in every FITS file: SIMPLE, BITPIX, NAXIS, NAXISn, and END. EXTEND is also a required keyword if extensions are present in the file +# required keyword in standard on 3rd card contains integer number of bits used to represent each data value but in 2nd card for M57.FIT +>>80 search/81/b BITPIX\040\040= +#>>>&11 string x BIT=%-0.18s +# this is the number of bits per pixel for image data +>>>&20 string 8 \b, 8-bit, character or unsigned binary integer +# few samples with more right positioned values like: M57.FIT +# GRR: avoid warning: Magdir\images, 1380: Warning: description `, 8-bit, character or unsigned binary integer (too right positioned)' truncated +>>>&28 string 8 \b, 8-bit, character or unsigned binary integer +>>>>0 string x (too right positioned) +# few samples not right justified positioned like: MOON.FTS +>>>&11 string 8 \b, 8-bit, character or unsigned binary integer +>>>>0 string x (too left positioned) +# according to DROID but no examples found +#>>>&19 string 08 \b, 8-bit, character or unsigned binary integer +#>>>&19 string +8 \b, 8-bit, character or unsigned binary integer +>>>&19 string 16 \b, 16-bit, two's complement binary integer +>>>&18 string \04032 \b, 32-bit, two's complement binary integer +>>>&18 string -32 \b, 32-bit, floating point, single precision +>>>&18 string -64 \b, 64-bit, floating point, double precision +# second 64-bit variant like: blank.fits +>>>&18 string \04064 \b, 64-bit, two's complement binary integer +# in standard number of dimensions by keyword NAXIS on 3rd card image but in few cases on 2nd card like: M57.FIT +>>80 search/81/b NAXIS\040\040\040= \b, +# before optional comment 31 ASCII charactes left padded with spaces for integer (0-999) of data axis like: 0 (extension no data) 1 (spectrum) 2 (conventional bitmap) 3 (animated bitmap example.fit test.fits) 6 (DDTSUVDATA.fits) +#>>>>&0 string x NAXIS=%-0.31s +# single digit 0 implies no data or similar +>>>&0 search/31/b \0400\040 0 axes +!:mime application/fits +# single digit 1 implies one-dimensional entity such as a spectrum or a time series (no example found) +>>>&-1 search/31/b \0401\040 1 axis +!:mime application/fits +#!:mime image/fits +# single digit 2 implies conventional bitmap +>>>&0 search/31/b \0402\040 2 axes +!:mime image/fits +# single digit 3 implies data cubes of three dimensions (animated bitmap or similar) +>>>&0 search/31/b \0403\040 3 axes !:mime image/fits -!:ext fits/fts ->109 string 8 \b, 8-bit, character or unsigned binary integer ->108 string 16 \b, 16-bit, two's complement binary integer ->107 string \ 32 \b, 32-bit, two's complement binary integer ->107 string -32 \b, 32-bit, floating point, single precision ->107 string -64 \b, 64-bit, floating point, double precision +# data cubes more dimensions like: 5 (group.fits) 6 (DDTSUVDATA.fits) +>>>&0 default x +>>>>&0 regex/31/s =[0-9]{1,3} %s axis +!:mime application/fits +# often NAXIS1 as 4th card but sometimes at higher offset like: 29400 (IUElwp25637mxlo.fits) 20400 (NICMOSn4hk12010_mos.fits) +>>240 search/29400/bs NAXIS1\040\040= \b, +# before optional comment 31 ASCII charactes left padded with spaces for first axis like: 192 512 1024 1200 2000 2064 3600 ... +>>>&9 regex =[0-9]{1,31} %s +# often NAXIS2 as 5th card but sometimes not existent or at higher offset like: 29120 (IUElwp25637mxlo.fits) 20480 (NICMOSn4hk12010_mos.fits) +>>>320 search/29120/bs NAXIS2\040\040= x +# before optional comment 31 ASCII charactes left padded with spaces for second axis like: 2 4 165 512 800 1024 3600 ... +>>>>&9 regex =[0-9]{1,31} %s +# not standard cards +>>80 string !BITPIX\040\040= \b, at 80 +# in M57.FIT like: "NAXIS =" +>>>80 string x "%-0.9s" +>>160 string !NAXIS\040\040\040= \b, at 160 +# in M57.FIT like: "BITPIX =" +>>>160 string x "%-0.9s" # other images 0 string This\ is\ a\ BitMap\ file Lisp Machine bit-array-file @@ -1573,6 +1758,35 @@ >>-0 offset =32066 # (2/41) like: medres.pi2 >>>0 use degas-bitmap +# GEM Image: Version 1, Headerlen 8 (Wolfram Kleff) +# Format variations from: Bernd Nuernberger <bernd.nuernberger@web.de> +# Update: Joerg Jenderek +# See http://fileformats.archiveteam.org/wiki/GEM_Raster +# For variations, also see: +# https://www.seasip.info/Gem/ff_img.html (Ventura) +# http://www.atari-wiki.com/?title=IMG_file (XIMG, STTT) +# http://www.fileformat.info/format/gemraster/spec/index.htm (XIMG, STTT) +# http://sylvana.net/1stguide/1STGUIDE.ENG (TIMG) +# header_size +>2 beshort 0x0008 +>>0 use gem_info +>2 beshort 0x0009 +>>0 use gem_info +# no example for NOSIG +>2 beshort 24 +>>0 use gem_info +# no example for HYPERPAINT +>2 beshort 25 +>>0 use gem_info +16 string XIMG\0 +>0 use gem_info +# no example +16 string STTT\0\x10 +>0 use gem_info +# no example or description +16 string TIMG\0 +>0 use gem_info + # DEGAS high-res uncompressed bitmap *.pi3 0 beshort 0x0002 # skip Intel ia64 COFF msvcrt.lib by test for unused bits of 1st atari color palette entry @@ -1763,8 +1977,12 @@ # PCX image files # From: Dan Fandrich <dan@coneharvesters.com> -# updated by Joerg Jenderek at Feb 2013 by https://de.wikipedia.org/wiki/PCX +# updated by Joerg Jenderek at Feb 2013, Nov 2023 by https://en.wikipedia.org/wiki/PCX # https://web.archive.org/web/20100206055706/http://www.qzx.com/pc-gpe/pcx.txt +# URL: http://fileformats.archiveteam.org/wiki/PCX +# Note: called "PCX image" with acronym "PiCture eXchange" by shared MIME-info database from freedesktop.org +# verfied partly as pcx "Zsoft Paintbrush" format by XnView `nconvert -in pcx -fullinfo *.pcx` and +# by ImageMagick version 7.1.1-21 command `identify *.pcx` # GRR: original test was still too general as it catches xbase examples T5.DBT,T6.DBT with 0xa000000 # test for bytes 0x0a,version byte (0,2,3,4,5),compression byte flag(0,1), bit depth (>0) of PCX or T5.DBT,T6.DBT 0 ubelong&0xffF8fe00 0x0a000000 @@ -1772,28 +1990,39 @@ >3 ubyte >0 # test for valid versions >>1 ubyte <6 ->>>1 ubyte !1 PCX -!:mime image/x-pcx -#!:mime image/pcx ->>>>1 ubyte 0 ver. 2.5 image data ->>>>1 ubyte 2 ver. 2.8 image data, with palette ->>>>1 ubyte 3 ver. 2.8 image data, without palette ->>>>1 ubyte 4 for Windows image data ->>>>1 ubyte 5 ver. 3.0 image data ->>>>4 uleshort x bounding box [%d, ->>>>6 uleshort x %d] - ->>>>8 uleshort x [%d, ->>>>10 uleshort x %d], ->>>>65 ubyte >1 %d planes each of ->>>>3 ubyte x %d-bit ->>>>68 ubyte 1 colour, ->>>>68 ubyte 2 grayscale, +>>>1 ubyte !1 +# skip DROID fmt-89-signature-id-62.pcx fmt-88-signature-id-63.pcx fmt-87-signature-id-64.pcx fmt-86-signature-id-65.pcx with invalid dimensions +>>>>8 long !0 PCX +!:mime image/vnd.zbrush.pcx +# deprecated +#!:mime image/x-pcx +!:ext pcx/pcc +# also examples like: abydos.st E-DIODE.ST MUSIC-13.ST ROSE.ST +#!:ext pcx/pcc/st +# Note: called as "PCX bitmap (v2.5)" by TrID via bitmap-pcx.trid.xml and "PCX" version 0 by DROID via PUID fmt/86 +>>>>>1 ubyte 0 ver. 2.5 image data +# Note: called as "PCX bitmap (v2.8, palette)" by TrID via bitmap-pcx-v28p.trid.xml and "PCX" version 2 by DROID via PUID fmt/87 +>>>>>1 ubyte 2 ver. 2.8 image data, with palette +# Note: called as "PCX bitmap (v2.8)" by TrID via bitmap-pcx-v28.trid.xml and "PCX" version 3 by DROID via PUID fmt/88 +>>>>>1 ubyte 3 ver. 2.8 image data, without palette +# Note: called as "PCX bitmap (Win)" by TrID via bitmap-pcx-win.trid.xml and "PCX" version 4 by DROID via PUID fmt/89 +>>>>>1 ubyte 4 for Windows image data +# Note: called as "PCX bitmap (v3.0) by TrID via bitmap-pcx-v30.trid.xml and "PCX" version 5 by DROID via PUID fmt/90 +>>>>>1 ubyte 5 ver. 3.0 image data +>>>>>4 uleshort x bounding box [%d, +>>>>>6 uleshort x %d] - +>>>>>8 uleshort x [%d, +>>>>>10 uleshort x %d], +>>>>>65 ubyte >1 %d planes each of +>>>>>3 ubyte x %d-bit +>>>>>68 ubyte 1 colour, +>>>>>68 ubyte 2 grayscale, # this should not happen ->>>>68 default x image, ->>>>12 uleshort >0 %d x ->>>>>14 uleshort x %d dpi, ->>>>2 ubyte 0 uncompressed ->>>>2 ubyte 1 RLE compressed +>>>>>68 default x image, +>>>>>12 uleshort >0 %d x +>>>>>>14 uleshort x %d dpi, +>>>>>2 ubyte 0 uncompressed +>>>>>2 ubyte 1 RLE compressed # Adobe Photoshop # From: Asbjoern Sloth Toennesen <asbjorn@lila.io> @@ -1966,35 +2195,6 @@ 0 string NITF National Imagery Transmission Format >25 string >\0 dated %.14s -# GEM Image: Version 1, Headerlen 8 (Wolfram Kleff) -# Format variations from: Bernd Nuernberger <bernd.nuernberger@web.de> -# Update: Joerg Jenderek -# See http://fileformats.archiveteam.org/wiki/GEM_Raster -# For variations, also see: -# https://www.seasip.info/Gem/ff_img.html (Ventura) -# http://www.atari-wiki.com/?title=IMG_file (XIMG, STTT) -# http://www.fileformat.info/format/gemraster/spec/index.htm (XIMG, STTT) -# http://sylvana.net/1stguide/1STGUIDE.ENG (TIMG) -0 beshort 0x0001 -# header_size ->2 beshort 0x0008 ->>0 use gem_info ->2 beshort 0x0009 ->>0 use gem_info -# no example for NOSIG ->2 beshort 24 ->>0 use gem_info -# no example for HYPERPAINT ->2 beshort 25 ->>0 use gem_info -16 string XIMG\0 ->0 use gem_info -# no example -16 string STTT\0\x10 ->0 use gem_info -# no example or description -16 string TIMG\0 ->0 use gem_info 0 name gem_info # version is 2 for some XIMG and 1 for all others @@ -2085,43 +2285,41 @@ # Hercules DASD image files # From Jan Jaeger <jj@septa.nl> and Jay Maynard <jaymaynard@gmail.com> + +# Common Hercules CKD image files +0 name HercCKD +>0 lelong x \b, %d heads per cylinder +>4 lelong x \b, track size %d bytes +>8 ubyte >0x2F +>>8 ubyte 0x45 \b, device type 9345 +>>8 ubyte !0x45 \b, device type 33%2.2X +>8 ubyte <0x30 \b, device type 23%2.2X + 0 string CKD_P370 Hercules CKD DASD image file ->8 lelong x \b, %d heads per cylinder ->12 lelong x \b, track size %d bytes ->16 byte x \b, device type 33%2.2X +>8 use HercCKD 0 string CKD_C370 Hercules compressed CKD DASD image file ->8 lelong x \b, %d heads per cylinder ->12 lelong x \b, track size %d bytes ->16 byte x \b, device type 33%2.2X +>8 use HercCKD >552 lelong x \b, %d total cylinders >>557 byte 0 \b, no compression >>557 byte 1 \b, ZLIB compression >>557 byte 2 \b, BZ2 compression 0 string CKD_S370 Hercules CKD DASD shadow file ->8 lelong x \b, %d heads per cylinder ->12 lelong x \b, track size %d bytes ->16 byte x \b, device type 33%2.2X +>8 use HercCKD 0 string CKD_P064 Hercules CKD64 DASD image file ->8 lelong x \b, %d heads per cylinder ->12 lelong x \b, track size %d bytes ->16 byte x \b, device type 33%2.2X +>8 use HercCKD 0 string CKD_C064 Hercules compressed CKD64 DASD image file ->8 lelong x \b, %d heads per cylinder ->12 lelong x \b, track size %d bytes ->16 byte x \b, device type 33%2.2X +>8 use HercCKD >524 lelong x \b, %d total cylinders >>585 byte 0 \b, no compression >>585 byte 1 \b, ZLIB compression >>585 byte 2 \b, BZ2 compression 0 string CKD_S064 Hercules CKD64 DASD shadow file ->8 lelong x \b, %d heads per cylinder ->12 lelong x \b, track size %d bytes ->16 byte x \b, device type 33%2.2X +>8 use HercCKD # Squeak images and programs - etoffi@softhome.net 0 string \146\031\0\0 Squeak image data @@ -2481,7 +2679,6 @@ >>0 use ulead-imaginfo # From: Joerg Jenderek # Reference: http://mark0.net/download/triddefs_xml.7z/defs/p/pe4-imaginfo.trid.xml -11 string \001\0\0\0\0 # check for version 4 part >19 string \0\0\0\004\0 >>0 use ulead-imaginfo @@ -2954,7 +3151,8 @@ # FIXME: Handle DX10 and XBOX formats. >>0x54 string DX10 >>>0x80 use ms-directdraw-dx10 ->>0x54 string !DX10 \b, compressed using %.4s +>>0x54 string !DX10 +>>>0x54 string x \b, compressed using %.4s >0x50 ulelong&0x2 0x2 \b, alpha only >0x50 ulelong&0x200 0x200 \b, YUV >0x50 ulelong&0x20000 0x20000 \b, luminance @@ -3101,6 +3299,10 @@ >>0x10 ubelong !0x44445320 Sega PVR image: >>>0x10 use sega-pvr-image-header >>0x08 ulelong x \b, global index = %u +# Sega GVR image with GBIX. +>0x10 string GVRT Sega GVR image: +>>0x10 use sega-gvr-image-header +>>0x08 ubelong x \b, global index = %u # Sega GVR header. 0 name sega-gvr-image-header @@ -3122,12 +3324,6 @@ 0 string GVRT Sega GVR image: >0x10 use sega-gvr-image-header -# Sega GVR image with GBIX. -0 string GBIX ->0x10 string GVRT Sega GVR image: ->>0x10 use sega-gvr-image-header ->>0x08 ubelong x \b, global index = %u - # Sega GVR image with GCIX. (Wii) 0 string GCIX >0x10 string GVRT Sega GVR image: @@ -3137,28 +3333,9 @@ # Light Field Picture # Documentation: http://optics.miloush.net/lytro/TheFileFormat.aspx # Typical file extensions: .lfp .lfr .lfx - 0 ubelong 0x894C4650 ->4 ubelong 0x0D0A1A0A ->12 ubelong 0x00000000 Lytro Light Field Picture ->8 ubelong x \b, version %d - -# Type: Vision Research Phantom CINE Format -# URL: https://www.phantomhighspeed.com/ -# URL2: http://phantomhighspeed.force.com/vriknowledge/servlet/fileField?id=0BEU0000000Cfyk -# From: Harry Mallon <hjmallon at gmail.com> -# -# This has a short "CI" code but the 44 is the size of the struct which is -# stable -0 string CI ->2 uleshort 44 Vision Research CINE Video, ->>4 uleshort 0 Grayscale, ->>4 uleshort 1 JPEG Compressed, ->>4 uleshort 2 RAW, ->>6 uleshort x version %d, ->>20 ulelong x %d frames, ->>48 ulelong x %dx ->>52 ulelong x \b%d +>4 ubelong 0x0D0A1A0A Lytro Light Field Picture +>>8 ubelong x \b, version %u # Type: ARRI Raw Image # Info: SMPTE RDD30:2014 @@ -3173,6 +3350,7 @@ # Type: Khronos KTX texture. # From: David Korth <gerbilsoft@gerbilsoft.com> # Reference: https://www.khronos.org/opengles/sdk/tools/KTX/file_format_spec/ +# https://www.iana.org/assignments/media-types/image/ktx # glEnum decoding. # NOTE: Only the most common formats are listed here. @@ -3247,6 +3425,8 @@ # Main KTX header. # Determine endianness, then check the rest of the header. 0 string \xABKTX\ 11\xBB\r\n\x1A\n Khronos KTX texture +!:mime image/ktx +!:ext ktx >12 ulelong 0x04030201 (little-endian) >>16 use khronos-ktx-endian-header >12 ubelong 0x04030201 (big-endian) @@ -3256,6 +3436,7 @@ # From: David Korth <gerbilsoft@gerbilsoft.com> # Based on draft19. # Reference: http://github.khronos.org/KTX-Specification/ +# https://www.iana.org/assignments/media-types/image/ktx2 # Supercompression enum. 0 name khronos-ktx2-supercompression @@ -3517,6 +3698,8 @@ # Main KTX2 header. 0 string \xABKTX\ 20\xBB\r\n\x1A\n Khronos KTX2 texture +!:mime image/ktx2 +!:ext ktx2 >20 ulelong x \b, %u >24 ulelong >1 x %u >28 ulelong >1 x %u @@ -3610,7 +3793,7 @@ # Microsoft Paint graphic # http://www.fileformat.info/format/mspaint/egff.htm -0 string DanM icrosoft Paint image data (version 1.x) +0 string DanM Microsoft Paint image data (version 1.x) >4 uleshort x (%d >>6 uleshort x x %d) 0 string LinS Microsoft Paint image data (version 2.0) @@ -3629,9 +3812,7 @@ >>>>33 string and >>>>>37 string layers >>>>>>43 ulelong x reMarkable tablet notebook lines, 1404 x 1872, %x page(s) - # newer per-page files for the reMarkable -0 string reMarkable >11 string .lines >>18 string file, >>>24 string version= @@ -4026,9 +4207,9 @@ >>>13 ubyte x *bad colorspace %u* -# Type: Godot 3, 4 texture (pixel format) +# Type: Godot 3 texture (pixel format) # From: David Korth <gerbilsoft@gerbilsoft.com> -0 name godot-pixel-format +0 name godot-pixel-format-v3 >0 ulelong&0xFFFFF 0 L8 >0 ulelong&0xFFFFF 1 LA8 >0 ulelong&0xFFFFF 2 R8 @@ -4066,7 +4247,54 @@ >0 ulelong&0xFFFFF 34 ETC2_RGB8 >0 ulelong&0xFFFFF 35 ETC2_RGBA8 >0 ulelong&0xFFFFF 36 ETC2_RGB8A1 +# NOTE: This is a custom pixel format used by Sonic Colors Ultimate. +# Godot 4 later added its own ASTC format values. +>0 ulelong&0xFFFFF 37 ASTC_8x8 + +# Type: Godot 4 texture (pixel format) +# From: David Korth <gerbilsoft@gerbilsoft.com> +# NOTE: This is a custom pixel format used by Sonic Colors Ultimate. +# Godot 4 later added its own ASTC format values. +0 name godot-pixel-format-v4 +>0 ulelong&0xFFFFF 0 L8 +>0 ulelong&0xFFFFF 1 LA8 +>0 ulelong&0xFFFFF 2 R8 +>0 ulelong&0xFFFFF 3 RG8 +>0 ulelong&0xFFFFF 4 RGB8 +>0 ulelong&0xFFFFF 5 RGBA8 +>0 ulelong&0xFFFFF 6 RGBA4444 +>0 ulelong&0xFFFFF 7 RGB565 +>0 ulelong&0xFFFFF 8 RF +>0 ulelong&0xFFFFF 9 RGF +>0 ulelong&0xFFFFF 10 RGBF +>0 ulelong&0xFFFFF 11 RGBAF +>0 ulelong&0xFFFFF 12 RH +>0 ulelong&0xFFFFF 13 RGH +>0 ulelong&0xFFFFF 14 RGBH +>0 ulelong&0xFFFFF 15 RGBAH +>0 ulelong&0xFFFFF 16 RGBE9995 +>0 ulelong&0xFFFFF 17 DXT1 +>0 ulelong&0xFFFFF 18 DXT3 +>0 ulelong&0xFFFFF 19 DXT5 +>0 ulelong&0xFFFFF 20 RGTC_R +>0 ulelong&0xFFFFF 21 RGTC_RG +>0 ulelong&0xFFFFF 22 BPTC_RGBA +>0 ulelong&0xFFFFF 23 BPTC_RGBF +>0 ulelong&0xFFFFF 24 BPTC_RGBFU +>0 ulelong&0xFFFFF 25 ETC +>0 ulelong&0xFFFFF 36 ETC2_R11 +>0 ulelong&0xFFFFF 27 ETC2_R11S +>0 ulelong&0xFFFFF 28 ETC2_RG11 +>0 ulelong&0xFFFFF 29 ETC2_RG11S +>0 ulelong&0xFFFFF 30 ETC2_RGB8 +>0 ulelong&0xFFFFF 31 ETC2_RGBA8 +>0 ulelong&0xFFFFF 32 ETC2_RGB8A1 +>0 ulelong&0xFFFFF 33 ETC2_RA_AS_RG +>0 ulelong&0xFFFFF 34 DXT5_RA_AS_RG +>0 ulelong&0xFFFFF 35 ASTC_4x4 +>0 ulelong&0xFFFFF 36 ASTC_4x4_HDR >0 ulelong&0xFFFFF 37 ASTC_8x8 +>0 ulelong&0xFFFFF 38 ASTC_8x8_HDR # Type: Godot 3, 4 texture (rescale display, width) # From: David Korth <gerbilsoft@gerbilsoft.com> @@ -4138,7 +4366,7 @@ >16 ulelong&0x100000 0x100000 lossless encoding >16 ulelong&0x200000 0x200000 lossy encoding >16 ulelong&0x300000 0 ->>16 use godot-pixel-format +>>16 use godot-pixel-format-v3 # Type: Godot 4 texture # From: David Korth <gerbilsoft@gerbilsoft.com> @@ -4157,7 +4385,7 @@ >12 use godot-rescale-display-h >12 uleshort x \b, >0x2C ulelong >1 %u mipmaps, ->0x30 use godot-pixel-format +>0x30 use godot-pixel-format-v4 >0x24 ulelong 1 \b, embedded PNG image >0x24 ulelong 2 \b, embedded WebP image >0x24 ulelong 3 \b, Basis Universal @@ -4217,3 +4445,140 @@ >3 string Em 5-7 >3 string Fk 8-12 >3 default x MAX + + +# https://teem.sourceforge.net/nrrd/index.html +# From: Quasar Jarosz <quasar@uams.edu>, 2023 +0 string NRRD000 NRRD imaging data +!:mime image/x.nrrd +!:ext nrrd +>7 string x \b, version %s +>0 search type: +>>&1 string x \b, type: %s +>0 search dimension: +>>&1 string x \b, dimensions: %s +>0 search sizes: +>>&1 string x \b, sizes: %s +>0 search encoding: +>>&1 string x \b, encoding: %s + +# From: Joerg Jenderek +# URL: http://justsolve.archiveteam.org/wiki/PICT +# https://en.wikipedia.org/wiki/PICT +# Reference: https://www.fileformat.info/format/macpict/egff.htm +# http://mark0.net/download/triddefs_xml.7z/defs/p/pict-v2.trid.xml +# Note: called "Macintosh Quickdraw/PICT drawing" by shared MIME-info database from freedesktop.org, +# "QuickDraw/PICT bitmap (v2)" by TrID and "Macintosh PICT Image" version 2.0 by DROID via PUID via fmt/341 +# verified by command like `deark -m pict -l -d2 flag_b24.pct` as PICT v2, +# partly by NetPBM `picttoppm venus.pct | file` as "Macintosh PICT", +# partly by ImageMagick `identify -verbose flag_b24.pct` as (Apple Macintosh QuickDraw/PICT) and +# partly by XnView `nconvert -fullinfo *.pict *.pic *.pct` as "Macintosh PICT 2" +# look for version operator (0011h) and version number (02FFh) +522 ubelong 0x001102ff +# few Macintosh QuickDraw with one corner at -1/-1 coordinates like PICT_129.pict PICT_2012.pict (strength=81=70+11) before Claris clip art (strength=80 ./claris) +!:strength +11 +# look for Version operator (0C00h) +>526 ubeshort 0x0c00 +# skip DROID fmt-341-signature-id-468.pct with invalid dimension x=0 +>>520 ubeshort !0 +# skip DROID variant fmt-341-signature-id-468.pct using 0xAB instead 0x0 +>>>0 long !0xABABABAB Macintosh QuickDraw PICT, version 2 +#!:mime application/octet-stream +!:mime image/x-pict +!:apple ????PICT +!:ext pict/pic/pct +# maybe also suffix pict2 https://www.xnview.com/de/image_formats/ +#!:ext pict2/pict/pic/pct +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/p/pict.trid.xml +# Note: called "Macintosh Quickdraw/PICT Drawing" by TrID +# "real" content stored by opcode 0x8200 (CompressedQuickTime *.qtif) with none, cvid or JPEG compression +# look for LongText QuickTime followed by trademark character +>>>>554 search/691976/b QuickTime\252 \b, QuickTime +# look for LongText afterwards like "and a/None|Cinepak|Photo - JPEG decompressor/are needed to see this picture" +>>>>>&0 search/28/bs \040decompressor with decompressor +>>>>>>&-4 string None None +# Cinepak and "Compact Video decompressor" seems to be cvid +>>>>>>&-7 string Cinepak Cinepak +>>>>>>&-12 string Photo\040-\040JPEG JPEG +>>>>>>&-13 string Compact\040Video cvid +# case where decompression is not like: Cinepak None "Photo - JPEG" "Compact Video decompressor" +>>>>>>&-6 default x +>>>>>>>&0 string x "%0.6s" +# file size in bytes; not reliable sometimes 0 or little smaller than real size +#>>>>512 ubeshort x \b, size %u +# 8 bytes picFrame (rectangle); for most examples one corner is located at coordinates 0/0; except deark other tools fail when negative values +# GRR: samples with coordinates -1/-1 and Y=0x01??|0x00?? are interpreted as "Claris clip art" (strength=80 ./claris) +#>>>>518 ubeshort x Y=%#4.4x +>>>>520 ubeshort x \b, %u +>>>>>516 beshort !0 \b-%d +>>>>518 ubeshort x x %u +>>>>>514 beshort !0 \b-%d +# Note: at the beginning all zeros or information about the particular software like: PICT +>>>>0 long !0 \b, at 0 +>>>>>0 string x %.4s +# version 2.0 files also have a 26-byte header following the version information +# like: 0 FFFEh (freedesktop egff~Encyclopedia of Graphics File Formats) FFFFh (egff) +>>>>528 ubeshort x \b, at 528 %#4.4x +# 2nd opcode like: 0x0000~NOP 0x0001~Clip 0x00a0~ShortComment 0x00a1~LongComment 0x001e~DefHilite 0x001f~OpColor +>>>>552 ubeshort x \b, at 552 second opcode %#4.4x +# last opcode if not opEndPic (00FFh) +>>>>-2 ubeshort !0x00FF \b, at the end %#4.4x opcode +# Reference: http://web.archive.org/web/20010703041301/http://developer.apple.com/technotes/qd/qd_14.html +# http://mark0.net/download/triddefs_xml.7z/defs/p/pict-v1.trid.xml +# Note: called "QuickDraw/PICT bitmap (v1)" by TrID and "Macintosh PICT Image" version 1.0 by DROID via PUID via x-fmt/80 +# verified by command like `deark -m pict -l -d2 FC9.PCT` as PICT v1, +# by ImageMagick `identify -verbose *.pict` as PICT (Apple Macintosh QuickDraw/PICT) and +# by XnView `nconvert -fullinfo *.pict *.pct` as "Macintosh PICT" +# 1 byte opcode for picversion (11h); next byte version number (1) +522 ubeshort 0x1101 +# skip DROID x-fmt-80-signature-id-859.pct x-fmt-80-signature-id-860.pct without next opcode usually clipRgn (1h) +>524 ubyte =0x01 +>>0 use mac-pict1 +# display Macintosh PICT drawing version 1 information +0 name mac-pict1 +>520 ubeshort x Macintosh QuickDraw PICT, version 1 +#!:mime application/octet-stream +!:mime image/x-pict +!:apple ????PICT +!:ext pict/pct +# maybe also suffix pict1 and pic +#!:ext pict1/pict/pic/pct +# file size in bytes; not reliable sometimes 0 or smaller than real size +#>512 ubeshort x \b, size %u +# 8 bytes picFrame (rectangle) +>520 ubeshort x \b, %u +>516 ubeshort !0 \b-%u +>518 ubeshort x x %u +>514 ubeshort !0 \b-%u +# Note: According to DROID at the beginning all zeros or information about the particular software like DRWG(MD|D2) +>0 long !0 \b, at 0 +>>0 string x %.6s +>>0 ubelong x %#8.8x +>>4 ubeshort x \b%4.4x +# 2nd opcode if not clipRgn (1h) +>524 ubyte !0x01 \b, at 524 %#2.2x opcode +# last opcode if not opEndPic (FFh) +>-1 ubyte !0xFF \b, at the end %#2.2x opcode + +# https://github.com/aseprite/aseprite/blob/main/docs/ase-file-specs.md +20 ulelong 0 +>24 ulelong 0 +>>4 uleshort 0xA5E0 Aseprite asset file +!:ext aseprite +>>>0 ulelong x \b, size %u +>>>6 uleshort x \b, frames %u +>>>8 uleshort x \b, size %ux +>>>10 uleshort x \b%u +>>>12 uleshort 32 \b, RGBA +>>>12 uleshort 16 \b, Grayscale +>>>12 uleshort 8 \b, Indexed +>>>14 ulelong x \b, flags %#x +#>>>18 uleshort x \b, speed %u +>>>28 ubyte x \b, transparency index %u +>>>32 uleshort x \b, number of colors %u +>>>34 ubyte >0 \b, pixel ratio %u: +>>>>35 ubyte x \b%u +>>>36 leshort x \b, grid position (%d, +>>>38 leshort x \b%d) +>>>40 uleshort x \b, grid size %dx +>>>42 uleshort x \b%d diff --git a/magic/Magdir/ispell b/magic/Magdir/ispell index 57a6e9e78988..4bcb9f062e4f 100644 --- a/magic/Magdir/ispell +++ b/magic/Magdir/ispell @@ -1,7 +1,7 @@ #------------------------------------------------------------------------------ -# $File: ispell,v 1.8 2009/09/19 16:28:10 christos Exp $ -# ispell: file(1) magic for ispell +# $File: ispell,v 1.10 2023/10/23 19:49:58 christos Exp $ +# ispell: file(1) magic for ispell, MySpell, Hunspell and aspell # # Ispell 3.0 has a magic of 0x9601 and ispell 3.1 has 0x9602. This magic # will match 0x9600 through 0x9603 in *both* little endian and big endian. @@ -61,3 +61,189 @@ >12 long x lexsize %d, >16 long x hashsize %d, >20 long x stblsize %d + +# Summary: affixes defition text files for Ispell/MySpell/Hunspell +# From: Joerg Jenderek +# URL: https://www.openoffice.org/lingucomponent/affix.readme +# https://man.archlinux.org/man/hunspell.5.en +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/a/affix.trid.xml +# Note: called "Affix file" by TrID +# variant starting with comment character +0 ubyte 0x23 +# look for SET character command followed by whitespace (seems to be often 1 space character) like in: +# /usr/share/calibre/dictionaries/en-GB/en-GB.aff +>0 search/60459 SET\040 +# skip scripts like /bin/affixcompress /bin/setupcon /bin/imdbpy2sql.py by checking for valid character SET argument +# character SET argument like: UTF-8 +>>&0 string UTF-8 +>>>0 use spell-aff +# character SET argument like: ISO8859-1 - ISO8859-10 ISO8859-13 - ISO8859-15 +>>&0 string ISO8859- +>>>0 use spell-aff +# character SET argument for Russian with Cyrillic alphabet like: KOI8-R KOI8-U +# no russian support until war against ukraine +>>&0 string KOI8- +#>>>0 use spell-aff +# character SET argument for languages with Cyrillic alphabet like: cp1251 +# no cyrillic support until russia war against ukraine +>>&0 string cp1251 +#>>>0 use spell-aff +# character SET argument for Indian Script Code for Information Interchange (ISCII) like: ISCII-DEVANAGARI +>>&0 string ISCII- +# no example found +>>>0 use spell-aff +# not "real" affix rule files but found as tests unit inside thunderbird sources like: +# 1463589.aff 1695964.aff 2970240.aff +>0 default x +# look for suffix SFX command followed by whitespace like in: +# 1695964.aff +>>0 search/164 SFX\040 +>>>0 use spell-aff +# if not real Hunspell/MySpell affix look for ispell variant +>>0 default x +# URL: https://manpages.debian.org/testing/ispell/ispell.5.en.html +# look for ispell declaration like in: /usr/lib/ispell/espanol.aff +>>>0 search/8251 defstringtype +# defstringtype declaration start with unique name (like "list" "lat" "utf8" "iso" "nroff" often like formatter name) +# followed by formatter name (like "nroff" "tex") +# followed by suffix list (like ".mm" ".ms" ".me" ".man" ".NeXT" ".txt" ".list") +#>>>>&1 string x DECLARATION=%s +>>>>0 use spell-aff +# ispell variant without declaration like in: /usr/lib/ispell/bulgarian.aff /usr/lib/ispell/russian.aff +>>>0 default x +# skip /etc/nilfs_cleanerd.conf by looking for ispell suffix section +>>>>0 search/3233 suffixes\n +>>>>>0 use spell-aff +# variant starting with empty line and comment character at the beginning of 2nd line like in: /usr/lib/ispell/polish.aff +0 ubeshort 0x0a23 +# skip /etc/discover-modprobe.conf by looking for ispell declaration +>2 search/3118 defstringtype +>>0 use spell-aff +# starting with UTF-8 Byte Order Mark (BOM) https://en.wikipedia.org/wiki/Byte_order_mark +0 string \xEF\xBB\xBF +# starting with UTF-8 Byte Order Mark (BOM) followed by comment starting character +>3 string \x23 +# starting with UTF-8 BOM and with SET character command followed by whitespace +# like in: /opt/Wolfram/WolframEngine/13.1/SystemFiles/Components/SpellingData/SpellingDictionaries/lt.aff +# look for character SET command used in MySpell and Hunspell +>3 search/9883 SET\040 +>>0 use spell-aff +# look for FLAG type command used in MySpell and Hunspell +0 string FLAG +# followed by space character like in +# /opt/Wolfram/WolframEngine/13.1/SystemFiles/Components/SpellingData/SpellingDictionaries/en_US.aff +>4 ubyte 0x20 +>>0 use spell-aff +# or followed by tabulator character like in +# /opt/Wolfram/WolframEngine/13.1/SystemFiles/Components/SpellingData/SpellingDictionaries/ar.aff +>4 ubyte 0x09 +>>0 use spell-aff +# starting with character SET command used in MySpell and Hunspell like in: org/languagetool/resource/sv/hunspell/sv_SE.aff +0 string SET\040 +>0 use spell-aff +# starting with language code LANG used in MySpell and Hunspell like in: /usr/share/hunspell/tr_TR.aff +0 string LANG\040 +>0 use spell-aff +# starting with affix flag command AF used in MySpell and Hunspell like in: /usr/lib/thunderbird/extensions/langpack-hu@thunderbird.mozilla.org/dictionaries/hu.aff +0 string AF\040 +# look for number of flag vector aliases +>3 regex [0-9]{1,4} +>>0 use spell-aff +# display information (encoding,language,...) about affixes rules text for Ispell/MySpell/Hunspell +0 name spell-aff +>1 ubeshort x affix definition +#!:mime text/plain +!:mime text/x-affix +!:ext aff +# GRR: need extra test so that default clause works +>0 ubyte x +# look for ispell declaration +>>0 search/8251 defstringtype for Ispell +# ispell variant without declaration +>>0 default x +# look for ispell suffixes command +>>>0 search/3233 suffixes +# skip "suffixes used to create first part of a compound" by checking for flag argument like in: languagetool\resource\sv\hunspell\sv_SE.aff +>>>>&0 search/2 flag for Ispell +>>>>&0 default x for MySpell/Hunspell +# without suffixes keyword +>>>0 default x for MySpell/Hunspell +# look for language code command used in MySpell and Hunspell +# like in: /usr/share/hunspell/de_AT.aff /usr/share/hunspell/it_IT.aff /usr/share/hunspell/tr_TR.aff /usr/lib/firefox/browser/extensions/langpack-hu@firefox.mozilla.org/dictionaries/hu.aff +>>0 search/1117643 LANG\040 \b, language +# language code argument like: de_DE hu_HU it_IT mn_MN tr_TR +>>>&0 string x %s +# look for character SET command used in MySpell and Hunspell +>>0 search/1117729 SET +# skip SETTINGS like in /usr/lib/ispell/ngerman.aff +# SET command followed often by space character (0x20) or tabulator (0x09) like in +# /opt/Wolfram/WolframEngine/13.1/SystemFiles/Components/SpellingData/SpellingDictionaries/ar.aff +>>>&0 ubyte&0xD6 =0x00 +# skip SSET # schosS in /usr/lib/ispell/ogerman.aff +>>>>&0 ubyte >0x48 \b, +# character SET argument like: cp1251 ISCII-DEVANAGAR ISO8859-1 - ISO8859-10 ISO8859-13 - ISO8859-15 KOI8-R KOI8-U UTF-8 +>>>>>&-1 string x "%s" encoded +# for control reasons show first non empty lines for ASCII or ISO-8859 text variant +>1 ubeshort !0xBBBF +# 1st line starting with 0x0A like in /usr/src/dicts/sjp-ispell-pl-20140213/polish.aff +>>0 ubyte =0x0A +>>>1 ubyte !0x0A \b, 2nd line +>>>>&-1 string x "%s" +# 3rd line starting with 0x0A like in polish.aff +>>>>>&1 ubyte =0x0A +>>>>>>&0 string x \b, 4th line "%s" +# 1st line starting with ASCII text like: +# this is the affix file of the de_DE Hunspell dictionary +>>0 ubyte !0x0A +>>>0 string x \b, 1st line "%s" +>>>>&1 ubyte >0x1F \b, 2nd line +>>>>>&-1 string x "%s" +# 2nd line starting with 0x0A like in /usr/lib/ispell/bulgarian.aff +>>>>&1 ubyte =0x0A \b, 3rd line +>>>>>&0 string x "%s" +# for control reasons show first lines for variant starting with ByteOrderMark (BOM=\xEF\xBB\xBF) +>1 ubeshort =0xBBBF \b, with BOM +>>3 string x \b, 1st line "%s" +>>>&1 ubyte >0x1F \b, 2nd line +>>>>&-1 string x "%s" + +# From: Joerg Jenderek +# URL: https://en.wikipedia.org/wiki/GNU_Aspell +# https://manpages.ubuntu.com/manpages/trusty/en/man8/aspell-autobuildhash.8.html +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/r/rws-aspell.trid.xml +# https://ftp.gnu.org/gnu/aspell/aspell-0.60.8.tar.gz +# aspell-0.60.8/modules/speller/default/data.cpp +# aspell-0.60.8/modules/speller/default/readonly_ws.cpp +# Note: called "aspell dictionary" by TrID +0 string aspell\040default\040speller\040rowl aspell dictionary +#!:mime application/octet-stream +!:mime application/x-aspell-dictionary +!:ext rws +# version like: 1.10 1.4 +>28 string x \b, version %s +# u32int endian_check; 12345678=00BC614Eh +#>64 ulelong x \b, endian_check=%u +>>64 ulelong 12345678 \b, little endian +# not tested +>>64 ubelong 12345678 \b, big endian +# older aspell version not like 0.60.8 +>>64 default x \b, old +# URL: https://en.wikipedia.org/wiki/GNU_Aspell +# Reference http://aspell.net/man-html/Format-of-the-Personal-and-Replacement-Dictionaries.html +# personal_ws-1.1 lang num [encoding] +0 string personal_ aspell personal +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/p/pws-aspell.trid.xml +# Note: called "aspell Personal dictionary" by TrID +>9 string ws- dictionary +#!:mime text/plain +!:mime text/x-aspell-dictionary +# like: ~/.aspell.en.pws ~/.aspell.de_DE.pws ~/.aspell.it.pws +!:ext pws +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/p/prepl-aspell.trid.xml +# Note: called "aspell Personal Replacement dictionary" by TrID +# personal_repl-1.1 lang num [encoding] +>9 string repl- replacement dictionary +#!:mime text/plain +!:mime text/x-aspell-dictionary +# like: ~/.aspell.en.prepl ~/.aspell.de_DE.prepl ~/.aspell.it.prepl +!:ext prepl diff --git a/magic/Magdir/javascript b/magic/Magdir/javascript index 90a09cce46a2..85d4a70b46de 100644 --- a/magic/Magdir/javascript +++ b/magic/Magdir/javascript @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: javascript,v 1.5 2023/01/12 00:02:16 christos Exp $ +# $File: javascript,v 1.7 2024/11/10 14:48:55 christos Exp $ # javascript: magic for javascript and node.js scripts. # 0 string/tw #!/bin/node Node.js script executable @@ -17,51 +17,48 @@ !:mime application/javascript # JavaScript -# The strength is increased to beat the C++ & HTML rules +# The strength is increased to beat the C++ but lose to HTML rules, +# because javascript is embedded in hmtl files typically 0 search "use\x20strict" JavaScript source -!:strength +30 +!:strength +20 !:mime application/javascript !:ext js 0 search 'use\x20strict' JavaScript source -!:strength +30 +!:strength +20 !:mime application/javascript !:ext js 0 regex module(\\.|\\[["'])exports.*= JavaScript source -!:strength +30 +!:strength +20 !:mime application/javascript !:ext js 0 regex \^(const|var|let).*=.*require\\( JavaScript source -!:strength +30 +!:strength +20 !:mime application/javascript !:ext js 0 regex \^export\x20(function|class|default|const|var|let|async)\x20 JavaScript source -!:strength +30 +!:strength +20 !:mime application/javascript !:ext js 0 regex \\((async\x20)?function[(\x20] JavaScript source -!:strength +30 +!:strength +20 !:mime application/javascript !:ext js 0 regex \^(import|export).*\x20from\x20 JavaScript source -!:strength +30 +!:strength +20 !:mime application/javascript !:ext js 0 regex \^(import|export)\x20["']\\./ JavaScript source -!:strength +30 -!:mime application/javascript -!:ext js -0 regex \^require\\(["'] JavaScript source -!:strength +30 +!:strength +20 !:mime application/javascript !:ext js 0 regex typeof.*[!=]== JavaScript source -!:strength +30 +!:strength +20 !:mime application/javascript !:ext js # React Native minified JavaScript 0 search/128 __BUNDLE_START_TIME__= React Native minified JavaScript -!:strength +30 +!:strength +20 !:mime application/javascript !:ext bundle/jsbundle diff --git a/magic/Magdir/jpeg b/magic/Magdir/jpeg index 9cebadad70d5..8a18727dd2dc 100644 --- a/magic/Magdir/jpeg +++ b/magic/Magdir/jpeg @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: jpeg,v 1.38 2022/12/02 17:42:04 christos Exp $ +# $File: jpeg,v 1.40 2024/11/10 00:26:35 christos Exp $ # JPEG images # SunOS 5.5.1 had # @@ -34,12 +34,12 @@ >>13 byte 0 \b, aspect ratio >>13 byte 1 \b, resolution (DPI) >>13 byte 2 \b, resolution (DPCM) ->>14 beshort x \b, density %dx ->>16 beshort x \b%d ->>4 beshort x \b, segment length %d +>>14 ubeshort x \b, density %ux +>>16 ubeshort x \b%u +>>4 ubeshort x \b, segment length %u # Next, show thumbnail info, if it exists: ->>18 byte !0 \b, thumbnail %dx ->>>19 byte x \b%d +>>18 byte !0 \b, thumbnail %ux +>>>19 byte x \b%u >6 string Exif \b, Exif standard: [ >>12 indirect/r x >>12 string x \b] @@ -57,22 +57,22 @@ >0 beshort 0xFFC0 >>(2.S+2) use jpeg_segment >>4 byte x \b, baseline, precision %d ->>7 beshort x \b, %dx ->>5 beshort x \b%d +>>7 ubeshort x \b, %ux +>>5 ubeshort x \b%u >>9 byte x \b, components %d >0 beshort 0xFFC1 >>(2.S+2) use jpeg_segment >>4 byte x \b, extended sequential, precision %d ->>7 beshort x \b, %dx ->>5 beshort x \b%d +>>7 ubeshort x \b, %ux +>>5 ubeshort x \b%u >>9 byte x \b, components %d >0 beshort 0xFFC2 >>(2.S+2) use jpeg_segment >>4 byte x \b, progressive, precision %d ->>7 beshort x \b, %dx ->>5 beshort x \b%d +>>7 ubeshort x \b, %ux +>>5 ubeshort x \b%u >>9 byte x \b, components %d # Define Huffman Tables @@ -165,25 +165,40 @@ #45 beshort 0xff52 # JPEG extended range +# Update: Joerg Jenderek 2023 # URL: http://fileformats.archiveteam.org/wiki/JPEG_XR # Reference: https://www.itu.int/rec/T-REC-T.832 # http://mark0.net/download/triddefs_xml.7z/defs/b/bitmap-wmp.trid.xml -# Note: called by TrID "JPEG XR bitmap" +# http://mark0.net/download/triddefs_xml.7z/defs/b/bitmap-jxr.trid.xml +# Note: called by TrID "JPEG XR bitmap" and "JPEG XR bitmap (WMPHOTO)" +# verified as "JPEG XR" by XnView `nconvert -fullinfo *.jxr *.wdp` +# partly by ImageMagick command `identify -verbose *.wdp` +# and libjxr-tools `JxrDecApp -v -i example.wdp -o example.tif` 0 string \x49\x49\xbc -# FILE_VERSION_ID; shall be equal to 1; other values are reserved for future use +# FILE_VERSION_ID; shall be equal to 1; other values are reserved for future use and are unlike to appear >3 byte 1 # FIRST_IFD_OFFSET; shall be an integer multiple of 2; so skip DROID fmt-590-signature-id-931.wdp ->>4 lelong%2 0 JPEG-XR +>>4 lelong%2 0 JPEG-XR Image #!:mime image/vnd.ms-photo !:mime image/jxr # NO example for HDP ! !:ext jxr/wdp/hdp # MAYBE also WMP ? #!:ext jxr/wdp/hdp/wmp -# moved from ./images (version 1.205 ), merged and -# partly verified by XnView `nconvert -info abydos.jxr FLOWER.wdp` -# example: https://web.archive.org/web/20160403012904/ +# moved from ./images (version 1.243 ) and merged +# example: # http://shikino.co.jp/solution/upfile/FLOWER.wdp.zip +# often GDI_SIGNATURE "WMPHOTO\0" at offset 90 like: FLOWER.wdp abydos.jxr SMALLTOMATO.wdp +>90 bequad 0x574D50484F544F00 +>>0 use jxr-info +# seldom no GDI_SIGNATURE WMPHOTO\0 at offset 90 like: example.wdp MARKET-3361-ipm-bg-DE-treat[1].wdp +>90 bequad !0x574D50484F544F00 +# look for GDI_SIGNATURE WMPHOTO\0 at other offset +>>4 search/3267/sb WMPHOTO\0 +>>>&-90 use jxr-info +# +0 name jxr-info +# check for GDI_SIGNATURE that corresponds to "WMPHOTO\0" >90 bequad 0x574D50484F544F00 >>98 byte&0x08 =0x08 \b, hard tiling >>99 byte&0x80 =0x80 \b, tiling present @@ -198,8 +213,8 @@ >>99 byte&0x38 0x30 \bLT >>99 byte&0x38 0x38 \bLB >>100 byte&0x80 =0x80 \b, short header ->>>102 beshort+1 x \b, %d ->>>104 beshort+1 x \bx%d +>>>102 beshort+1 x \b, %u +>>>104 beshort+1 x \bx%u >>100 byte&0x80 =0x00 \b, long header >>>102 belong+1 x \b, %x >>>106 belong+1 x \bx%x diff --git a/magic/Magdir/keyman b/magic/Magdir/keyman new file mode 100644 index 000000000000..81d4d4ca0fc8 --- /dev/null +++ b/magic/Magdir/keyman @@ -0,0 +1,14 @@ + +#------------------------------------------------------------------------------ +# $File: keyman,v 1.2 2024/10/17 19:23:07 christos Exp $ +# +# Keyman support for .kmx and .kmp files (kmp support is in archive) +# +# https://help.keyman.com/developer/current-version/reference/file-types/kmx +# https://help.keyman.com/developer/current-version/reference/file-types/kmp + +0 string/b KXTS Keyman Compiled Keyboard File +!:ext kmx +!:mime application/vnd.keyman.kmx +>4 lelong x version 0x%x +>>48 lelong &32 KMX+ Data diff --git a/magic/Magdir/lammps b/magic/Magdir/lammps index 5424383db80f..96454fe7806d 100644 --- a/magic/Magdir/lammps +++ b/magic/Magdir/lammps @@ -1,7 +1,6 @@ -#------------------------------------------------------------------------------ -# $File: lammps,v 1.1 2021/03/14 16:24:18 christos Exp $ -# +#------------------------------------------------------------------------------ +# $File: lammps,v 1.2 2024/06/10 23:09:52 christos Exp $ # Magic file patterns for use with file(1) for the # LAMMPS molecular dynamics simulation software. # https://lammps.sandia.gov diff --git a/magic/Magdir/lauterbach b/magic/Magdir/lauterbach new file mode 100644 index 000000000000..229157fce4e6 --- /dev/null +++ b/magic/Magdir/lauterbach @@ -0,0 +1,7 @@ + +#------------------------------------------------------------------------------ +# $File: lauterbach,v 1.1 2024/10/02 01:45:32 christos Exp $ +# Lauterbach GmbH file formats +# +0 string trace32\x20analyzer\x20data Lauterbach T32 trace data +!:ext ad diff --git a/magic/Magdir/linux b/magic/Magdir/linux index ae181148dfb9..16aadca87d1a 100644 --- a/magic/Magdir/linux +++ b/magic/Magdir/linux @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: linux,v 1.85 2023/07/17 14:40:09 christos Exp $ +# $File: linux,v 1.91 2024/11/09 21:15:48 christos Exp $ # linux: file(1) magic for Linux files # # Values for Linux/i386 binaries, from Daniel Quinlan <quinlan@yggdrasil.com> @@ -137,34 +137,230 @@ # Linux kernel boot images, from Albert Cahalan <acahalan@cs.uml.edu> # and others such as Axel Kohlmeyer <akohlmey@rincewind.chemie.uni-ulm.de> # and Nicolas Lichtmaier <nick@debian.org> -# All known start with: b8 c0 07 8e d8 b8 00 90 8e c0 b9 00 01 29 f6 29 +# and Joerg Jenderek [unifying + more kernel info] +# many start with: b8 c0 07 8e d8 b8 00 90 8e c0 b9 00 01 29 f6 29 +# by assembler instructions like: movw $0x07c0,%ax; movw %ax,%ds; movw $0x9000,%ax; movw %ax,%es; movw $0x0001,%cx; subw %si,%si; subw # Linux kernel boot images (i386 arch) (Wolfram Kleff) # URL: https://www.kernel.org/doc/Documentation/x86/boot.txt 514 string HdrS Linux kernel +# to display Linux kernel (strength=125=70+55) after VBR boot sector (130=70+60) but before DOS/MBR IPL (115=50+65), MBR boot sector (105=40+65) via ./filesystem +# before MZ PE32 executable (EFI application) (strength=50) and before DOS executable (COM) (strength=40) with start instruction 0xe9 via ./msdos !:strength + 55 # often no extension like in linux, vmlinuz, bzimage or memdisk but sometimes # Acronis Recovery kernel64.dat and Plop Boot Manager plpbtrom.bin # DamnSmallLinux 1.5 damnsmll.lnx +#!:mime application/octet-stream +!:mime application/x-linux-kernel !:ext /dat/bin/lnx +# GRR: does there exist here samples without 55AA boot signature? I believe NO (Joerg Jenderek) >510 leshort 0xAA55 x86 boot executable +>>0 use kernel-info +# show information about Linux kernel (root, swap device, vga modus, boot protocol, setup size, init_size, EFI entry point) +0 name kernel-info +# like: plpbtrom.bin +# After 16 bit jump instruction Hi, are you searching something? This is the Plop Boot Manager written by Elmar Hanlhofer http?://www.plop.at +>48 string Plop\040Boot\040Manager from PLOP Boot Manager +# dummy test below 512 limit (for LILO 24.2 bootsect.b) to get same magic indention level like in v 1.85 +# and display comma before zImage/bzImage or version +>498 leshort x \b, +# boot protocol option flags valid since boot protocol >= 2.00 >>518 leshort >0x1ff ->>>529 byte 0 zImage, ->>>529 byte 1 bzImage, ->>>526 lelong >0 +# loadflags bit 0 (read); LOADED_HIGH; if 0, the protected-mode code is loaded at 0x10000 +>>>529 ubyte&0x01 0 zImage, +# loadflags bit 0 (read); LOADED_HIGH; if 1, the protected-mode code is loaded at 0x100000; that implies is_bzImage +>>>529 ubyte&0x01 1 bzImage, +# kernel_version; since protocol 2.00 if not zero 2 byte pointer to kernel version string -200h; should be < 200h*setup_sects +# 0h (ldntldr.bin plpbtrom.bin) 260h (memtest32.bin memtest64.bin) 3b0h (memdisk16.bin) 890h (damnsmll.lnx) 3400h (linux64) 3640h (linux) +#>>>526 uleshort x kernel_version=%#4.4x +>>>526 uleshort >0 +# GRR: \353fHdrS\003\002 wrong shown if kernel_version=0 like in ldntldr.bin (GRUB for DOS) >>>>(526.s+0x200) string >\0 version %s, +# 498 MasterBootRecord 4th partition entry partition type (0~empty 1~FAT12) done by ./filesystems +# 499 MasterBootRecord 4th partition entry end heads done by ./filesystems +# root_flags; if set (=1), the root is mounted readonly; deprecated, use the "ro" or "rw" option on the command line instead +#>>498 uleshort >1 root_flags=%u >>498 leshort 1 RO-rootFS, >>498 leshort 0 RW-rootFS, +# root_dev; default root device number like 0 301h (/dev/hda1 damnsmll.lnx) 380h (/dev/hd?? linux-elks); deprecated and replaced by command line option root= >>508 leshort >0 root_dev %#X, ->>502 leshort >0 swap_dev %#X, +# since protocol 2.04 the 2 upper bytes of long syssize and not swap_dev any more +>>518 uleshort <0x204 +# 502-505 MasterBootRecord 4th partition entry 1st LBA sector done by ./filesystems +>>>502 leshort >0 swap_dev %#X, >>504 leshort >0 RAMdisksize %u KB, +# 506-509 MasterBootRecord 4th partition entry sectors in partition done by ./filesystems >>506 leshort 0xFFFF Normal VGA >>506 leshort 0xFFFE Extended VGA >>506 leshort 0xFFFD Prompt for Videomode >>506 leshort >0 Video mode %d +# more kernel information added by Joerg Jenderek 2023 +# if needed display comma after video mode and before setup_sects +>>506 leshort >-4 +>>>506 leshort !0 \b, +# setup_sects; if field contains 0, the real value is 4; size of the setup in sectors like: +# 0 (memdisk16.bin) 1 (ldntldr.bin) 2 (memtest32.bin memtest64.bin) 4 (plpbtrom.bin linux-elks) 8 (bootsect.b) 10 (damnsmll.lnx) 25 27 (linux64) 29 30 31 33 (linux) +# MasterBootRecord 4th partition entry start cylinder bits 0-7 done by ./filesystems +>>497 ubyte !0 setup size 512*%u +>>497 ubyte =0 setup size 512*4 (not 0) +# 500 MasterBootRecord 4th partition entry end sectors+cylinder bits 8-9 done by ./filesystems +# 501 MasterBootRecord 4th partition entry end cylinder bits 0-7 done by ./filesystems +# syssize; 32-bit code size in 16-byte paragraphs; since protocol 2.04 long before unreliable short +>>518 uleshort <0x204 \b, +# 0 (ldntldr.bin) 0 (memdisk16.bin) f180h (damnsmll.lnx) +>>>500 uleshort x syssize %#x +>>518 uleshort >0x203 \b, +# 0 (plpbtrom.bin) 1270h (linux-elks) 217eh (memtest32.bin) 22deh (memtest64.bin) 2c01h (memtest86+.bin) 459c6h (linux misinterpreted as swap_dev 0X4) 70c32h (linux64 misinterpreted as swap_dev 0X7) +>>>500 ulelong x syssize %#x +# jump; jump instruction relative to byte 0x202 +>>512 ubyte =0xEB \b, jump +# jump adress like: 0x230 (damnsmll.lnx) 0x240 (memdisk16.bin) 0x268 (memtest32.bin memtest64.bin ldntldr.bin linux AFTER handover offset) 0x26c (linux64) +>>>513 byte+2 x 0x2%2.2x +# next instruction like: +# b800088ec00fb60e mov ax,0x0800; mov es,ax; movzx cx,byte [] memdisk16.bin +# 8cc88ed88ec0e88b00 movw %cs,%ax; movw %ax,%ds; movw %ax,%es; call get_mem_info memtest32.bin +# 8cc88ed88ec0e88b00 movw %cs,%ax; movw %ax,%ds; movw %ax,%es; call get_mem_info memtest64.bin +>>>(513.b+514) ubequad x %#16.16llx instruction +# without jump instruction like: 0 (bootsect-lilo-24.2.b EOF!) 0xb8 (mov linux-elks) 0xfa (cli memtest86+.bin) +>>512 ubyte !0xEB \b, at 0x200 %#x instruction +# boot protocol version field valid since version >= 2.00 which is indicated by HdrS magic +# so skip memtest86+.bin with misinterpreted protocol 144.0 (0x9000) +>>514 string HdrS \b, +# Boot protocol version; 2.3 (ldntldr.bin damnsmll.lnx) 2.6 (plpbtrom.bin) 2.10 2.11 (linux) 2.12 (memtest32.bin) 2.13 2.15 (linux64) +>>>519 ubyte x protocol %u +>>>518 ubyte x \b.%u +# boot protocol in hexadecimal needed for addtional tests +#>>>518 uleshort x (%#4.4x) +# type_of_loader; Boot loader identifier; filled out by the bootloader +>>>528 ubyte >0 \b, loader %#x +# loadflags; boot protocol option flags +#>>>529 ubyte x loadflags=%#x +# loadflags bit 1 (kernel internal); KASLR_FLAG KASLR status to kernel +>>>529 ubyte&0x02 !0 \b, KASLR enabled +# loadflags bit 5 (write); QUIET_FLAG +>>>529 ubyte&0x20 !0 \b, quiet +# loadflags bit 6 (write) since boot protocal version >= 2.07; KEEP_SEGMENTS +>>>518 uleshort >0x206 +>>>>529 ubyte&0x40 !0 \b, keep segments +# loadflags bit 7 (write); CAN_USE_HEAP +>>>529 ubyte&0x80 !0 \b, can use heap +# payload_offset; since boot protocol 2.08 if non-zero contains offset of the protected-mode code to the payload like: cdh (linux) 40dh (linux64) +>>>518 uleshort >0x207 +>>>>584 ulelong >0 \b, from protected-mode code at offset %#x +# payload_length; since boot protocol 2.08 the length of the payload like: 452c41h (linux) 6fb644h (linux64) +>>>>>588 ulelong x %#x bytes +# jump setup size sectors a 512 bytes from kernel beginning +>>>>>(497.b*512) ubequad x +#>>>>>(497.b*512) ubequad x 512BYTES_BEFORE_PROTECTED-MODE_CODE=%#16.16llx +# jump payload_offset bytes + 512 bytes (for boot sector) - 8 (ubequad length) to payload start +#>>>>>>&(584.l+504) ubeshort x PAYLOAD=%#4.4x +# supported compression formats are gzip (magic numbers 1F8B or 1F9E linux) bzip2 (425A), LZMA (5D00 linux64), XZ (FD37) LZ4 (0221) ZST v0.8+ (28B5) +>>>>>>&(584.l+504) ubeshort =0x1F8B gzip compressed +>>>>>>&(584.l+504) ubeshort =0x1F9E gzip compressed +>>>>>>&(584.l+504) ubeshort =0x425A bzip2 compressed +>>>>>>&(584.l+504) ubeshort =0x5D00 LZMA compressed +>>>>>>&(584.l+504) ubeshort =0xFD37 XZ compressed +>>>>>>&(584.l+504) ubeshort =0x0221 LZ4 compressed +>>>>>>&(584.l+504) ubeshort =0x28B5 ZST compressed +# TODO: handle compressed data by ./compress; difficulties with leading space and duplicate gzip compressed +#>>>>>>&(584.l+504) indirect x COMPRESS_NOT_WORKING +# setup_move_size; for protocol 2.00-2.01; bytes starting with the beginning of the boot sector +# like: 0 (ldntldr.bin memdisk16.bin memtest32.bin memtest64.bin plpbtrom.bin) 8000h (damnsmll.lnx linux linux64) +>>>518 uleshort <0x202 +>>>>518 uleshort >0x1FF +>>>>530 uleshort x \b, setup_move_size %#4.4x +# code32_start; address to jump to in protected mode like: 100000h (linux linux64 memtest32.bin memtest64.bin) +#>>>>532 ulelong >0 \b, code32_start %#x +# kernel_alignment; since boot protocol 2.05 alignment unit required by the kernel (if relocatable_kernel is true) like: 0 (plptrom.bin) 1000h (memtest32.bin memtest64.bin) 200000h (linux) 1000000h (linux64) +#>>>518 uleshort >0x204 +#>>>>560 ulelong x \b, kernel_alignment %#x +# relocatable_kernel; since boot protocol 2.05 the protected-mode part of the kernel can be loaded at any address if this field is nonzero +>>>518 uleshort >0x204 +>>>>564 ubyte =1 \b, relocatable +#>>>>564 ubyte x \b, relocatable_kernel=%u +# min_alignment; since boot protocol 2.10 if nonzero, indicates as a power of two the minimum alignment required like: 12 (4 KB memtest32.bin memtest64.bin) 13 (8 KB linux) 21 (2 MB linux64) +#>>>518 uleshort >0x209 +#>>>>565 ubyte >0 \b, min_alignment %u +# xloadflags; since boot protocol 2.12 like: 3fh (linux64 unexpected value) 4h(memtest32.bin) 9h(memtest64.bin) +>>>518 uleshort >0x20B +#>>>>566 uleshort x \b, xloadflags=%#4.4x +# handover_offset; offset from beginning of kernel image to EFI handover protocol entry point like: +# 0 (damnsmll.lnx ldntldr.bin) 10h (memtest32.bin memtest64.bin) 30h (linux) 190h (linux64) 8e9000b8h (plpbtrom.bin INVALID!) +# this value makes only sense when 32 or 64-bit EFI handoff entry point +>>>>566 uleshort&0x000C !0 \b, handover offset +>>>>>612 ulelong x %#x +# Bit 0 XLF_KERNEL_64; if 1, this kernel has the legacy 64-bit entry point at 0x200 +>>>>566 uleshort&0x0001 !0 \b, legacy 64-bit entry point +# Bit 1 XLF_CAN_BE_LOADED_ABOVE_4G; if 1, kernel/boot_params/cmdline/ramdisk can be above 4G +>>>>566 uleshort&0x0002 !0 \b, can be above 4G +# Bit 2 XLF_EFI_HANDOVER_32; if 1, the kernel supports the 32-bit EFI handoff entry point +>>>>566 uleshort&0x0004 !0 \b, 32-bit EFI handoff entry point +# Bit 3 XLF_EFI_HANDOVER_64; if 1, the kernel supports the 64-bit EFI handoff entry point +>>>>566 uleshort&0x0008 !0 \b, 64-bit EFI handoff entry point +# Bit 4 EFI_KEXEC; if 1, the kernel supports kexec EFI boot with EFI runtime support +>>>>566 uleshort&0x0010 !0 \b, EFI kexec boot support +# GRR: What does bit 5 mean? +>>>>566 uleshort&0x0020 !0 \b, xloadflags bit 5 +# cmdline_size; since boot protocol 2.06 maximum size of the kernel command line like: 255 (memtest32.bin memtest64.bin) 2047 (linux linux64 plpbtrom); version <= 2.06 maximum was 255 +>>>518 uleshort >0x205 +>>>>568 ulelong x \b, max cmdline size %u +# hardware_subarch; since boot protocol 2.07 hardware subarchtecture like: 0~default x86 1~lguest 2~Xen 3~Moorestown 4~CE4100 TV +>>>518 uleshort >0x206 +>>>>572 ulelong >0 \b, hardware_subarch %u +# hardware_subarch_data; since boot protocol 2.07 pointer to data specific for hardware subarch; unused for default x86 +>>>>>576 ulequad >0 \b, hardware_subarch_data %#llx +# setup_data; since boot protocol 2.09 64-bit physical pointer to NULL terminated single linked list of struct setup_data +>>>518 uleshort >0x208 +>>>>592 ulequad >0 \b, setup_data %16.16llx +# pref_address; since boot protocol 2.10 if nonzero preferred load address for kernel like: 100000h (memtest32.bin memtest64.bin) 200000h (linux) 1000000h (linux64) +#>>>518 uleshort >0x209 +#>>>>600 ulequad >0 \b, pref_address %#llx +# init_size; since boot protocol 2.10 indicates amount of contiguous memory kernel needs before it is capable of examining its memory map +# like: 0h (damnsmll.lnx) 687f8h (memtest32.bin) 6acf8h (memtest64.bin) aa3000h (linux) 2514000h (linux64) 67ea0000h (memdisk16.bin INVALID) a4f3f2ffh (plpbtrom.bin INVALID) ffffff80h (ldntldr.bin INVALID) +>>>518 uleshort >0x209 +>>>>608 ulelong x \b, init_size %#x # This also matches new kernels, which were caught above by "HdrS". -0 belong 0xb8c0078e Linux kernel +# but also few samples without "HdrS" magic like: bootsect-lilo-24.2.b linux-elks memtest86+.bin +# URL: https://tldp.org/HOWTO/Linux-i386-Boot-Code-HOWTO/bootsect.html +#0 belong 0xb8c0078e Linux kernel +0 belong 0xb8c0078e +# to display Linux x86 kernel or Linux ELKS Kernel (strength=70=70+0) after VBR boot sector (130=70+60) DOS/MBR IPL (115=50+65), MBR boot sector (105=40+65) via ./filesystem +#!:strength +0 +# "newer" kernel (with HdrS magic) already done before +>514 string HdrS +# so handle "old" kernel variant (without HdrS magic) +>514 default x Linux +#!:mime application/octet-stream +!:mime application/x-linux-kernel +# GRR: in file 5.45 remaining default clause not working for samples with size = 512 like LILO 24.2 bootsect.b +>>0 belong x +# ELKS kernel variant is now unified with other "old" kernel variant (without HdrS magic) +>>0x1e6 belong =0x454c4b53 ELKS Kernel +!:ext / +# "old" kernel variant and not ELKS +>>0x1e6 belong !0x454c4b53 x86 kernel +!:ext /b/bin +# show kernel version information based on "Loading" message offset +>>0 use kernel-version-old1 +# unified "old" variant with start instruction \xb8\xc0\x07\x8e\xd8\xb8\x00\x90 +>>4 string \xd8\xb8\x00\x90 +# show kernel version information part 2 for "old" kernel variant (without HdrS magic) based on new HdrS field +>>>0 use kernel-version-old2 +# show kernel version information part 3 for "old" kernel variant (without HdrS magic) based on new HdrS field +>>>0 use kernel-version-old3 +# show common kernel information +>>0 use kernel-info +# show kernel version information part 1 for "old" kernel variant (without HdrS magic) based on "Loading" message offset +0 name kernel-version-old1 >0x1e3 string Loading version 1.3.79 or older >0x1e9 string Loading from prehistoric times +# LILO 24.2-5.1 bootsect.b +>0x1c5 string Loading from LILO 24.2 +# Memtest86 5.31b memtest86+.bin +>0x1d2 string Loading from Memtest86 5.31b +# DamnSmallLinux kernel version 2.4.26 damnsmll.lnx not needed because done by kernel_version pointer +#>0x1cb string Loading damnsmll.lnx 2.4.26~ +# Memtest86+ v6.20 memtest32.bin not needed because done by kernel_version pointer +#>0x1c6 string Loading\040Memtest86+ from Memtest86+ v6.20 # System.map files - Nicolas Lichtmaier <nick@debian.org> 8 search/1 \ A\ _text Linux kernel symbol map text @@ -183,13 +379,37 @@ ############################################################################ # Linux kernel versions -0 string \xb8\xc0\x07\x8e\xd8\xb8\x00\x90 Linux +# apply only to "old" kernel variant (without HdrS magic) like damnsmll.lnx memtest86+.bin +# wrong (497 setup_sects 498 root_flags) and now already done by 1st unified "old" kernel variant +#0 string \xb8\xc0\x07\x8e\xd8\xb8\x00\x90 Linux +0 string \xb8\xc0\x07\x8e\xd8\xb8\x00\x90foo OLD_VARIANT Linux >497 leshort 0 x86 boot sector +>>0 use kernel-version-old2 +>497 leshort !0 x86 kernel +# not needed any more because information is now shown by common kernel-info with other phrases +>>0 use kernel-info-old +# kernel version information part 3 for "old" kernel variant (without HdrS magic) based on HdrS field +>>0 use kernel-version-old3 +>>0 use kernel-version-4 +# version information part 2 for "old" kernel variant (without HdrS magic) based on new HdrS field +0 name kernel-version-old2 +# dummy test to get same magic indention level like in v 1.85 +>518 leshort x >>514 belong 0x8e of a kernel from the dawn of time! >>514 belong 0x908ed8b4 version 0.99-1.1.42 >>514 belong 0x908ed8b8 for memtest86 - +# dummy test function to get same magic indention level like in v 1.85 +0 name kernel-version-dummy >497 leshort !0 x86 kernel +# not needed any more because information is now shown by kernel-info +#>0 use kernel-info-old +>>0 use kernel-info +# kernel version information part 3 for "old" kernel variant (without HdrS magic) based on HdrS field +>0 use kernel-version-old3 +# deprecated because same information is shown by kernel-info with other phrases +0 name kernel-info-old +# dummy test to get same magic indention level like in v 1.85 +>504 leshort x >>504 leshort >0 RAMdisksize=%u KB >>502 leshort >0 swap=%#X >>508 leshort >0 root=%#X @@ -199,6 +419,10 @@ >>506 leshort 0xFFFE vga=extended >>506 leshort 0xFFFD vga=ask >>506 leshort >0 vga=%d +# kernel version information part 3 for "old" kernel variant (without HdrS magic) based on HdrS field +0 name kernel-version-old3 +# dummy test to get same magic indention level like in v 1.85 +>514 belong x >>514 belong 0x908ed881 version 1.1.43-1.1.45 >>514 belong 0x15b281cd >>>0xa8e belong 0x55AA5a5a version 1.1.46-1.2.13,1.3.0 @@ -207,16 +431,27 @@ >>>0xaa6 belong 0x55AA5a5a version 1.3.31-1.3.41 >>>0xb2b belong 0x55AA5a5a version 1.3.42-1.3.45 >>>0xaf7 belong 0x55AA5a5a version 1.3.46-1.3.72 +# show kernel version information part 4 for kernel variant (with HdrS magic) based on "HdrS" field +# not needed any more because information is now shown by common kernel-info +0 name kernel-version-4 +# dummy test to get same magic indention level like in v 1.85 +>518 leshort x >>514 string HdrS >>>518 leshort >0x1FF >>>>529 byte 0 \b, zImage >>>>529 byte 1 \b, bzImage +# GRR: Not valid if kernel_version=0 >>>>(526.s+0x200) string >\0 \b, version %s # Linux boot sector thefts. -0 belong 0xb8c0078e Linux ->0x1e6 belong 0x454c4b53 ELKS Kernel ->0x1e6 belong !0x454c4b53 style boot sector +# ELKS kernel variant is now unified with above "old" kernel variant (without HdrS magic) +#0 belong 0xb8c0078e Linux +# display "Linux ELKS Kernel" or "Linux style boot sector" (strength=70) after DOS/MBR IPL (115=50+65) and MBR boot sector (105=40+65) via ./filesystem +#!:strength +0 +# https://en.wikipedia.org/wiki/Embeddable_Linux_Kernel_Subset +# https://github.com/jbruchon/elks/releases/download/v0.6.0/fd2880-fat.img/linux +#>0x1e6 belong 0x454c4b53 ELKS Kernel +#>0x1e6 belong !0x454c4b53 style boot sector ############################################################################ # Linux S390 kernel image @@ -238,16 +473,44 @@ # Linux ARM compressed kernel image # From: Kevin Cernekee <cernekee@gmail.com> # Update: Joerg Jenderek +# Update: Luke T. Shumaker +0 name arm-zimage +# Version indicators +>0x34 lelong 0x45454545 (kernel >=v4.15) +>0x34 lelong !0x45454545 +>>0x30 clear x +>>0x30 belong 0x04030201 (kernel >=v3.17, <v4.15) +>>0x30 lelong 0x04030201 (kernel >=v3.17, <v4.15) +>>0x30 default x (kernel <v3.17) +# Endianness indicators +# +# The kernel has 3 endianness modes: little-endian, and 2 variants of +# big-endian: BE-32 (ARMv5) and BE-8 (ARMv6+). +# +# In kernels <v3.17: +# - the 0x016f2818 @ 0x24 magic number indicates big-endian or +# little-endian (can't distinguish between BE-8 and BE-32) +# In kernels >=v3.17: +# - a new 0x04030201 @ 0x30 magic number indicates big-endian or +# little-endian, but doesn't distinguish between BE-8 and BE-32 +# - the old 0x016f2818 @ 0x24 magic number is little-endian for +# LE *and* BE-8, or big-endian for BE-32 +# +# >=v3.17 +>0x30 clear x +>0x30 belong 0x04030201 (big-endian, +>>0x24 belong 0x016f2818 BE-32, ARMv5) +>>0x24 lelong 0x016f2818 BE-8, ARMv6+) +>0x30 lelong 0x04030201 (little-endian) +# <v3.17 +>0x30 default x +>>0x24 lelong 0x016f2818 (little-endian) +>>0x24 belong 0x016f2818 (big-endian) + 0x24 lelong 0x016f2818 Linux kernel ARM boot executable zImage -# There are three possible situations: LE, BE with LE bootloader and pure BE. -# In order to aid telling these apart a new endian flag was added. In order -# to support kernels before the flag and BE with LE bootloader was added we'll -# do a negative check against the BE variant of the flag when we see a LE magic. ->0x30 belong !0x04030201 (little-endian) -# raspian "kernel7.img", Vu+ Ultimo4K "kernel_auto.bin" -!:ext img/bin ->0x30 belong 0x04030201 (big-endian) -0x24 belong 0x016f2818 Linux kernel ARM boot executable zImage (big-endian) +>0 use arm-zimage +0x24 belong 0x016f2818 Linux kernel ARM boot executable zImage +>0 use arm-zimage ############################################################################ # Linux AARCH64 kernel image @@ -259,6 +522,12 @@ >0x18 lelong &6 \b, 32K pages ############################################################################ +# Linux RISC-V kernel image +0x38 string RSC\05 Linux kernel RISC-V boot executable Image +>0x18 lelong ^1 \b, little-endian +>0x18 lelong &1 \b, big-endian + +############################################################################ # Linux 8086 executable 0 lelong&0xFF0000FF 0xC30000E9 Linux-Dev86 executable, headerless >5 string . @@ -357,26 +626,12 @@ >8 lelong x version %d, >12 lelong x chunk_size %d -# SE Linux policy database -0 lelong 0xf97cff8c SE Linux policy ->16 lelong x v%d ->20 lelong 1 MLS ->24 lelong x %d symbols ->28 lelong x %d ocons - # Summary: Xen saved domain file # Created by: Radek Vokal <rvokal@redhat.com> 0 string LinuxGuestRecord Xen saved domain >20 search/256 (name >>&1 string x (name %s) -# Type: Xen, the virtual machine monitor -# From: Radek Vokal <rvokal@redhat.com> -0 string LinuxGuestRecord Xen saved domain -#>2 regex \(name\ [^)]*\) %s ->20 search/256 (name (name ->>&1 string x %s...) - # Systemd journald files # See https://www.freedesktop.org/wiki/Software/systemd/journal-files/. # From: Zbigniew Jedrzejewski-Szmek <zbyszek@in.waw.pl> @@ -541,12 +796,90 @@ # Site: https://fedorahosted.org/mlocate/ # Format docs: https://linux.die.net/man/5/mlocate.db # Type: mlocate database file +# URL: https://en.wikipedia.org/wiki/Locate_(Unix) # URL: https://fedorahosted.org/mlocate/ # From: Wander Nauta <info@wandernauta.nl> +# Update: Joerg Jenderek 0 string \0mlocate mlocate database ->12 byte x \b, version %d +#!:mime application/octet-stream +!:mime application/x-mlocate +# default mlocate.db if not overriden with --output option of updatedb +!:ext db +# at the moment value is 0; a higher version will probably not occur, because mlocate is now often replaced by plocate +>12 byte !0 \b, version %d +# configured with -l option of updatedb >13 byte 1 \b, require visibility +# 2 byte pad for 32-bit total alignment +#>14 short !0 \b, padding %#x +# standard is 1 byte / if not overriden with --database-root option of updatedb >16 string x \b, root %s +# 1st variable name nil terminated like: prune_bind_mounts +>>&1 string x \b, 1st variable %s +# 1st variable value like: 0 1 +>>>&1 string x \b=%s +# configuration block size in big endian like: 82 85 174 181 185 483 491 496 497 556 600 +>8 ubelong x \b, configuration size %u + +# URL: https://plocate.sesse.net/ +# Reference: https://plocate.sesse.net/download/plocate-1.1.19.tar.gz +# plocate-1.1.19/db.h +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/d/db-plocate.trid.xml +# Note: called "plocate database" by TrID +# magic[8] +0 string \0plocate plocate database +#!:mime application/octet-stream +!:mime application/x-plocate +# default /var/lib/plocate/plocate.db if not overriden with --output option of updatedb.plocate +!:ext db +# version; 2 is the current version +>8 ulelong !1 \b, version %u +# hashtable_size; like 1 (for "empty" samples) 1b5c3h +#>12 ulelong >1 \b, hash table size %#x +# extra_ht_slots; like: 10h +>16 ulelong !0x10 \b, extra_ht_slots %#x +# num_docids; like 0 (for "empty" samples) a132h +>20 ulelong >0 \b, num_docids %u +# hash_table_offset_bytes; 78h (for "empty" samples) afdf99h +#>24 ulequad !0x78 \b, hash table offset %#llx +# filename_index_offset_bytes; 70h (for "empty" samples) aad571h +#>32 ulequad !0x70 \b, filename index offset %#llx +# version 1 and up only +>8 ulelong >0 +# max_version; nominally 1 or 2 but can be increased if more features are added in a backward-compatible way +>>40 ulelong !2 \b, max version %u +# zstd_dictionary_length_bytes; 0 (for "empty" samples) 400h +>>44 ulelong !0 \b, at %#x +# zstd_dictionary_offset_bytes; 0 (for "empty" samples) 70h +>>48 ulequad >0 \b+%#llx +# jump to beginning of zstd dictionary +>>>(48.q) ubequad x +# jump realative zstd dictionary length bytes - 8 (quad length) forward to ZST data beginning +#>>>>&(44.l-8) ubelong x ZST=%8.8x +>>>>&(44.l-8) ubelong x +# print 1 space char after zstd_dictionary_offset and then handles Zstandard compressed data by ./compress +# to get phrase like "at 0x400+0x70 Zstandard compressed data (v0.8+)" +>>>>>&-4 indirect x \b +# only if max_version >= 2 and only relevant for updatedb +>40 ulelong >1 +# directory_data_length_byte +#>>56 ulequad x \b, directory data length %#llx +# directory_data_offset_bytes; +#>>64 ulequad x offset %#llx +# next_zstd_dictionary_length_bytes; 0 (for "empty" samples) 400h +>>72 ulequad >0 \b, next zstd dictionary length %#llx +# next_zstd_dictionary_offset_bytes; 0 (for "empty" samples) 14b9cb8h +>>>80 ulequad >0 offset %#llx +# conf_block_length_bytes like; 65 147 148 151 152 452 537 540 543 +>>88 ulequad x \b, configuration size %llu +# conf_block_offset_bytes; 1a1h (for "empty" samples) 14ba0b8h +>>96 ulequad >0 \b, at %#llx 1st variable +# 1st variable name nil terminated like: prune_bind_mounts +>>>(96.q) string x %s +# 1st variable value nil terminated like: 0 1 +>>>>&1 string x \b=%s +# bool check_visibility; 0 or 1 configured with -l option of updatedb.plocate +>>104 ubyte 1 \b, require visibility +#>>104 ubyte x \b, check_visibility %#x # Dump files for iproute2 tool. Generated by the "ip r|a save" command. URL: # https://www.linuxfoundation.org/collaborate/workgroups/networking/iproute2 @@ -625,3 +958,13 @@ >124 ubyte !0x79 >>124 ubyte >0x40 \b, english y is %c #>764 ubyte x \b, english Y is %c + + +# From: Ben Dooks <ben.dooks@codethink.co.uk> +# URL: https://github.com/torvalds/linux/blob/master/tools/perf/util/header.c +# perf files for v1 and v2 +0 string PERFFILE Linux perf recording, version 1 + +0 lequad 0x32454c4946524550 Linux perf recording, version 2. little endian + +0 bequad 0x32454c4946524550 Linux perf recording, version 2. big endian diff --git a/magic/Magdir/lisp b/magic/Magdir/lisp index c854fb7c74be..bd1cf21ee8aa 100644 --- a/magic/Magdir/lisp +++ b/magic/Magdir/lisp @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: lisp,v 1.27 2020/08/14 19:23:39 christos Exp $ +# $File: lisp,v 1.28 2024/05/30 15:32:20 christos Exp $ # lisp: file(1) magic for lisp programs # # various lisp types, from Daniel Quinlan (quinlan@yggdrasil.com) @@ -76,3 +76,13 @@ # From: David Allouche <david@allouche.net> 0 search/1 \<TeXmacs| TeXmacs document text !:mime text/texmacs + +# Chibi-Scheme +0 string \a\achibi\n Chibi-Scheme memory image data +>8 ubyte =0 \b, big-endian +>>9 ubyte x \b, format version %d +>>11 ubyte x \b.%d +>8 ubyte >0 \b, little-endian +>>8 ubyte x \b, format version %d +>>10 ubyte x \b.%d +>12 string x \b, ABI %s diff --git a/magic/Magdir/magic b/magic/Magdir/magic index c8aa054b722b..03a021922b29 100644 --- a/magic/Magdir/magic +++ b/magic/Magdir/magic @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: magic,v 1.11 2023/06/27 13:42:49 christos Exp $ +# $File: magic,v 1.12 2024/06/10 23:09:52 christos Exp $ # magic: file(1) magic for magic files # # Update: Joerg Jenderek @@ -10,13 +10,19 @@ !:mime text/x-file # no suffix in ../Header !:ext / -# -# some samples start with a comment line +# +# some (34/339) samples start with a comment line 0 ubyte =0x23 -# many samples start with separator line +# some (28/339) samples start with separator line (about 78 minus characters) like: +# archive arm assembler beetle c-lang clojure compress der filesystems firmware gentoo lammps +# m4 mail.news make marc21 music parrot pascal pc88 pc98 perl ringdove tcl varied.script webassembly x68000 zfs >4 string -------- ->>0 use magic-fragment -# few samples with 1st comment line and without seperator comment line +# skip scripts fse.sed stage1.sed constants.pxi gotmail.awk from fetchmail package by +# searching for reference to man page file(1) {lammps v 1.1} or file (1) {muscic v 1.1} +>>12 search/180 (1) +>>>0 use magic-fragment +# few (6/339) samples with 1st comment line and without separator comment line +# like: blcr bsi selinux sisu ssh svf >4 default x # few sample with 1st comment line and without seperator comment line and regular expression like: sisu >>1 search/112 regex\x09 @@ -33,10 +39,22 @@ >>>>>0 use magic-fragment # but many samples start with an empty first line 0 ubyte =0x0A -# many samples sttart with separator comment line +# many samples start with separator comment line >4 string -------- ->>0 use magic-fragment -# few samples with 1st empty line and without seperator comment line like: biosig espressif +# skip some MS-DOS C source text {EMSINIT.INC MEM.C RESTPARS.C RTDO.C RTDO1.C RTFILE.C RTFILE1.C RTNEW.C RTNEW1.C RTOLD.C RTOLD1.C RTT1.C RTT3.C} +# and match many fragments by looking for Revision Control System keyword near the beginning +>>1 search/128 $File +>>>0 use magic-fragment +# few samples {ctf (2022-03-26) msx (2021-06-30) nasa (2021-02-23) symbos (2021-02-23) weak (2021-02-23)} +# with 1st empty line, separator comment line and without Revision Control System keyword but with reference to man page file(1) +>>1 default x +>>>1 search/180 file(1) +>>>>0 use magic-fragment +>>>1 default x +# sample aria (2021-12-24) with 1st empty line, separator comment line and without Revision Control System keyword and without reference to man page file(1) +>>>>1 search/1024 \041:mime +>>>>>0 use magic-fragment +# few samples with 1st empty line and without separator comment line like: biosig (2021-02-23) espressif (v 1.3) >4 default x >>1 search/581 \041:mime >>>0 use magic-fragment @@ -47,14 +65,21 @@ # most without suffix but mail.news varied.out varied.script !:ext /news/out/script # next lines are mainly for control reasons -# some (34/339) samples start comment line +# some (34/339) samples start with comment line >0 ubyte !0x0A >>0 string x \b, 1st line "%s" >>>&1 string x \b, 2nd line "%s" +# show more information to see difference between fragments and misidentfied scripts +>>>>&1 string x \b, 3rd line "%s" +>>>>>&1 string x \b, 4th line "%s" +>>>>>>&1 string x \b, 5th line "%s" # but most (305/339) samples start with an empty first line >0 ubyte =0x0A >>1 string x \b, 2nd line "%s" >>>&1 string x \b, 3rd line "%s" +# show more information to see difference between fragments and misidentfied scripts +>>>>&1 string x \b, 4th line "%s" +>>>>>&1 string x \b, 5th line "%s" # # URL: http://en.wikipedia.org/wiki/File_(command) # Reference: http://mark0.net/download/triddefs_xml.7z/defs/m/mgc.trid.xml @@ -64,6 +89,8 @@ !:mime application/x-file !:ext mgc >4 lelong x (version %d) (little endian) +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/m/mgc-be.trid.xml +# Note: called "magic compiled data (BE)" by TrID 0 belong 0xF11E041C magic binary file for file(1) cmd #!:mime application/octet-stream !:mime application/x-file diff --git a/magic/Magdir/mail.news b/magic/Magdir/mail.news index 3ca3b405f613..94f30898d5de 100644 --- a/magic/Magdir/mail.news +++ b/magic/Magdir/mail.news @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------ -# $File: mail.news,v 1.30 2022/10/31 13:22:26 christos Exp $ +# $File: mail.news,v 1.32 2024/11/10 16:59:38 christos Exp $ # mail.news: file(1) magic for mail and news # # Unfortunately, saved netnews also has From line added in some news software. @@ -26,6 +26,12 @@ !:mime message/rfc822 0 string/t Date: news or mail text !:mime message/rfc822 +0 string/t Subject: news or mail text +!:mime message/rfc822 +0 string/t Cc: news or mail text +!:mime message/rfc822 +0 string/t To: news or mail text +!:mime message/rfc822 0 string/t Article saved news text !:mime message/news # Reference: http://quimby.gnus.org/notes/BABYL @@ -43,6 +49,20 @@ 0 string/t MIME-Version: MIME entity text #0 string/t Content- MIME entity text +# From: Joerg Jenderek +# URL: https://tools.ietf.org/rfc/rfc4155.txt +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/m/mbox.trid.xml +# Note: called "Standard Unix Mailbox" by TrID and +# "mailbox file" by shared MIME-info database +#https://gitlab.freedesktop.org/xdg/shared-mime-info/-/blob/master/data/freedesktop.org.xml.in?ref_type=heads +0 string From\040 Mailbox text +#!:mime text/plain +!:mime application/mbox +# like: INBOX 1.mbox +!:ext /mbox +# For control reasons show first line like: "From - Tue May 30 21:55:54 2023" "From noreply@unitymedia.info Thu Oct 13 17:23:38 2016" +>0 string x \b, 1st line "%s" + # TNEF files... # URL: http://fileformats.archiveteam.org/wiki/Transport_Neutral_Encapsulation_Format # https://en.wikipedia.org/wiki/Transport_Neutral_Encapsulation_Format diff --git a/magic/Magdir/map b/magic/Magdir/map index 2d56df015631..9977fa37c476 100644 --- a/magic/Magdir/map +++ b/magic/Magdir/map @@ -1,7 +1,6 @@ - #------------------------------------------------------------------------------ -# $File: map,v 1.10 2023/02/03 20:41:57 christos Exp $ +# $File: map,v 1.11 2024/06/10 23:09:52 christos Exp $ # map: file(1) magic for Map data # diff --git a/magic/Magdir/meteorological b/magic/Magdir/meteorological index 725982f8d907..0d38ee88a33d 100644 --- a/magic/Magdir/meteorological +++ b/magic/Magdir/meteorological @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: meteorological,v 1.4 2022/12/09 18:02:09 christos Exp $ +# $File: meteorological,v 1.6 2024/11/10 17:05:08 christos Exp $ # rinex: file(1) magic for RINEX files # http://igscb.jpl.nasa.gov/igscb/data/format/rinex210.txt # ftp://cddis.gsfc.nasa.gov/pub/reports/formats/rinex300.pdf @@ -44,10 +44,21 @@ !:mime rinex/observation # https://en.wikipedia.org/wiki/GRIB +# https://www.iana.org/assignments/media-types/application/grib 0 string GRIB >7 byte =1 Gridded binary (GRIB) version 1 -!:mime application/x-grib +!:mime application/grib;edition=1 !:ext grb/grib >7 byte =2 Gridded binary (GRIB) version 2 -!:mime application/x-grib2 +!:mime application/grib;edition=2 !:ext grb2/grib2 + +# BUFR is a meteorological data format for storing point or time series data. +# https://www.iana.org/assignments/media-types/application/bufr +0 string BUFR +>7 byte =3 Binary Universal Form data (BUFR) Edition 3 +!:mime application/bufr +!:ext bufr +>7 byte =4 Binary Universal Form data (BUFR) Edition 4 +!:mime application/bufr +!:ext bufr diff --git a/magic/Magdir/mips b/magic/Magdir/mips index fe83614703a3..0a39a35c5413 100644 --- a/magic/Magdir/mips +++ b/magic/Magdir/mips @@ -1,120 +1,102 @@ #------------------------------------------------------------------------------ -# $File: mips,v 1.10 2014/04/30 21:41:02 christos Exp $ +# $File: mips,v 1.15 2024/09/01 13:49:15 christos Exp $ # mips: file(1) magic for MIPS ECOFF and Ucode, as used in SGI IRIX # and DEC Ultrix # -0 beshort 0x0160 MIPSEB ECOFF executable ->20 beshort 0407 (impure) ->20 beshort 0410 (swapped) ->20 beshort 0413 (paged) ->8 belong >0 not stripped ->8 belong 0 stripped +0 name display-mips-ecoff +>20 leshort 0407 (impure) +>20 leshort 0410 (swapped) +>20 leshort 0413 (paged) +>8 lelong !0 not stripped +>8 lelong 0 stripped >22 byte x - version %d >23 byte x \b.%d # -0 beshort 0x0162 MIPSEL-BE ECOFF executable ->20 beshort 0407 (impure) ->20 beshort 0410 (swapped) ->20 beshort 0413 (paged) ->8 belong >0 not stripped ->8 belong 0 stripped ->23 byte x - version %d ->22 byte x \b.%d -# -0 beshort 0x6001 MIPSEB-LE ECOFF executable ->20 beshort 03401 (impure) ->20 beshort 04001 (swapped) ->20 beshort 05401 (paged) ->8 belong >0 not stripped ->8 belong 0 stripped ->23 byte x - version %d ->22 byte x \b.%d -# -0 beshort 0x6201 MIPSEL ECOFF executable ->20 beshort 03401 (impure) ->20 beshort 04001 (swapped) ->20 beshort 05401 (paged) ->8 belong >0 not stripped ->8 belong 0 stripped ->23 byte x - version %d ->22 byte x \b.%d +# MIPS 1 +# +0 beshort 0x0160 +>16 beshort 56 MIPSEB ECOFF executable +>>0 use \^display-mips-ecoff +>16 leshort 0 +>>0 use display-coff +# +0 beshort 0x0162 +>16 beshort 56 MIPSEL-BE ECOFF executable +>>0 use \^display-mips-ecoff +# +0 leshort 0x0160 +>16 leshort 56 MIPSEB-LE ECOFF executable +>>0 use display-mips-ecoff +>16 leshort 0 +>>0 use display-coff +# +0 leshort 0x0162 +>16 leshort 56 MIPSEL ECOFF executable +>>0 use display-mips-ecoff # # MIPS 2 additions # -0 beshort 0x0163 MIPSEB MIPS-II ECOFF executable ->20 beshort 0407 (impure) ->20 beshort 0410 (swapped) ->20 beshort 0413 (paged) ->8 belong >0 not stripped ->8 belong 0 stripped ->22 byte x - version %d ->23 byte x \b.%d +0 beshort 0x0163 +>16 beshort 56 MIPSEB MIPS-II ECOFF executable +>>0 use \^display-mips-ecoff # -0 beshort 0x0166 MIPSEL-BE MIPS-II ECOFF executable ->20 beshort 0407 (impure) ->20 beshort 0410 (swapped) ->20 beshort 0413 (paged) ->8 belong >0 not stripped ->8 belong 0 stripped ->22 byte x - version %d ->23 byte x \b.%d +0 beshort 0x0166 +>16 beshort 56 MIPSEL-BE MIPS-II ECOFF executable +>>0 use \^display-mips-ecoff +>16 leshort 0 +>>0 use display-coff +# +0 leshort 0x0163 +>16 leshort 56 MIPSEB-LE MIPS-II ECOFF executable +>>0 use display-mips-ecoff # -0 beshort 0x6301 MIPSEB-LE MIPS-II ECOFF executable ->20 beshort 03401 (impure) ->20 beshort 04001 (swapped) ->20 beshort 05401 (paged) ->8 belong >0 not stripped ->8 belong 0 stripped ->23 byte x - version %d ->22 byte x \b.%d -# -0 beshort 0x6601 MIPSEL MIPS-II ECOFF executable ->20 beshort 03401 (impure) ->20 beshort 04001 (swapped) ->20 beshort 05401 (paged) ->8 belong >0 not stripped ->8 belong 0 stripped ->23 byte x - version %d ->22 byte x \b.%d +0 leshort 0x0166 +>16 leshort 56 MIPSEL MIPS-II ECOFF executable +>>0 use display-mips-ecoff # # MIPS 3 additions # -0 beshort 0x0140 MIPSEB MIPS-III ECOFF executable ->20 beshort 0407 (impure) ->20 beshort 0410 (swapped) ->20 beshort 0413 (paged) ->8 belong >0 not stripped ->8 belong 0 stripped ->22 byte x - version %d ->23 byte x \b.%d +0 beshort 0x0140 +>16 beshort 56 MIPSEB MIPS-III ECOFF executable +>>0 use \^display-mips-ecoff # -0 beshort 0x0142 MIPSEL-BE MIPS-III ECOFF executable ->20 beshort 0407 (impure) ->20 beshort 0410 (swapped) ->20 beshort 0413 (paged) ->8 belong >0 not stripped ->8 belong 0 stripped ->22 byte x - version %d ->23 byte x \b.%d +0 beshort 0x0142 +>16 beshort 56 MIPSEL-BE MIPS-III ECOFF executable +>>0 use \^display-mips-ecoff # -0 beshort 0x4001 MIPSEB-LE MIPS-III ECOFF executable ->20 beshort 03401 (impure) ->20 beshort 04001 (swapped) ->20 beshort 05401 (paged) ->8 belong >0 not stripped ->8 belong 0 stripped ->23 byte x - version %d ->22 byte x \b.%d -# -0 beshort 0x4201 MIPSEL MIPS-III ECOFF executable ->20 beshort 03401 (impure) ->20 beshort 04001 (swapped) ->20 beshort 05401 (paged) ->8 belong >0 not stripped ->8 belong 0 stripped ->23 byte x - version %d ->22 byte x \b.%d +0 leshort 0x0140 +>16 leshort 56 MIPSEB-LE MIPS-III ECOFF executable +>>0 use display-mips-ecoff +# +0 leshort 0x0142 +>16 leshort 56 MIPSEL MIPS-III ECOFF executable +>>0 use display-mips-ecoff +# +# MIPS Ucode additions # 0 beshort 0x180 MIPSEB Ucode 0 beshort 0x182 MIPSEL-BE Ucode +# +# MIPS COFF object file (have zero length optional header) +# +0 leshort 0x0168 +>16 leshort 0 +>>0 use display-coff +# can be created by LINK.EXE /MACHINE:MIPSR10 /ROM +>16 leshort !0 +>>18 leshort &0x0002 +>>>20 leshort 0x0107 +>>>>0 use display-coff +0 leshort 0x0169 +>16 leshort 0 +>>0 use display-coff +0 leshort 0x0266 +>16 leshort 0 +>>0 use display-coff +0 leshort 0x0366 +>16 leshort 0 +>>0 use display-coff +0 leshort 0x0466 +>16 leshort 0 +>>0 use display-coff diff --git a/magic/Magdir/mmdf b/magic/Magdir/mmdf index 5576a6627789..b4a898e72f14 100644 --- a/magic/Magdir/mmdf +++ b/magic/Magdir/mmdf @@ -1,6 +1,25 @@ #------------------------------------------------------------------------------ -# $File: mmdf,v 1.6 2009/09/19 16:28:10 christos Exp $ +# $File: mmdf,v 1.7 2024/02/29 03:40:37 christos Exp $ # mmdf: file(1) magic for MMDF mail files +# Update: Joerg Jenderek Feb 2024 +# URL: https://en.wikipedia.org/wiki/MMDF +# Reference: https://docs.oracle.com/cd/E88353_01/html/E37852/mmdf-5.html +# Note: Multi-channel Memorandum Distribution Facility (MMDF) mailbox format is a legacy variant of mbox format +# (handled by ./mail.news); each message is surrounded by lines containing 4 control-A # -0 string \001\001\001\001 MMDF mailbox +0 string \001\001\001\001 +# GRR: MMDF mailbox (strength=70=70+0 ./mmdf) after D64 Image (strength=70=70+0 ./c64) Targa image data (strength=70=110-40 ./images) +# and before "PDP-11 UNIX/RT ldp" (strength=50=50+0 ./pdp) +#!:strength +0 +# skip few Commodore disc Image where first content are initialized with ^A like "The Great Gianna Sisters.d64" +# by looking for following valid line terminator (10=0Ah~LineFeed or 13=0Dh~CarriageReturn) +#>4 ubyte&0xF8 =0x08 MMDF mailbox +# or by looking for MBOX Mailbox (/mail.news) characteristic like: +# https://github.com/dfandrich/oldmailconvert/blob/master/testdata/uupc.input.1 +>5 search/610/b From\ MMDF mailbox +#!:mime application/octet-stream +!:mime message/x-mmdf +# https://github.com/dfandrich/oldmailconvert/blob/master/testdata/maillog.expected.2 +# but default mailbox name is like /usr/spool/mail/username +!:ext /mmdf diff --git a/magic/Magdir/motorola b/magic/Magdir/motorola index af93720f2968..2fd232ec0d39 100644 --- a/magic/Magdir/motorola +++ b/magic/Magdir/motorola @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: motorola,v 1.12 2021/04/26 15:56:00 christos Exp $ +# $File: motorola,v 1.13 2024/02/11 21:25:17 christos Exp $ # motorola: file(1) magic for Motorola 68K and 88K binaries # # 68K @@ -18,6 +18,12 @@ >12 belong >0 not stripped 0 beshort 0522 mc68k executable (shared demand paged) >12 belong >0 not stripped + +# Motorola 68000 COFF object file +0 leshort 0x0268 +>16 leshort 0 +>>0 use display-coff + # # Motorola/UniSoft 68K Binary Compatibility Standard (BCS) # diff --git a/magic/Magdir/msdos b/magic/Magdir/msdos index aacf85946b09..925901694c30 100644 --- a/magic/Magdir/msdos +++ b/magic/Magdir/msdos @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: msdos,v 1.169 2023/04/17 16:39:19 christos Exp $ +# $File: msdos,v 1.208 2024/08/27 18:50:57 christos Exp $ # msdos: file(1) magic for MS-DOS files # @@ -28,22 +28,6 @@ 100 search/0xffff say >100 regex/c =^[\ \t]{0,10}say\ ['"] OS/2 REXX batch file text -# updated by Joerg Jenderek at Oct 2015 -# https://de.wikipedia.org/wiki/Common_Object_File_Format -# http://www.delorie.com/djgpp/doc/coff/filhdr.html -# ./intel already labeled COFF type 0x14c=0514 as "80386 COFF executable" -#0 leshort 0x14c MS Windows COFF Intel 80386 object file -#>4 ledate x stamp %s -0 leshort 0x166 MS Windows COFF MIPS R4000 object file -#>4 ledate x stamp %s -0 leshort 0x184 MS Windows COFF Alpha object file -#>4 ledate x stamp %s -0 leshort 0x268 MS Windows COFF Motorola 68000 object file -#>4 ledate x stamp %s -0 leshort 0x1f0 MS Windows COFF PowerPC object file -#>4 ledate x stamp %s -0 leshort 0x290 MS Windows COFF PA-RISC object file -#>4 ledate x stamp %s # Tests for various EXE types. # @@ -108,32 +92,34 @@ # Microsoft compiled help format 2.0 WINWORD.DEV.HXS e_lfarlc=0 >0x18 uleshort <0x40 # check magic of new second header +# skip Portable Executable (PE) with low e_lfarlc here, because handled later +# like: ext4_x64_signed.efi Shell_Full.efi WINWORD.DEV.HXS +>>(0x3c.l) string !PE\0\0 MS-DOS executable # NE executable with low e_lfarlc like: WORD60.ICL +# This is Icon Manager (IM) by Impact Software format, based on NE version 5 with cleared NE version and e_lfarlc fields +# It can be parsed/loaded as NE version 5 binary just by skipping e_lfarlc and NE version checks # ICL: Icons Library 16-bit http://fileformats.archiveteam.org/wiki/Icon_library ->>(0x3c.l) string NE Windows Icons Library 16-bit -!:mime image/x-ms-icl +>>(0x3c.l-0x02) string IMNE \b, NE +>>>(0x3c.l+0x02) ubyte x \b version %u +>>>(0x3c.l+0x36) byte 2 for MS Windows +>>>>(0x3c.l+0x3E) ushort !0 +>>>>>(0x3c.l+0x3F) ubyte x %u +>>>>>(0x3c.l+0x3E) ubyte x \b.%02u +>>>(0x3c.l+0x02) ubyte x (Icon Library, Icon Manager by Impact Software) !:ext icl # handle LX executable with low e_lfarlc like: PCISCAN.EXE ->>(0x3c.l) string LX ->>>(0x3c.l) use lx-executable -# skip Portable Executable (PE) with low e_lfarlc here, because handled later -# like: ext4_x64_signed.efi Shell_Full.efi WINWORD.DEV.HXS ->>(0x3c.l) string PE -# not New Executable (NE) and not PE with low e_lfarlc like: -# MACCNV55.EXE WORK_RTF.EXE TELE200.EXE NDD.EXE iflash.exe ->>(0x3c.l) default x MS-DOS executable, MZ for MS-DOS -!:mime application/x-dosexec -# Windows and later versions of DOS will allow .EXEs to be named with a .COM -# extension, mostly for compatibility's sake. -# like: EDIT.COM 4DOS.COM CMD8086.COM CMD-FR.COM SYSLINUX.COM -# URL: https://en.wikipedia.org/wiki/Personal_NetWare#VLM -# Reference: https://mark0.net/download/triddefs_xml.7z/defs/e/exe-vlm-msg.trid.xml -# also like: BGISRV.DRV -!:ext exe/com/vlm/drv -# These traditional tests usually work but not always. When test quality support is -# implemented these can be turned on. -#>>0x18 leshort 0x1c (Borland compiler) -#>>0x18 leshort 0x1e (MS compiler) +>>(0x3c.l) string LX \b, LX +>>>(0x3c.l+0x2) uleshort =0x0000 +>>>>(0x3c.l) use lx-executable +# no examples found for big endian variant +>>>(0x3c.l+0x2) uleshort =0x0101 +>>>>(0x3c.l) use \^lx-executable +# no examples found for PDP-11 endian variant +>>>(0x3c.l+0x2) uleshort =0x0100 +# PDP-11-endian is not supported by magic "use" keyword yet +# no examples found for other endian variants +>>>0 default x +# other endianity is not supported by magic "use" keyword # Maybe it's a PE? # URL: http://fileformats.archiveteam.org/wiki/Portable_Executable @@ -151,35 +137,78 @@ #>>>(0x3c.l+92) leshort x \b, SUBSYSTEM %u >>(0x3c.l+24) leshort 0x020b \b32+ executable #>>>(0x3c.l+92) leshort x \b, SUBSYSTEM %u ->>(0x3c.l+24) leshort 0x0107 ROM image ->>(0x3c.l+24) default x Unknown PE signature +# ROM image is without DOS MZ header and without PE\0\0 signature +#>>(0x3c.l+24) leshort 0x0107 ROM image +>>(0x3c.l+24) default x with unknown signature >>>&0 leshort x %#x ->>(0x3c.l+22) leshort&0x2000 >0 (DLL) + +## Start of the subsystem switch +>>(0x3c.l+92) clear x + # 0~IMAGE_SUBSYSTEM_UNKNOWN An unknown subsystem ->>(0x3c.l+92) leshort 0 ( +>>(0x3c.l+92) leshort 0 +# WINE https://www.winehq.org/ DLL libraries without subsystem, some examples: +# fakedlls/l3codeca.acm fakedlls/msadp32.acm fakedlls/inetcpl.cpl fakedlls/inetcpl.cpl fakedlls/kernel32.dll fakedlls/user32.dll fakedlls/gdi32.dll +# fakedlls/winex11.drv fakedlls/winspool.drv fakedlls/gphoto2.ds fakedlls/sane.ds fakedlls/ntoskrnl.exe fakedlls/dhtmled.ocx fakedlls/hhctrl.ocx +# fakedlls/hidclass.sys fakedlls/mshtml.tlb fakedlls/stdole32.tlb fakedlls/vwin32.vxd fakedlls/vmm.vxd +>>>0x40 string Wine\ placeholder\ DLL for WINE stub (DLL) +!:ext acm/cpl/dll/drv/ds/exe/ocx/sys/tlb/vxd +>>>0x40 string Wine\ builtin\ DLL for WINE (DLL) +!:ext acm/cpl/dll/drv/ds/exe/ocx/sys/tlb/vxd +>>>0 default x # Summary: Microsoft compiled help *.HXS format 2.0 # URL: https://en.wikipedia.org/wiki/Microsoft_Help_2 # Reference: http://www.russotto.net/chm/itolitlsformat.html # https://mark0.net/download/triddefs_xml.7z/defs/h/hxs.trid.xml -# Note: 2 PE sections (.rsrc, .its) implies Microsoft compiled help format; the .its section contains the help content ITOLITLS -# verified by command like `pelook.exe -d WINWORD.HXS & pelook.exe -h WINWORD.HXS` ->>>(0x3c.l+6) uleshort =2 \bMicrosoft compiled help format 2.0) +# Note: Microsoft compiled help format contains 2 PE32 sections (.rsrc, .its) for Intel i386; +# The help content is appended after the PE32 binary and starts with ITOLITLS string; +# End of the PE32 binary is immediately after the .its section. +# verified by command like: +# `pelook.exe -d WINWORD.HXS & pelook.exe -h WINWORD.HXS` +# `objdump -p -s WINWORD.HXS` +# `readpe WINWORD.HXS` +>>>>(0x3c.l+6) uleshort =2 +# Second section for these binaries starts at fixed offset 288 (size of PE signature + size of COFF header + size +# of PE32 optional header with all data dirs + size of first .rsrc section header = 4 + 20 + 96+8*16 + 40 = 288) +>>>>>(0x3c.l+288) string/b .its\0\0\0\0 +# Read start+length of .its section and just after it +>>>>>>(&4.l+(-4)) string ITOLITLS \b, Microsoft compiled help format 2.0 !:ext hxs -# 3 PE sections (.text, .reloc, .rsrc) implies some Control Panel Item like: -# CPL: Control Panel item for WINE 1.7.28 https://www.winehq.org/ ->>>(0x3c.l+6) uleshort !2 \bControl Panel Item) -!:ext cpl +# Fallback for any unrecognized binary with Unknown subsystem 0 +>>>>>>0 default x for Unknown subsystem 0 +>>>>>0 default x for Unknown subsystem 0 +>>>>0 default x for Unknown subsystem 0 + # 1~IMAGE_SUBSYSTEM_NATIVE device drivers and native Windows processes >>(0x3c.l+92) leshort 1 -# Native PEs include ntoskrnl.exe, hal.dll, smss.exe, autochk.exe, and all the -# drivers in Windows/System32/drivers/*.sys. +# WINE https://www.winehq.org/: fakedlls/fltmgr.sys fakedlls/mountmgr.sys fakedlls/scsiport.sys fakedlls/winebus.sys fakedlls/winehid.sys +>>>0x40 string Wine\ placeholder\ DLL for WINE stub +>>>0x40 string Wine\ builtin\ DLL for WINE +>>>0 default x for MS Windows +>>>>(0x3c.l+72) leshort x %u +>>>>(0x3c.l+74) leshort x \b.%02u +# Native PEs are used by: +# - NT kernel DLLs: hal.dll, kdcom.dll, pshed.dll, bootvid.dll, ... +# - NT kernel images: ntoskrnl.exe, ntkrnlmp.exe, ntkrnlpa.exe, ntkrpamp.exe +# - NT kernel drivers: Windows/System32/drivers/*.sys +# - NT native userspace DLLs: ntdll.dll, ... +# - NT native userspace executables: smss.exe, csrss.exe, autochk.exe, ... +# TODO: write rule to distinguish between Kernel and Native processes +# (the only way to do this is based on the presence of ntoskrnl.exe in import table) >>>(0x3c.l+22) leshort&0x2000 >0 (native) !:ext dll/sys >>>(0x3c.l+22) leshort&0x2000 0 (native) !:ext exe/sys + # 2~IMAGE_SUBSYSTEM_WINDOWS_GUI The Windows graphical user interface (GUI) subsystem >>(0x3c.l+92) leshort 2 ->>>(0x3c.l+22) leshort&0x2000 >0 (GUI) +# WINE https://www.winehq.org/: fakedlls/clock.exe fakedlls/control.exe fakedlls/explorer.exe fakedlls/notepad.exe +>>>0x40 string Wine\ placeholder\ DLL for WINE stub +>>>0x40 string Wine\ builtin\ DLL for WINE +>>>0 default x for MS Windows +>>>>(0x3c.l+72) leshort x %u +>>>>(0x3c.l+74) leshort x \b.%02u +>>>(0x3c.l+22) leshort&0x2000 >0 (DLL) # These could probably be at least partially distinguished from one another by # looking for specific exported functions. # CPL: Control Panel item @@ -193,119 +222,152 @@ # Screen savers typically include code from the scrnsave.lib static library, but # that's not guaranteed. !:ext exe/scr + # 3~IMAGE_SUBSYSTEM_WINDOWS_CUI The Windows character subsystem >>(0x3c.l+92) leshort 3 ->>>(0x3c.l+22) leshort&0x2000 >0 (console) +# WINE https://www.winehq.org/: fakedlls/cacls.exe fakedlls/cmd.exe fakedlls/expand.exe fakedlls/net.exe fakedlls/reg.exe +>>>0x40 string Wine\ placeholder\ DLL for WINE stub +>>>0x40 string Wine\ builtin\ DLL for WINE +>>>0 default x for MS Windows +>>>>(0x3c.l+72) leshort x %u +>>>>(0x3c.l+74) leshort x \b.%02u +>>>(0x3c.l+22) leshort&0x2000 >0 (DLL) !:ext dll/cpl/tlb/ocx/acm/ax/ime >>>(0x3c.l+22) leshort&0x2000 0 (console) !:ext exe/com -# NO Windows Subsystem number 4! ->>(0x3c.l+92) leshort 4 (Unknown subsystem 4) -# 5~IMAGE_SUBSYSTEM_OS2_CUI The OS/2 character subsystem ->>(0x3c.l+92) leshort 5 (OS/2) -# GRR: No examples found by Joerg Jenderek -#!:ext foo-exe-os2 + +# 4~Old Windows CE subsystem (never used) +#>>(0x3c.l+92) leshort 4 for MS Windows CE OLD + +# 5~IMAGE_SUBSYSTEM_OS2_CUI The OS/2 character subsystem +# Not used in image files, constant used only in in-memory structures of OS/2 subsystem as part of Windows NT +#>>(0x3c.l+92) leshort 5 for OS/2 + # NO Windows Subsystem number 6! ->>(0x3c.l+92) leshort 6 (Unknown subsystem 6) +#>>(0x3c.l+92) leshort 6 for Unknown subsystem 6 + # 7~IMAGE_SUBSYSTEM_POSIX_CUI The Posix character subsystem ->>(0x3c.l+92) leshort 7 (POSIX ->>>(0x3c.l+22) leshort&0x2000 >0 \b) +>>(0x3c.l+92) leshort 7 for POSIX +>>>(0x3c.l+72) leshort x %u +>>>(0x3c.l+74) leshort x \b.%02u +>>>(0x3c.l+22) leshort&0x2000 >0 (DLL) # like: PSXDLL.DLL !:ext dll ->>>(0x3c.l+22) leshort&0x2000 0 \b) +>>>(0x3c.l+22) leshort&0x2000 0 (EXE) # like: PAX.EXE !:ext exe + # 8~IMAGE_SUBSYSTEM_NATIVE_WINDOWS Native Win9x driver ->>(0x3c.l+92) leshort 8 (Win9x) +# Win9x never used subsystem 8, all Win9x drivers are either LE/VXD or PE with native (1) subsystem +# MSVC4 LINK.EXE can create PE binary for subsystem 8 by /SUBSYSTEM:MMOSA flag +# MMOSA refers to Native Win32E (embedded) API, mentioned at: +# https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/tr-97-18.doc +#>>(0x3c.l+92) leshort 8 for Win9x/MMOSA # GRR: No examples found by Joerg Jenderek -#!:ext foo-exe-win98 + # 9~IMAGE_SUBSYSTEM_WINDOWS_CE_GUI Windows CE ->>(0x3c.l+92) leshort 9 (Windows CE ->>>(0x3c.l+22) leshort&0x2000 >0 \b) +>>(0x3c.l+92) leshort 9 +# WINE https://www.winehq.org/ +>>>0x40 string Wine\ placeholder\ DLL for WINE stub +>>>0x40 string Wine\ builtin\ DLL for WINE +>>>0 default x for MS Windows CE +>>>>(0x3c.l+72) leshort x %u +>>>>(0x3c.l+74) leshort x \b.%02u +>>>(0x3c.l+22) leshort&0x2000 >0 (DLL) # like: MCS9900Ce50.dll Mosiisr99x.dll TMCGPS.DLL !:ext dll ->>>(0x3c.l+22) leshort&0x2000 0 \b) +>>>(0x3c.l+22) leshort&0x2000 0 (EXE) # like: NNGStart.exe navigator.exe !:ext exe + # 10~IMAGE_SUBSYSTEM_EFI_APPLICATION An Extensible Firmware Interface (EFI) application ->>(0x3c.l+92) leshort 10 (EFI application) +>>(0x3c.l+92) leshort 10 for EFI (application) # like: bootmgfw.efi grub.efi gdisk_x64.efi Shell_Full.efi shim.efi syslinux.efi !:ext efi + # 11~IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER An EFI driver with boot services ->>(0x3c.l+92) leshort 11 (EFI boot service driver) +>>(0x3c.l+92) leshort 11 for EFI (boot service driver) # like: ext2_x64_signed.efi Fat_x64.efi iso9660_x64_signed.efi !:ext efi ->>(0x3c.l+92) leshort 12 (EFI runtime driver) + +# 12~IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER An EFI driver with run-time services +>>(0x3c.l+92) leshort 12 for EFI (runtime driver) # no sample found !:ext efi + # 13~IMAGE_SUBSYSTEM_EFI_ROM An EFI ROM image ->>(0x3c.l+92) leshort 13 (EFI ROM) +>>(0x3c.l+92) leshort 13 for EFI (ROM) # no sample found !:ext efi + # 14~IMAGE_SUBSYSTEM_XBOX XBOX ->>(0x3c.l+92) leshort 14 (XBOX) +>>(0x3c.l+92) leshort 14 for XBOX #!:ext foo-xbox + # NO Windows Subsystem number 15! ->>(0x3c.l+92) leshort 15 (Unknown subsystem 15) +#>>(0x3c.l+92) leshort 15 for Unknown subsystem 15 + # 16~IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION Windows boot application ->>(0x3c.l+92) leshort 16 (Windows boot application ->>>(0x3c.l+22) leshort&0x2000 >0 \b) +>>(0x3c.l+92) leshort 16 for MS Windows +>>>(0x3c.l+72) leshort x %u +>>>(0x3c.l+74) leshort x \b.%02u +>>>(0x3c.l+22) leshort&0x2000 >0 (boot DLL) # like: bootvhd.dll bootuwf.dll hvloader.dll tcbloader.dll bootspaces.dll !:ext dll ->>>(0x3c.l+22) leshort&0x2000 0 \b) +>>>(0x3c.l+22) leshort&0x2000 0 (boot application) # like: bootmgr.efi memtest.efi shellx64.efi memtest.exe winload.exe winresume.exe bootvhd.dll hvloader.dll !:ext efi/exe -# GRR: the next 2 lines are not executed! -#>>(0x3c.l+92) default x (Unknown subsystem -#>>>&0 leshort x %#x) ->>(0x3c.l+92) leshort >16 (Unknown subsystem ->>>&0 leshort x %#x) ->>(0x3c.l+4) leshort 0x14c Intel 80386 ->>(0x3c.l+4) leshort 0x166 MIPS R4000 ->>(0x3c.l+4) leshort 0x168 MIPS R10000 ->>(0x3c.l+4) leshort 0x184 Alpha ->>(0x3c.l+4) leshort 0x1a2 Hitachi SH3 ->>(0x3c.l+4) leshort 0x1a3 Hitachi SH3 DSP ->>(0x3c.l+4) leshort 0x1a8 Hitachi SH5 ->>(0x3c.l+4) leshort 0x169 MIPS WCE v2 ->>(0x3c.l+4) leshort 0x1a6 Hitachi SH4 ->>(0x3c.l+4) leshort 0x1c0 ARM ->>(0x3c.l+4) leshort 0x1c2 ARM Thumb ->>(0x3c.l+4) leshort 0x1c4 ARMv7 Thumb ->>(0x3c.l+4) leshort 0x1d3 Matsushita AM33 ->>(0x3c.l+4) leshort 0x1f0 PowerPC ->>(0x3c.l+4) leshort 0x1f1 PowerPC with FPU ->>(0x3c.l+4) leshort 0x1f2 PowerPC (big-endian) ->>(0x3c.l+4) leshort 0x200 Intel Itanium ->>(0x3c.l+4) leshort 0x266 MIPS16 ->>(0x3c.l+4) leshort 0x268 Motorola 68000 ->>(0x3c.l+4) leshort 0x290 PA-RISC ->>(0x3c.l+4) leshort 0x366 MIPSIV ->>(0x3c.l+4) leshort 0x466 MIPS16 with FPU ->>(0x3c.l+4) leshort 0xebc EFI byte code ->>(0x3c.l+4) leshort 0x5032 RISC-V 32-bit ->>(0x3c.l+4) leshort 0x5064 RISC-V 64-bit ->>(0x3c.l+4) leshort 0x5128 RISC-V 128-bit ->>(0x3c.l+4) leshort 0x6232 LoongArch 32-bit ->>(0x3c.l+4) leshort 0x6264 LoongArch 64-bit ->>(0x3c.l+4) leshort 0x9041 Mitsubishi M32R ->>(0x3c.l+4) leshort 0x8664 x86-64 ->>(0x3c.l+4) leshort 0xaa64 Aarch64 ->>(0x3c.l+4) leshort 0xc0ee MSIL -# GRR: the next 2 lines are not executed! ->>(0x3c.l+4) default x Unknown processor type ->>>&0 leshort x %#x + +>>(0x3c.l+92) default x +>>>&0 leshort x for Unknown subsystem %#x +## End of the subsystem switch + +>>(0x3c.l+4) clear x \b, +>>(0x3c.l+4) use display-coff-processor + >>(0x3c.l+22) leshort&0x0200 >0 (stripped to external PDB) >>(0x3c.l+22) leshort&0x1000 >0 system file + +# Check for presence of COM Runtime descriptor >>(0x3c.l+24) leshort 0x010b ->>>(0x3c.l+232) lelong >0 Mono/.Net assembly +>>>(0x3c.l+116) leshort >14 +>>>>(0x3c.l+232) lelong >0 Mono/.Net assembly >>(0x3c.l+24) leshort 0x020b ->>>(0x3c.l+248) lelong >0 Mono/.Net assembly +>>>(0x3c.l+132) leshort >14 +>>>>(0x3c.l+248) lelong >0 Mono/.Net assembly # hooray, there's a DOS extender using the PE format, with a valid PE # executable inside (which just prints a message and exits if run in win) ->>(8.s*16) string 32STUB \b, 32rtm DOS extender ->>(8.s*16) string !32STUB \b, for MS Windows +# FIXME: Find sample of such executable for investigation. In was introduced +# in file version 4.14 with following check: +# "(8.s*16) string 32STUB for MS-DOS, 32rtm DOS extender" +# "(8.s*16) string !32STUB for MS Windows" +# But that check is too generic and had lot of false positives. 32STUB/32rtm +# sounds like Borland DOS extender with PE loader and Windows emulation which +# can be injected into any valid Windows PE binary. +# So it is needed to look at the sample of such executable and check for +# subsystem or cpu/machine. + +# Detect embedded DOS extenders +>>(8.s*16) string 32STUB +# BRC32.EXE, TLINK32.EXE or TASM32.EXE from TASM 5.0 +>>>(8.s*16) search/0x50 32rtm-stub\ for\ PE\ files \b, Borland 32rtm DOS extender (stub) +# CL.EXE or LINK.EXE from MS Visual C++ 1.x +>>(8.s*16) search/0x50 Phar\ Lap\ Software,\ Inc. \b, Phar Lap TNT DOS extender +# ulink.exe +>>(8.s*16) search/0x200 Can't\ find\ DOSWIN32.RTM \b, DosWin32 DOS extender (stub) +>>(8.s*16) search/0x4000 Stub\ failed\ to\ find\ DOS/4G\ extender. \b, DOS/4G DOS extender (stub) +# LOADPEX.BIN and HDLD32.BIN +# x86 jmp near relative (0xe9 0x?? 0x??) + string "MI" (0x4d 0x49) +>>(8.s*16) ulequad&0xffff0000ff =0x494d0000e9 \b, HX DOS extender (embedded with DPMI host) +>>(8.s*16) ulequad&0xffff0000ff !0x494d0000e9 +# DPMIST32.BIN +>>>(8.s*16) search/0x200 cannot\ find\ loader\ DPMILD32.EXE \b, HX DOS extender (stub) +# LOADPE.BIN +>>>(8.s*16) search/0x600 PATH=HDPMI32.EXE \b, HX DOS extender (embedded without DPMI host) +# DPMILD32.BIN +>>>(8.s*16) search/0x4000 DPMILD32: \b, HX DOS extender (embedded without DPMI host) + >>(0x3c.l+0xf8) string UPX0 \b, UPX compressed >>(0x3c.l+0xf8) search/0x140 PEC2 \b, PECompact2 compressed >>(0x3c.l+0xf8) search/0x140 UPX2 @@ -347,28 +409,39 @@ >>(0x3c.l) string NE \b, NE #!:mime application/x-dosexec !:mime application/x-ms-ne-executable +>>>(0x3c.l+0x02) ubyte x \b version %u +>>>(0x3c.l+0x02) ubyte >5 +>>>>(0x3c.l+0x03) ubyte x \b.%02u # FOR DEBUGGING! # Reference: https://wiki.osdev.org/NE +# Create time for NE version <5 in FAT12 format +#>>>(0x3c.l+0x02) ubyte <5 +#>>>>(0x3c.l+0x08) ulelong !0 \b, Created at +#>>>>>(0x3c.l+0x0a) lemsdosdate x %s +#>>>>>(0x3c.l+0x08) lemsdostime x %s # ProgFlags; Program flags, bitmapped #>>>(0x3c.l+0x0C) ubyte x \b, ProgFlags 0x%2.2x -# >>>(0x3c.l+0x0c) ubyte&0x03 =0 \b, none +# >>>(0x3c.l+0x0c) ubyte&0x03 =0 \b, no automatic data segment # >>>(0x3c.l+0x0c) ubyte&0x03 =1 \b, single shared # >>>(0x3c.l+0x0c) ubyte&0x03 =2 \b, multiple # >>>(0x3c.l+0x0c) ubyte&0x03 =3 \b, (null) -# >>>(0x3c.l+0x0c) ubyte &0x04 \b, Global initialization +# >>>(0x3c.l+0x0c) ubyte &0x04 \b, Per-Process Library Initialization OR real mode only # >>>(0x3c.l+0x0c) ubyte &0x08 \b, Protected mode only -# >>>(0x3c.l+0x0c) ubyte &0x10 \b, 8086 instructions -# >>>(0x3c.l+0x0c) ubyte &0x20 \b, 80286 instructions -# >>>(0x3c.l+0x0c) ubyte &0x40 \b, 80386 instructions -# >>>(0x3c.l+0x0c) ubyte &0x80 \b, 80x87 instructions +# >>>(0x3c.l+0x0c) ubyte &0x10 \b, 8086 instructions in OS/2 app OR LIM 3.2 EMS API in Win app +# >>>(0x3c.l+0x0c) ubyte &0x20 \b, i286 instructions in OS/2 app OR each instance in separate EMS bank in Win app +# >>>(0x3c.l+0x0c) ubyte &0x40 \b, i386 instructions in OS/2 app OR private GlobalAlloc above the EMS line in Win app +# >>>(0x3c.l+0x0c) ubyte &0x80 \b, x87 floating point instructions # ApplFlags; Application flags, bitmapped # https://www.fileformat.info/format/exe/corion-ne.htm #>>>(0x3c.l+0x0D) ubyte x \b, ApplFlags 0x%2.2x # Application type (bits 0-2); 1~Full screen (not aware of Windows/P.M. API) # 2~Compatible with Windows/P.M. API 3~Uses Windows/P.M. API -#>>>(0x3c.l+0x0D) ubyte&0x07 =1 \b, Full screen -#>>>(0x3c.l+0x0D) ubyte&0x07 =2 \b, Compatible with Windows/P.M. API -#>>>(0x3c.l+0x0D) ubyte&0x07 =3 \b, use Windows/P.M. API +#>>>(0x3c.l+0x0D) ubyte&0x07 =1 \b, Not compatiblr with Windows/P.M. API (full screen) +#>>>(0x3c.l+0x0D) ubyte&0x07 =2 \b, Compatible with Windows/P.M. API (console mode) +#>>>(0x3c.l+0x0D) ubyte&0x07 =3 \b, use Windows/P.M. API (window mode) +#>>>(0x3c.l+0x0D) ubyte &0x08 \b, Bound OS/2 app OR application specific loader in Win app +#>>>(0x3c.l+0x0D) ubyte &0x20 \b, Errors in image +#>>>(0x3c.l+0x0D) ubyte &0x40 \b, Non-conforming OS/2 app OR private Win library above EMS line # bit 7; DLL or driver (SS:SP info invalid, CS:IP points at FAR init routine called with AX handle #>>>(0x3c.l+0x0D) ubyte &0x80 \b, DLL or driver # AutoDataSegIndex; automatic data segment index like: 0 2 3 22 @@ -414,41 +487,155 @@ #>>>(0x3c.l+0x32) uleshort !9 \b, FileAlnSzShftCnt %u # nResTabEntries; number of resource table entries like: 0 2 #>>>(0x3c.l+0x34) uleshort !0 \b, nResTabEntries %u -# targOS; Target OS; 0~unknown~OS/2 1.0 or MS Windows 1-2 -# OS/2 1.0 like: DTM.DLL SHELL11F.EXE HELPMSG.EXE CREATEDD.EXE -# or Windows 1.03 - 2.1 like: MSDOSD.EXE KARTEI.EXE KALENDER.EXE +# Following fields are valid only for NE version 5+ +>>>(0x3c.l+0x02) ubyte >4 +# targOS; Target OS; 0~unspecified (OS/2 or Windows); detect it based on Windows-only flags and OS/2 specific import lib (DOSCALLS) #>>>(0x3c.l+0x36) byte x TARGOS %x ->>>(0x3c.l+0x36) byte 0 for OS/2 1.0 or MS Windows 1-2 ->>>(0x3c.l+0x36) byte 1 for OS/2 1.x ->>>(0x3c.l+0x36) byte 2 for MS Windows 3.x ->>>(0x3c.l+0x36) byte 3 for MS-DOS ->>>(0x3c.l+0x36) byte 4 for Windows 386 ->>>(0x3c.l+0x36) byte 5 for Borland Operating System Services +>>>>(0x3c.l+0x36) byte 0 +# if windows version is specified then it is windows binary +>>>>>(0x3c.l+0x3E) ushort !0 for MS Windows +>>>>>>(0x3c.l+0x3F) ubyte x %u +>>>>>>(0x3c.l+0x3E) ubyte x \b.%02u +>>>>>>(0x3c.l+0x3F) ubyte <3 +>>>>>>>(0x3c.l+0x37) byte&0x04 0 (real mode only) +>>>>>>>(0x3c.l+0x37) byte&0x04 !0 (real+protected mode) +>>>>>>(0x3c.l+0x3E) ushort =0x0300 +>>>>>>>(0x3c.l+0x0c) ubyte&0x08 0 (real+protected mode) +>>>>>>>(0x3c.l+0x0c) ubyte&0x08 !0 (protected mode only) +>>>>>(0x3c.l+0x3E) ushort 0 +>>>>>>(0x3c.l+0x2a) leshort 0 for OS/2 1.x or MS Windows 1.x/2.x +>>>>>>(0x3c.l+0x2a) default x +# Binaries with DOSCALLS import library are for OS/2 +>>>>>>>&(&0.s-0x29) search/512/C \x08DOSCALLS for OS/2 1.x +>>>>>>>(0x3c.l+0x2a) default x +# Binaries with KERNEL, USER or GDI import library are for Windows +# FIXME: names are prefixed by its length, but regex type does not support binary bytes +>>>>>>>>&(&0.s-0x29) regex/512/C KERNEL|USER|GDI for MS Windows 1.x/2.x +>>>>>>>>>(0x3c.l+0x37) byte&0x04 0 (real mode only) +>>>>>>>>>(0x3c.l+0x37) byte&0x04 !0 (real+protected mode) +# Binaries without any of those import library can be for any OS +>>>>>>>>(0x3c.l+0x2a) default x for OS/2 1.x or MS Windows 1.x/2.x +>>>>(0x3c.l+0x36) byte 1 for OS/2 1.x +>>>>(0x3c.l+0x36) byte 2 for MS Windows +# expctwinver; expected Windows version (minor first) like: +# 0.0~DTM.DLL 203.4~Windows 1.03 GDI.EXE 2.1~TTY.DRV 3.0~dos737.fon FMFONT.FOT THREED.VBX 3.10~GDI.EXE 4.0~(ME) VGAFULL.3GR +>>>>>(0x3c.l+0x3E) ushort !0 +>>>>>>(0x3c.l+0x3F) ubyte x %u +>>>>>>(0x3c.l+0x3E) ubyte x \b.%02u +# Empty version is is treated by Windows 3.x OS as Windows 2.01 version and by Windows 2.x OS as Windows 1.01 version +>>>>>(0x3c.l+0x3E) ushort 0 1.x/2.x +>>>>>(0x3c.l+0x3F) ubyte <3 +>>>>>>(0x3c.l+0x37) byte&0x04 0 (real mode only) +>>>>>>(0x3c.l+0x37) byte&0x04 !0 (real+protected mode) +>>>>>(0x3c.l+0x3E) ushort =0x0300 +>>>>>>(0x3c.l+0x0c) ubyte&0x08 0 (real+protected mode) +>>>>>>(0x3c.l+0x0c) ubyte&0x08 !0 (protected mode only) +# Windows P-code application +# https://web.archive.org/web/20000304044656/http://msdn.microsoft.com/library/backgrnd/html/msdn_c7pcode2.htm +# https://library.thedatadungeon.com/msdn-1992-09/msjv7/html/msjv0g6a.content.htm +# https://en.wikipedia.org/wiki/P-code_machine#Microsoft_P-code +# Can be created by MSC7 or MSVC1.x CL.EXE /Oq switch which calls MPC.EXE +# MPC.EXE (Make P-Code utility) sets bit2 in MZ e_res[2] (e_flags) field +# Filter out false-positive Windows 3.x applications with OS/2 WLO loader +# (sets bit7 in NE ne_flagsothers) as they do not have MZ e_res[] fields +>>>>>(0x3c.l+0x3E) ushort >0x0300 +>>>>>>(0x3c.l+0x37) ubyte&0x80 0 +>>>>>>>0x20 ubyte&0x04 !0 \b, P-code application +# 32-bit Watcom Win386 extender in 16-bit Windows 3.x NE binaries +# https://www.os2museum.com/wp/watcom-win386/ +# https://github.com/open-watcom/open-watcom-v2/blob/master/bld/win386/ +# https://misc.daniel-marschall.de/spiele/blown_away/disassemble.php +# Examples: BA_LITE.EXE WALDO.EXE +>>>>>(0x3c.l+0x3E) ushort >0x0300 +>>>>>>0x38 ulong !0 +>>>>>>>(0x38.l) string MQ \b, Watcom Win386 extender +# OS 3 was reserved for Multitasking MS-DOS but it never used NE version 5+ (only NE version 4) +#>>>>(0x3c.l+0x36) byte 3 for Multitasking MS-DOS +# OS 4 was reserved for MS Windows/386 device drivers but MS Windows/386 2.x never used NE format (Xenix x.out format was used instead) +#>>>>(0x3c.l+0x36) byte 4 for MS Windows/386 device driver +# OS 5 is assigned to BOSS (Borland Operating System Services) but is used also by other 16-bit DOS applications +>>>>(0x3c.l+0x36) byte 5 for MS-DOS +# HDLD16.BIN +# x86 jmp near relative (0xe9 0x?? 0x??) + string "MI" (0x4d 0x49) +>>>>>(8.s*16) ulequad&0xffff0000ff =0x494d0000e9 \b, HX DOS extender 16-bit (embedded with DPMI host) +>>>>>(8.s*16) ulequad&0xffff0000ff !0x494d0000e9 +# DPMIST16.BIN +>>>>>>(8.s*16) search/0x200 cannot\ find\ loader\ DPMILD16.EXE \b, HX DOS extender 16-bit (stub) +# DPMILD16.BIN +>>>>>>(8.s*16) search/0x4000 DPMILD16: \b, HX DOS extender 16-bit (embedded without DPMI host) +# TLINK.EXE or TD.EXE from TASM 5.0 +>>>>>>(8.s*16) string 16STUB +>>>>>>>(8.s*16) search/0x1000 rtm.exe\0dpmi16bi.ovl \b, Borland rtm DOS extender (stub) +>>>>>>(8.s*16) string !16STUB +# TLINK.EXE or BRC.EXE from Borland Pascal 7.0 +>>>>>>>(8.s*16) search/0x1000 BOSS\ Stub\ Version \b, Borland BOSS DOS extender (stub) +# OS 6 is not assigned but is used by 32-bit DOS application with extender (found only with HX DOS extender 32-bit) # http://downloads.sourceforge.net/dfendreloaded/D-Fend-Reloaded-1.4.4.zip # D-Fend Reloaded/VirtualHD/FREEDOS/DPMILD32.EXE -# GRR: WHAT OS is this? -#>>>(0x3c.l+0x36) byte 6 for TARGET SIX +# https://www.japheth.de/HX/DPMILD32.TXT +>>>>(0x3c.l+0x36) byte 6 for MS-DOS +# HDLD32.BIN +# x86 jmp near relative (0xe9 0x?? 0x??) + string "MI" (0x4d 0x49) +>>>>>(8.s*16) ulequad&0xffff0000ff =0x494d0000e9 \b, HX DOS extender 32-bit (embedded with DPMI host) +>>>>>(8.s*16) ulequad&0xffff0000ff !0x494d0000e9 +# DPMIST32.BIN +>>>>>>(8.s*16) search/0x200 cannot\ find\ loader\ DPMILD32.EXE \b, HX DOS extender 32-bit (stub) +# DPMILD32.BIN +>>>>>>(8.s*16) search/0x4000 DPMILD32: \b, HX DOS extender 32-bit (embedded without DPMI host) # https://en.wikipedia.org/wiki/Phar_Lap_(company) ->>>(0x3c.l+0x36) byte 0x81 for MS-DOS, Phar Lap DOS extender, OS/2 -# like: CVP7.EXE ->>>(0x3c.l+0x36) byte 0x82 for MS-DOS, Phar Lap DOS extender, Windows ->>>(0x3c.l+0x36) default x ->>>>(0x3c.l+0x36) ubyte x (unknown OS %#x) -# expctwinver; expected Windows version (minor first) like: -# 0.0~DTM.DLL 203.4~Windows 1.03 GDI.EXE 2.1~TTY.DRV 3.0~dos737.fon FMFONT.FOT THREED.VBX 3.10~GDI.EXE 4.0~(ME) VGAFULL.3GR ->>>(0x3c.l+0x3F) ubyte x (%u ->>>(0x3c.l+0x3E) ubyte x \b.%u) +# like: TELLPROT.EXE from 286DEX +# can be created by BIND286.EXE from OS/2 NE binary +>>>>(0x3c.l+0x36) byte 0x81 for MS-DOS, Phar Lap 286 DOS extender, emulating OS/2 1.x +# like: CVP7.EXE from 286DEX +# can be created by BIND286.EXE from Windows NE binary +>>>>(0x3c.l+0x36) byte 0x82 for MS-DOS, Phar Lap 286 DOS extender, emulating MS Windows +>>>>>(0x3c.l+0x3E) ushort 0 1.x/2.x +>>>>>(0x3c.l+0x3E) ushort !0 +>>>>>>(0x3c.l+0x3F) ubyte x %u +>>>>>>(0x3c.l+0x3E) ubyte x \b.%02u +>>>>(0x3c.l+0x36) default x +>>>>>(0x3c.l+0x36) ubyte x for unknown OS %#x # OS2EXEFlags; other EXE flags -# 0~Long filename support 1~2.x protected mode 4~2.x proportional fonts 8~Executable has gangload area -#>>>(0x3c.l+0x37) byte !0 \b, OS2EXEFlags 0x%x -# retThunkOffset; offset to return thunks or start of gangload area like: 0 34h 58h 246h -#>>>(0x3c.l+0x38) uleshort !0 \b, retThunkOffset 0x%x -# segrefthunksoff; offset to segment reference thunks or size of gangload area +# 1~Long filename support 2~Win2.x proportional fonts 4~Win2.x protected mode 8~Executable has gangload area 10~Win9x thunk lib without DllEntryPoint 80~Win3.x app with OS/2 WLO loader +#>>>>(0x3c.l+0x37) byte !0 \b, OS2EXEFlags 0x%x +# gangstart; offset to start of gangload area like: 0 34h 58h 246h +#>>>>(0x3c.l+0x38) uleshort !0 \b, gangstart 0x%x +# ganglength; size of gangload area # like: 0 33Eh 39Ah AEEh -#>>>(0x3c.l+0x3A) uleshort !0 \b, segrefthunksoff 0x%x +#>>>>(0x3c.l+0x3A) uleshort !0 \b, ganglength 0x%x # mincodeswap; minimum code swap area size like 0 620Ch -#>>>(0x3c.l+0x3C) uleshort !0 \b, mincodeswap 0x%x ->>>(0x3c.l+0x0c) leshort&0x8000 0x8000 (DLL or font) +#>>>>(0x3c.l+0x3C) uleshort !0 \b, mincodeswap 0x%x +>>>>(0x3c.l+0x3F) ubyte =3 +>>>>>0x3c ulelong >0x800 +>>>>>>(0x3c.l+0x37) ubyte &0x80 with OS/2 WLO loader +# Detection for NE versions <5 which do not have OS type byte 0x36 +# These versions are used only by WINE, Windows 1.x/2.x and Multitasking MS-DOS +# WINE binaries have special signature after the dos header (at fixed offset 0x40) +# Multitasking MS-DOS binaries imports DOSCALLS library, so use it for distinguishing +# Import libraries are part of the string table which starts one byte after the +# 16-bit indirect offset 0x2a relative to the beginning of NE header, and consist +# of concatenated pascal strings (first byte of the string is its length) +>>>(0x3c.l+0x02) ubyte <5 +# like: fakedlls/krnl386.exe16 fakedlls/gdi.exe16 fakedlls/winsock.dll16 fakedlls/winoldap.mod16 fakedlls/mouse.drv16 +>>>>0x40 string Wine\ placeholder\ DLL for WINE stub +>>>>(0x3c.l+0x2a) default x +# like: HE_DAEM.EXE POPUP.EXE QUEUER.EXE +>>>>>&(&0.s-0x29) search/512/C \x08DOSCALLS for Multitasking MS-DOS +>>>>>(0x3c.l+0x2a) default x for MS Windows 1.x/2.x +# Special case, Windows 3.x OS parse from NE version 4 binaries also following NE version 5 fields: +# - os type if is 0 or 2 +# - bits proportional fonts and protected mode +# Such NE version 4 binary is treated by Windows 3.x OS as Windows 2.01 +# compatible binary and by Windows 2.x OS as Windows 1.01 compatible binary. +# So if os type is correct (0 or 2; matched mask 0xfd) and at least one +# of those bits is set and others are cleared (matched mask 0xf9) then +# detect if binary has NE version 5 protected mode bit set. +>>>>>>(0x3c.l+0x36) leshort&0xf9fd 0 +>>>>>>>(0x3c.l+0x37) byte&0x06 !0 +>>>>>>>>(0x3c.l+0x37) byte&0x04 0 (real mode only) +>>>>>>>>(0x3c.l+0x37) byte&0x04 !0 (real+protected mode) +>>>>>>>(0x3c.l+0x37) default x (real mode only) +>>>>>>(0x3c.l+0x36) default x (real mode only) # DRV: Driver # 3GR: Grabber device driver # CPL: Control Panel Item @@ -457,26 +644,46 @@ # FOT: Font resource file # EXE: WINSPOOL.EXE USER.EXE krnl386.exe GDI.EXE # CNV: Microsoft Word text conversion https://www.file-extensions.org/cnv-file-extension-microsoft-word-text-conversion-data -!:ext dll/drv/3gr/cpl/vbx/fon/fot +>>>(0x3c.l+0x0c) leshort &0x8000 +# Check segment count, if 0 then this is resource-only DLL +>>>>(0x3c.l+0x1c) leshort 0 +>>>>>(0x3c.l+0x2c) lelong !0 +>>>>>>(&-4.l+1) string/C FONTRES (DLL, font) +!:ext fon/fot +>>>>>>(&-4.l+1) default x (DLL, resource-only) +!:ext dll +>>>>>(0x3c.l+0x2c) lelong 0 (DLL, resource-only) +!:ext dll +>>>>(0x3c.l+0x1c) leshort !0 +# Check description of the module, first word specifies type of the DLL library +>>>>>(0x3c.l+0x2c) lelong !0 +>>>>>>(&-4.l+1) string/C DDRV (DLL, driver) +!:ext drv +>>>>>>(&-4.l+1) default x (DLL) +!:ext dll/drv/3gr/cpl/vbx +>>>>>(0x3c.l+0x2c) lelong 0 (DLL) +!:ext dll/drv/3gr/cpl/vbx >>>(0x3c.l+0x0c) leshort&0x8000 0 (EXE) !:ext exe/scr +>>>>(0x3c.l+0x0d) ubyte&0x07 =1 (full screen) +>>>>(0x3c.l+0x0d) ubyte&0x07 =2 (console) +>>>>(0x3c.l+0x0d) ubyte&0x07 =3 (GUI) >>>&(&0x24.s-1) string ARJSFX \b, ARJ self-extracting archive >>>(0x3c.l+0x70) search/0x80 WinZip(R)\ Self-Extractor \b, ZIP self-extracting archive (WinZip) ->>(0x3c.l) string LX\0\0 \b, LX +>>(0x3c.l) string LX \b, LX !:mime application/x-dosexec ->>>(0x3c.l+0x0a) leshort <1 (unknown OS) ->>>(0x3c.l+0x0a) leshort 1 for OS/2 ->>>(0x3c.l+0x0a) leshort 2 for MS Windows ->>>(0x3c.l+0x0a) leshort 3 for DOS ->>>(0x3c.l+0x0a) leshort >3 (unknown OS) ->>>(0x3c.l+0x10) lelong&0x28000 =0x8000 (DLL) ->>>(0x3c.l+0x10) lelong&0x20000 >0 (device driver) ->>>(0x3c.l+0x10) lelong&0x300 0x300 (GUI) ->>>(0x3c.l+0x10) lelong&0x28300 <0x300 (console) ->>>(0x3c.l+0x08) leshort 1 i80286 ->>>(0x3c.l+0x08) leshort 2 i80386 ->>>(0x3c.l+0x08) leshort 3 i80486 +>>>(0x3c.l+0x2) uleshort =0x0000 +>>>>(0x3c.l) use lx-executable +# no examples found for big endian variant +>>>(0x3c.l+0x2) uleshort =0x0101 +>>>>(0x3c.l) use \^lx-executable +# no examples found for PDP-11 endian variant +>>>(0x3c.l+0x2) uleshort =0x0100 +# PDP-11-endian is not supported by magic "use" keyword yet +# no examples found for other endian variants +>>>0 default x +# other endianity is not supported by magic "use" keyword >>>(8.s*16) string emx \b, emx >>>>&1 string x %s >>>&(&0x54.l-3) string arjsfx \b, ARJ self-extracting archive @@ -486,25 +693,48 @@ >>(0x3c.l) string W3 \b, W3 for MS Windows #!:mime application/x-dosexec !:mime application/x-ms-w3-executable -!:ext vxd/exe +>>>(0x3c.l+0x3) ubyte <4 %u +# Windows 3.x WIN386.EXE +!:ext exe +>>>(0x3c.l+0x3) ubyte >3 %u +# Windows 95 VMM32.VXD +!:ext vxd +>>>(0x3c.l+0x2) ubyte x \b.%02u + # W4 executable >>(0x3c.l) string W4 \b, W4 for MS Windows #!:mime application/x-dosexec !:mime application/x-ms-w4-executable # windows 98 VMM32.VXD !:ext vxd +>>>(0x3c.l+0x3) ubyte x %u +>>>(0x3c.l+0x2) ubyte x \b.%02u ->>(0x3c.l) string LE\0\0 \b, LE executable +# Linear Executable (LE) in Little Endian (\0\0) +>>(0x3c.l) string LE\0\0 \b, LE !:mime application/x-dosexec >>>(0x3c.l+0x0a) leshort 1 # some DOS extenders use LE files with OS/2 header ->>>>0x240 search/0x100 DOS/4G for MS-DOS, DOS4GW DOS extender ->>>>0x240 search/0x200 WATCOM\ C/C++ for MS-DOS, DOS4GW DOS extender +>>>>0x240 search/0x100 DOS/4G for MS-DOS, DOS/4G DOS extender +>>>>0x240 search/0x200 WATCOM\ C/C++ for MS-DOS, DOS/4GW DOS extender >>>>0x440 search/0x100 CauseWay\ DOS\ Extender for MS-DOS, CauseWay DOS extender >>>>0x40 search/0x40 PMODE/W for MS-DOS, PMODE/W DOS extender >>>>0x40 search/0x40 STUB/32A for MS-DOS, DOS/32A DOS extender (stub) >>>>0x40 search/0x80 STUB/32C for MS-DOS, DOS/32A DOS extender (configurable stub) >>>>0x40 search/0x80 DOS/32A for MS-DOS, DOS/32A DOS extender (embedded) +# D3XW.EXE +>>>>(8.s*16) string o2LEstub for MS-DOS, D3X DOS extender +>>>>0 default x +# DOS32MW.DLL +>>>>>(0x3c.l+0x10) lelong&0x38000 =0x18000 for MS-DOS (DLL) +!:ext dll +# HPFS.386 (HPFS386 filesystem for OS/2 1.x, part of Microsoft LAN Manager) +# https://www.os2museum.com/wp/os2-history/os2-16-bit-server/ +# EXE module (&0x38000=0x00000) with zero application type (&0x700=0x000) and +# with no external fixups (&0x20=0x20) is .386 32-bit driver module for OS/2 1.x +>>>>>(0x3c.l+0x10) lelong&0x38720 =0x00020 for OS/2 1.x (driver) +!:ext 386 +>>>>>0 default x for unknown OS 0x1 # this is a wild guess; hopefully it is a specific signature >>>>&0x24 lelong <0x50 >>>>>(&0x4c.l) string \xfc\xb8WATCOM @@ -512,52 +742,108 @@ # another wild guess: if real OS/2 LE executables exist, they probably have higher start EIP #>>>>(0x3c.l+0x1c) lelong >0x10000 for OS/2 # fails with DOS-Extenders. ->>>(0x3c.l+0x0a) leshort 2 for MS Windows ->>>(0x3c.l+0x0a) leshort 3 for DOS ->>>(0x3c.l+0x0a) leshort 4 for MS Windows (VxD) -# VXD: VxD for Windows 95/98/Me -# 386: VxD for Windows 2.10, 3.0, 3.1x +# OS 2 was reserved for MS Windows 16-bit but it never used LE (NE format was used instead) +#>>>(0x3c.l+0x0a) leshort 2 for MS Windows 16-bit +# OS 3 was reserved for Multitasking MS-DOS but it never used LE (NE format was used instead) +#>>>(0x3c.l+0x0a) leshort 3 for Multitasking MS-DOS +>>>(0x3c.l+0x0a) leshort 4 for MS Windows +>>>>(0x3c.l+0xc3) ubyte x %u +>>>>(0x3c.l+0xc2) ubyte x \b.%02u +>>>>(0x3c.l+0x10) lelong&0x38000 =0x08000 +# DLL module (0x08000) with no external fixups (0x20) for i386 CPU (2) is .386 VxD file for MS Windows 3.x +>>>>>(0x3c.l+0x10) lelong&0x20 !0 +>>>>>>(0x3c.l+0x08) leshort 2 (VxD 386) +!:ext 386 +>>>>(0x3c.l+0x10) lelong&0x38000 =0x28000 (VxD static) +# VXD: VxD for MS Windows 95/98/Me # PDR: Port driver # MPD: Miniport driver (?) -!:ext vxd/386/pdr/mpd +!:ext vxd/pdr/mpd +>>>>(0x3c.l+0x10) lelong&0x38000 =0x38000 (VxD dynamic) +!:ext vxd/pdr/mpd +>>>(0x3c.l+0x0a) default x +>>>>(0x3c.l+0x0a) leshort x for unknown OS %#x >>>(&0x7c.l+0x26) string UPX \b, UPX compressed >>>&(&0x54.l-3) string UNACE \b, ACE self-extracting archive -# looks like ASCII, probably some embedded copyright message. -# and definitely not NE/LE/LX/PE ->>0x3c lelong >0x20000000 ->>>(4.s*512) leshort !0x014c \b, MZ for MS-DOS -!:mime application/x-dosexec -!:ext exe/com -# header data too small for extended executable ->2 long !0 +# DOS/32A Linear Compressed file format +>>(0x3c.l) string LC\0\0 \b, LC for MS-DOS +>>>0x40 search/0x40 STUB/32A \b, DOS/32A DOS extender (stub) +>>>0x40 search/0x80 STUB/32C \b, DOS/32A DOS extender (configurable stub) +>>>0x40 search/0x80 DOS/32A \b, DOS/32A DOS extender (embedded) + +# PX\0\0 signature for 32bit DOS Applications in DOS-PE Format (https://www.japheth.de/HX.html) +# SHDPMI.EXE, DOSTEST.EXE, GETVMODE.EXE, RMINT.EXE +>(0x3c.l) string PX\0\0 \b, PE32 +>>(0x3c.l+24) leshort 0x020b \b+ +>>0 clear x +>>0 default x executable for MS-DOS +# LOADPEX.BIN and HDLD32.BIN +# x86 jmp near relative (0xe9 0x?? 0x??) + string "MI" (0x4d 0x49) +>>(8.s*16) ulequad&0xffff0000ff =0x494d0000e9 \b, HX DOS extender (embedded with DPMI host) +>>(8.s*16) ulequad&0xffff0000ff !0x494d0000e9 +# DPMIST32.BIN +>>>(8.s*16) search/0x200 cannot\ find\ loader\ DPMILD32.EXE \b, HX DOS extender (stub) +# LOADPE.BIN +>>>(8.s*16) search/0x600 PATH=HDPMI32.EXE \b, HX DOS extender (embedded without DPMI host) +# DPMILD32.BIN +>>>(8.s*16) search/0x4000 DPMILD32: \b, HX DOS extender (embedded without DPMI host) + +>0 clear x +# Skip already parsed binary types +# If magic in the branch is not parsed then always jumps to mz-unrecognized +>(0x3c.l) string PE\0\0 +>(0x3c.l) string PX\0\0 +>(0x3c.l) string LX +>(0x3c.l) string NE +>>(0x3c.l-0x02) string !IMNE +>>>0x18 uleshort <0x40 +>>>>0 use mz-unrecognized +>(0x3c.l) string W3 >>0x18 uleshort <0x40 ->>>(4.s*512) leshort !0x014c - ->>>>&(2.s-514) string !LE ->>>>>&-2 string !BW -#>>>>>>(0x3c.l) string x \b, 2ND MAGIC %.2s -# but some LX executable appear here also like: PCISCAN.EXE ->>>>>>(0x3c.l) string !LX -# because Portable Executable (PE) already done skip many here like: -# xcopy32.exe stinger64.exe WimUtil.exe -# NO such DOS examples found and -# DOS examples seems to be already handled by e_lfarlc <0x40 like: CMD8086.COM CMD-FR.COM ->>>>>>>(0x3c.l) string !PE \b, MZ for MS-DOS -!:mime application/x-dosexec ->>>>&(2.s-514) string LE \b, LE ->>>>>0x240 search/0x100 DOS/4G for MS-DOS, DOS4GW DOS extender -# educated guess since indirection is still not capable enough for complex offset -# calculations (next embedded executable would be at &(&2*512+&0-2) -# I suspect there are only LE executables in these multi-exe files ->>>>&(2.s-514) string BW ->>>>>0x240 search/0x100 DOS/4G \b, LE for MS-DOS, DOS4GW DOS extender (embedded) ->>>>>0x240 search/0x100 !DOS/4G \b, BW collection for MS-DOS - -# This sequence skips to the first COFF segment, usually .text ->(4.s*512) leshort 0x014c \b, COFF -!:mime application/x-dosexec ->>(8.s*16) string go32stub for MS-DOS, DJGPP go32 DOS extender +>>>0 use mz-unrecognized +>(0x3c.l) string W4 +>>0x18 uleshort <0x40 +>>>0 use mz-unrecognized +>(0x3c.l) string LE\0\0 +>>0x18 uleshort <0x40 +>>>0 use mz-unrecognized +>(0x3c.l) string LC +>>0x18 uleshort <0x40 +>>>0 use mz-unrecognized +>0 default x +# This sequence jumps to the next MZ overlay +>>2 leshort !0 +# FIXME: Following line does not match binaries which total size is less than (4.s*512) +>>>(4.s*512) leshort x +>>>>&(2.s-514) leshort x +>>>>>&-2 use mz-next-overlay +>>>>>&-2 string BW +>>>>>>0 use mz-bw-collection +>>>>>&-2 string 3P +>>>>>>0 use mz-3p +>>>>0 default x +>>>>>0 use mz-unrecognized +>>>0 default x +>>>>0 use mz-unrecognized +>>2 leshort 0 +>>>(4.s*512) leshort x +>>>>&-2 use mz-next-overlay +>>>>&-2 string BW +>>>>>0 use mz-bw-collection +>>>>&-2 string 3P +>>>>>0 use mz-3p +>>>0 default x +>>>>0 use mz-unrecognized + +# Parse content of the COFF, executable type was already printed in mz-next-overlay +>(4.s*512) leshort 0x014c +#!:mime application/x-dosexec +# djgpp go32 v1 COFF +# F2C.EXE from f2c95201.zip or compress.exe from djdev112.zip +>>(&-6.l) string/b StubInfoMagic!!\0 for MS-DOS +# djgpp go32 v2 COFF +>>(8.s*16) string go32stub for MS-DOS >>(8.s*16) string emx >>>&1 string x for DOS, Win or OS/2, emx %s >>&(&0x42.l-3) byte x @@ -567,6 +853,61 @@ >>>&0x0b lelong <0x2000 >>>>&0 lelong >0x6000 \b, 32lite compressed +# Parse content of the a.out, executable type was already printed in mz-next-overlay +>(4.s*512) leshort 0x010b +# djgpp go32 v1 a.out +>>(&-6.l) string/b StubInfoMagic!!\0 for MS-DOS + +# djgpp go32 v1 +# Note that for "redirect" binaries is offset (4.s*512) behind end-of-file, so access it via "default" +>(4.s*512) clear x +>(4.s*512) default x +>>(&-4.l) string/b StubInfoMagic!!\0 +>>>&0 lelong >39 +>>>>&19 byte x \b, DJGPP go32 v%u +>>>>&18 byte x \b.%u +>>>>&17 byte x \b%c DOS extender (stub) +>>>&0 lelong <40 \b, DJGPP go32 v1 DOS extender (stub) +>>>&0 lelong >35 +>>>>&0 byte !0 +>>>>>&-1 string/16 x \b, autoload "%s" +>>>&0 lelong >62 +>>>>&28 byte !0 +# zcat.exe from djdev112.zip +>>>>>&-1 string/15 x \b, redirect to "%s" + +# djgpp go32 v2 +>(8.s*16) string go32stub +# Version string is usually ", v 2.05", so skip leading spaces +>>&0 string ,\ v\ +>>>&0 string/4 x \b, DJGPP go32 v%s DOS extender +>>&0 default x +>>>&0 string/8 x \b, DJGPP go32 %s DOS extender +>>&8 lelong >43 +>>>&24 byte 0 +# check for embedded DPMI host PMODSTUB.EXE +>>>>0x1c string PMODSTUB.EXE (embedded PMODE/DJ) +>>>>0x1c string !PMODSTUB.EXE +>>>>>0x18 leshort 0 +# check for the default djgpp stub +>>>>>>0x40 search/0x80 The\ STUB.EXE\ stub\ loader (stub) +>>>>>>>(8.s*16) default x +>>>>>>>>&8 lelong >83 +>>>>>>>>>&56 byte !0 +# show which DPMI host executable is autoloaded when none is running +>>>>>>>>>>&-1 string/16 x \b, autoload "%s" +>>>>>(0x18.s) default x +>>>>>>&(0x6.s*4) default x +# check for embedded DPMI host CWSDSTUB.EXE +>>>>>>>&0 search/16 CWSDPMI +>>>>>>>>&-7 regex/T =^CWSDPMI(\ [^\ ]+\ )? (embedded %s) +# check for embedded DPMI host D3XD.EXE +>>>>>>>&0 search/16 D3X +>>>>>>>>&-3 regex/T =^D3X(\ [^\ ]+\ )? (embedded %s) +>>>&24 byte !0 +# djtarx.exe or dxegen.exe from djdev205.zip +>>>>&-1 string/8 x \b, redirect to "%s" + >(8.s*16) string $WdX \b, WDos/X DOS extender # By now an executable type should have been printed out. The executable @@ -584,10 +925,10 @@ >0x1c string LZ09 \b, LZEXE v0.90 compressed >0x1c string LZ91 \b, LZEXE v0.91 compressed >0x1c string tz \b, TinyProg compressed ->0x1e string Copyright\ 1989-1990\ PKWARE\ Inc. Self-extracting PKZIP archive +>0x1e string Copyright\ 1989-1990\ PKWARE\ Inc. \b, Self-extracting PKZIP archive !:mime application/zip # Yes, this really is "Copr", not "Corp." ->0x1e string PKLITE\ Copr. Self-extracting PKZIP archive +>0x1e string PKLITE\ Copr. \b, Self-extracting PKZIP archive !:mime application/zip # winarj stores a message in the stub instead of the sig in the MZ header >0x20 search/0xe0 aRJsfX \b, ARJ self-extracting archive @@ -635,39 +976,136 @@ >>49824 leshort =1 \b, 1 file >>49824 leshort >1 \b, %u files + +# This named instance is called for multi overlay MZ executable with offset of the next overlay +0 name mz-next-overlay +>0 string P2 \b, EXP (P2) for MS-DOS, Phar Lap 286 DOS extender +>0 string P3 \b, EXP (P3) for MS-DOS, Phar Lap 386 DOS extender +>0 string MT \b, MT for MS-DOS, IGC XMLOD i386 DOS extender +>0 string 3P \b, 3P for MS-DOS +# Other 3P details are printed later as they depend on the original MZ content +>>32 lelong&0x00000001 !0 \b, 16-bit +>>32 lelong&0x00000001 0 +# CWC.EXE from cw349bin.zip is 32-bit +>>>32 lelong&0x00010000 0 \b, 32-bit +# WL32.EXE from cw349bin.zip is dual mode +>>>32 lelong&0x00010000 !0 \b, Dual mode +>>32 lelong&0x80000000 !0 \b, Compressed +>0 string D3X1 \b, D3X1 for MS-DOS, D3X DOS extender +# BW details are printed later as they depend on the original MZ content +>0 string BW \b, BW collection for MS-DOS +# a.out details are printed later as they depend on the original MZ content +>0 leshort 0x010b \b, a.out +# COFF details are printed later as they depend on the original MZ content +>0 leshort 0x014c \b, COFF +>0 default x +# now make offset aligned to 0x10 +>>0 offset%0x10 0x0 +# already aligned +>>>0x0 use mz-next-overlay-aligned +>>0 offset%0x10 0x1 +>>>0xf use mz-next-overlay-aligned +>>0 offset%0x10 0x2 +>>>0xe use mz-next-overlay-aligned +>>0 offset%0x10 0x3 +>>>0xd use mz-next-overlay-aligned +>>0 offset%0x10 0x4 +>>>0xc use mz-next-overlay-aligned +>>0 offset%0x10 0x5 +>>>0xb use mz-next-overlay-aligned +>>0 offset%0x10 0x6 +>>>0xa use mz-next-overlay-aligned +>>0 offset%0x10 0x7 +>>>0x9 use mz-next-overlay-aligned +>>0 offset%0x10 0x8 +>>>0x8 use mz-next-overlay-aligned +>>0 offset%0x10 0x9 +>>>0x7 use mz-next-overlay-aligned +>>0 offset%0x10 0xa +>>>0x6 use mz-next-overlay-aligned +>>0 offset%0x10 0xb +>>>0x5 use mz-next-overlay-aligned +>>0 offset%0x10 0xc +>>>0x4 use mz-next-overlay-aligned +>>0 offset%0x10 0xd +>>>0x3 use mz-next-overlay-aligned +>>0 offset%0x10 0xe +>>>0x2 use mz-next-overlay-aligned +>>0 offset%0x10 0xf +>>>0x1 use mz-next-overlay-aligned +0 name mz-next-overlay-aligned +>0 string MP \b, EXP (MP) for MS-DOS, Phar Lap 386 DOS extender +>0 default x +>>0 use mz-unrecognized + + +# This named instance is called for unrecognized MZ DOS binary from any offset +0 name mz-unrecognized +>0 default x \b, MZ for MS-DOS +!:mime application/x-dosexec +# Windows and later versions of DOS will allow .EXEs to be named with a .COM +# extension, mostly for compatibility's sake. +# like: EDIT.COM 4DOS.COM CMD8086.COM CMD-FR.COM SYSLINUX.COM +# URL: https://en.wikipedia.org/wiki/Personal_NetWare#VLM +# Reference: https://mark0.net/download/triddefs_xml.7z/defs/e/exe-vlm-msg.trid.xml +# also like: BGISRV.DRV +!:ext exe/com/vlm/drv + + +# This named instance is called for BW collection with offset from the beginning of the file +0 name mz-bw-collection +>(8.s*16) default x +>>&(&0x30.s) default x +>>>&0 string DOS/16M \b, DOS/16M DOS extender (embedded) +>>>&-8 string DOS/16M \b, DOS/16M DOS extender (embedded) +>>>&-8 string DOS/4G \b, DOS/4G DOS extender (embedded) +>>>0 default x +>>>>(8.s*16) search/0x4000 Stub\ failed\ to\ find\ DOS/4G\ extender. \b, DOS/4G DOS extender (stub) + + +# This named instance is called for CauseWay MZ 3P binary with offset from the beginning of the file +0 name mz-3p +# CWC.EXE and WL32.EXE from cw349bin.bin +>0x440 search/0x100 CauseWay\ DOS\ Extender \b, CauseWay DOS extender +# CWHELP.EXE from cw349bin.bin +>0x200 search/0x100 CauseWay\ dynamic\ link\ library \b, CauseWay DLL + + # Summary: OS/2 LX Library and device driver (no DOS stub) # From: Joerg Jenderek # URL: http://en.wikipedia.org/wiki/EXE # Reference: http://www.textfiles.com/programming/FORMATS/lxexe.txt # https://github.com/open-watcom/open-watcom-v2/blob/master/bld/watcom/h/exeflat.h +# https://github.com/bitwiseworks/os2tk45/blob/master/h/exe386.h +# https://archive.org/download/IBMOS2Warp4ToolkitDocuments2/lxref.htm # Note: by dll-os2-no-dos-stub.trid.xml called "OS/2 Dynamic Link Library (no DOS stub)" -# TODO: unify with DOS stub variant (MZ magic) -0 string/b LX ->2 ushort =0 +# similar looking like variant with MS-DOS stub (MZ magic): "MS-DOS executable, LX" +0 string/b LX LX executable +#!:mime application/x-msdownload +!:mime application/x-lx-executable +>2 uleshort =0x0000 >>0 use lx-executable # no examples found for big endian variant ->2 ushort =0x0101 +>2 uleshort =0x0101 >>0 use \^lx-executable +# no examples found for PDP-11 endian variant +>2 uleshort =0x0100 +# PDP-11-endian is not supported by magic "use" keyword yet +# no examples found for other endian variants +>>0 default x +# other endianity is not supported by magic "use" keyword + 0 name lx-executable -# similar looking like variant with MS-DOS stub (MZ magic): "MS-DOS executable, LX" -#>0x00 uleshort x executable, -# signature OSF_FLAT_LX_SIGNATURE~0x584C~LX OSF_FLAT_SIGNATURE~0x454C~LE ->0x00 uleshort =0x584c LX ->0x00 uleshort =0x454C LE ->0x00 uleshort x executable -#!:mime application/x-msdownload -!:mime application/x-lx-executable -!:ext exe -# byte order: 00h~little-endian non-zero=1~big-endian -#>0x02 ubyte =0 (little-endian) ->0x02 ubyte !0 (big-endian) # FOR DEBUGGING! -# word order: 00h~little-endian non-zero=1~big-endian +# byte order: 00h~little-endian 01h~big-endian +#>0x02 ubyte =0 \b, little-endian byte order +#>0x02 ubyte =1 \b, big-endian word order +# word order: 00h~little-endian 01h~big-endian #>0x03 ubyte =0 \b, little-endian word order -#>0x03 ubyte !0 \b, big-endian word order -# cpu_type; CPU type like: 1~286 2~386 3~486 4 20h~i860 21h~Intel N11 40h~MIPS R2000,R3000 41h~MIPS R6000 42h~MIPS R4000 +#>0x03 ubyte =1 \b, big-endian word order +# cpu_type; CPU type like: 1~i286 2~i386 3~i486 4~i586 20h~i860-N10 21h~i860-N11 40h~MIPS R2000,R3000 41h~MIPS R6000 42h~MIPS R4000 #>0x08 uleshort x \b, CPU %u -# os_type; target operating system like: 0~unknown 1~OS/2 2~Windows 3~DOS 4.x 4~Windows 386 +# os_type; target operating system like: 0~unknown 1~OS/2 2~Windows 16-bit 3~Multitasking MS-DOS 4.x 4~Windows 386 5~IBM Microkernel PN #>0x0A leshort x \b, OS %u # flags; module type flags #>0x10 ulelong x \b, FLAGS %#8.8x @@ -675,47 +1113,75 @@ #>0x10 ulelong &0x00000002 \b, 2h reserved # OSF_INIT_INSTANCE=00000004h ~Per-Process Library Initialization; setting this bit for EXE file is invalid #>0x10 ulelong &0x00000004 \b, per-process library Initialization +#>0x10 ulelong &0x00000008 \b, system dll # OSF_INTERNAL_FIXUPS_DONE=00000010h ~Internal fixups for the module have been applied #>0x10 ulelong &0x00000010 \b, int. fixup # OSF_EXTERNAL_FIXUPS_DONE=00000020h ~External fixups for the module have been applied #>0x10 ulelong &0x00000020 \b, ext. fixup # OSF_NOT_PM_COMPATIBLE=00000100h ~Incompatible with PM windowing -#>0x10 ulelong&0x00000100 =0x00000100 \b, incompatible with PM windowing +#>0x10 ulelong&0x00000700 =0x00000100 \b, incompatible with PM windowing # OSF_PM_COMPATIBLE=00000200h ~Compatible with PM windowing -#>0x10 ulelong&0x00000200 =0x00000200 \b, compatible with PM windowing +#>0x10 ulelong&0x00000700 =0x00000200 \b, compatible with PM windowing +#>0x10 ulelong&0x00000700 =0x00000300 \b, uses PM windowing API +#>0x10 ulelong &0x00002000 \b, not loadable +#>0x10 ulelong &0x00008000 \b, library module # bit 17; device driver -#>0x10 ulelong&0x00020000 >0 \b, device driver +#>0x10 ulelong &0x00020000 \b, device driver +#>0x10 ulelong &0x00080000 \b, multiple-processor unsafe # Per-process Library Termination; setting this bit for EXE file is invalid -#>0x10 ulelong&0x40000000 =0x40000000 \b, per-process library termination +#>0x10 ulelong &0x40000000 \b, per-process library termination +# OS type +>0x0a clear x >0x0a leshort 1 for OS/2 -# no example found ->0x0a leshort 3 for DOS +# OS 2 was reserved for MS Windows 16-bit but it never used LX (NE format was used instead) +#>0x0a leshort 2 for MS Windows 16-bit +# OS 3 was reserved for Multitasking MS-DOS but it never used LX (NE format was used instead) +#>0x0a leshort 3 for Multitasking MS-DOS +# OS 4 was reserved for MS Windows device drivers but it never used LX (LE format was used instead) +#>0x0a leshort 4 for MS Windows +# OS 5 was reserved for IBM Microkernel Personality Neutral but it never used LX (the only released IBM Workplace OS for PowerPC used ELF format) +#>0x0a leshort 5 for IBM Microkernel Personality Neutral +>0x0a default x +>>0x0a leshort x for unknown OS %#x # http://www.ctyme.com/intr/rb-2939.htm#Table1610 # library by module type mask 00038000h (bits 15-17); # 0h ~executable Program module ->0x10 ulelong&0x00038000 =0x00000000 (program) -#!:ext exe -# OSF_IS_DLL=8000h ~Library module (DLL) ->0x10 ulelong&0x00038000 >0x00000000 -# OSF_PHYS_DEVICE=00020000h ~device driver ->>0x10 ulelong&0x00020000 >0 (device driver) -!:ext sys -# if not device driver it is library (DLL) ->>0x10 ulelong&0x00020000 =0 (library) +>0x10 ulelong&0x00038000 =0x00000000 (EXE) +!:ext exe +# bits 8-10; OSF_PM_APP=700h in flags ~Uses PM windowing API; either it is GUI or console +>>0x10 ulelong&0x00000700 =0x00000100 (full screen) +>>0x10 ulelong&0x00000700 =0x00000200 (console) +>>0x10 ulelong&0x00000700 =0x00000300 (GUI) +>0x10 ulelong&0x00038000 =0x00008000 (DLL) !:ext dll -# bits 8-10; OSF_PM_APP=300h in flags ~Uses PM windowing API; either it is GUI or console ->0x10 ulelong&0x00000300 =0x00000300 (GUI) ->0x10 ulelong&0x00000300 !0x00000300 (console) +>0x10 ulelong&0x00038000 =0x00010000 (unknown) +>0x10 ulelong&0x00038000 =0x00018000 (PMDLL) +>0x10 ulelong&0x00038000 =0x00020000 (PDD) +!:ext sys +>0x10 ulelong&0x00038000 =0x00028000 (VDD) +!:ext sys +>0x10 ulelong&0x00038000 =0x00030000 (DLD) +>0x10 ulelong&0x00038000 =0x00038000 (unknown) # CPU type ->0x08 uleshort 1 i80286 +>0x08 clear x +>0x08 uleshort 1 \b, Intel i286 # all inspected examples ->0x08 uleshort 2 i80386 ->0x08 uleshort 3 i80486 ->0x08 uleshort 4 i80586 -# 21h Intel "N11" or compatible +>0x08 uleshort 2 \b, Intel i386 +>0x08 uleshort 3 \b, Intel i486 +>0x08 uleshort 4 \b, Intel i586 +# 20h Intel i860 N10 or compatible +# 21h Intel i860 N11 or compatible # 40h MIPS Mark I ( R2000, R3000) or compatible # 41h MIPS Mark II ( R6000 ) or compatible # 42h MIPS Mark III ( R4000 ) or compatible +>0x08 default x +>>0x08 uleshort x \b, unknown CPU %#x +# Endianity for debugging, there are no samples for non-little-endian +#>0x02 clear x +#>0x02 uleshort =0x0000 (little-endian) +#>0x02 uleshort =0x0101 (big-endian) +#>0x02 uleshort =0x0100 (PDP-11-endian) +#>0x02 default x (unknown-endian) # added by Joerg Jenderek of https://www.freedos.org/software/?prog=kc # and https://www.freedos.org/software/?prog=kpdos @@ -993,7 +1459,11 @@ >>>>>>>0 use msdos-com # JMP 16bit 0 byte 0xe9 +# display DOS executable (COM or COMBOOT 16-bit strength=40=40-0) after ESP-IDF application image (strength=40=40+0) handled by ./firmware +#!:strength -0 # 16-bit offset; for DEBUGGING!; can be negative like: USBDRIVE.COM +# 2h (CPQ0TD.DRV) 4FEh (NDN.COM) 581h (DRMOUSE.COM) 1FDh (GAG.COM) BE07h (USBDRIVE.COM) +#>1 uleshort x \b, OFFSET=%#4.4x #>1 leshort x \b, OFFSET %d # forward jumps >1 leshort >-1 @@ -1006,8 +1476,11 @@ >>>>0 use msdos-com # check for unrealistic low number of FATs. Then it is not a disk image and it is a DOS executable # like: GAG.COM DRMOUSE.COM NDN.COM CPQ0TD.DRV +# or ESP-IDF application image like: WLED_0.14.0_ESP32-C3.bin opendtu-generic_esp32.bin >>>16 ubyte =0 ->>>>0 use msdos-com +# skip ESP-IDF application image handled by ./firmware with ESP_APP_DESC_MAGIC_WORD +>>>>32 ulelong !0xABCD5432 +>>>>>0 use msdos-com # maybe disc image with valid number of FATs or DOS executable # like: IPXODI.COM PERUSE.COM TASKID.COM >>>16 default x @@ -1308,9 +1781,6 @@ # 0 string/b \xDB\xA5\x2D\x00 Microsoft WinWord 2.0 Document !:mime application/msword -# -0 string/b \xDB\xA5\x2D\x00 Microsoft WinWord 2.0 Document -!:mime application/msword # 0 string/b \x09\x04\x06\x00\x00\x00\x10\x00 Microsoft Excel Worksheet @@ -1828,14 +2298,96 @@ #!:mime application/x-novell-msg !:ext msg #!:ext msg/dat + +# Summary: Turbo Pascal Help +# From: Joerg Jenderek +# URL: https://en.wikipedia.org/wiki/Turbo_Pascal +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/h/hlp-tp-2.trid.xml +# Note: called "Turbo Pascal Help (v2)" by TrID +0 string TPH2 Turbo Pascal help, version 2 +#!:mime application/octet-stream +!:mime application/x-pascal-hlp +# 4DOS help file, version 1.00 3.30 +!:ext hlp +# URL: https://en.wikipedia.org/wiki/4DOS +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/h/hlp-4dos-v2.trid.xml +# Note: called "4DOS Help (v2)" by TrID +0 string ALIAS\r\nASSIGN\r\n +>13 search/3016 4DOS 4DOS help file, version 2.x +#!:mime text/plain +!:mime application/x-4dos-hlp +# DOS.HLP 4DOS help file, version 2.21 +!:ext hlp +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/h/hlp-4dos-v4.trid.xml +# Note: called "4DOS Help (v4)" by TrID +0 string 4DH4 4DOS help file, version 4.x +#!:mime application/octet-stream +!:mime application/x-4dos-hlp +# 4dos402b.hlp +!:ext hlp +# Reference: https://4dos.info/4dsource/4helpsrc.zip/TPHELP.PAS +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/h/hlp-4dos.trid.xml # 4DOS help (.HLP) files added by Joerg Jenderek from source TPHELP.PAS # of https://www.4dos.info/ -# pointer,HelpID[8]=4DHnnnmm -0 ulelong 0x48443408 4DOS help file ->4 string x \b, version %-4.4s +# check for valid pascal string length (6 or 8) of HelpID, 4DH magic, valid major number (5 6 7 8) +0 ubequad&0xF1ffFFffF0000000 0x0034444830000000 4DOS help file +#!:mime application/octet-stream +!:mime application/x-4dos-hlp +!:ext hlp +# pascal string length of of HelpID like: 6 8 +#>0 ubyte x PLENGHT=%x +# Note: version string correspond or is a little bit lower than value of _4VER variable or output of 4DOS command `VER /R` +# one-digit major version number of version string +>4 string x \b, version %-1.1s +# two-digit minor version number depending on pascal string length at the beginning +>>0 ubyte 8 \b. +>>>5 string x \b%-2.2s +# Byte at offset 7 (A=41h) and 8 (A=41h) is not Revison like C (=43h) as reported by VER /R for 4DOS602b.HLP +# GRR: maybe this is patch level +>>>7 string x %-.2s +# few samples with string length 6 (implying exact 2 byte minor version digits) like in 4DOS500f.HLP 4dos551c_ge.hlp +>>0 ubyte 6 \b. +>>>5 string x \b%-2.2s +# just in case pascal string length is neither 6 nor 8 +#>>0 default x \b. +#>>>5 string x %-2.2s +# false for version 5.52 and older, but true for version 6.02 and newer +>4 ubeshort >0x3535 +# HighestTopic; highest topic number +#>>9 uleshort x HighestTopic=%#4.4x +# NumTopics; number of topics +#>>11 uleshort x NumTopics=%#4.4x +# BiggestTopic; size of largest topic in uncompressed bytes +#>>13 uleshort x BiggestTopic=%#4.4x +# NamedTopics; number of topics in help index +#>>15 uleshort x NamedTopics=%#4.4x +# NameSize; Size of largest name, 0 for none +#>>17 uleshort x NameSize=%#4.4x +# PickSize; size of each entry in pick table, 0 for none +#>>18 uleshort x PickSize=%#4.4x +# width; width of help window, with frame if any +#>>19 ubyte x Width=%#2.2x +# FirstTopic; topic to show first (0 = index) +#>>20 uleshort x FirstTopic=%#4.4x +# KeysTopic; topic to show when keys help needed +#>>22 uleshort x KeysTopic=%#4.4x +# ExtHelpName; string[13]; name for external help program like: HELP.COM DOSBOOK.EXE +>>24 pstring x \b, external help %s +# ExtHelpEnv; String[16]; environment variable for alternate external help program name like: DOSHELP +>>38 pstring x or specified by DOS environment variable %s +# XlateArray = array[0..29] of Byte; {Most common characters in help text} +#>>55 ubequad x XlateArray=%#16.16llx +# SharewareData : SharewareDataRec; shareware info for 4DOS.COM +#>>87 ubequad x SharewareData=%#16.16llx # old binary Microsoft (.HLP) files added by Joerg Jenderek from http://file-extension.net/seeker/file_extension_hlp -0 ulequad 0x3a000000024e4c MS Advisor help file +# URL: http://fileformats.archiveteam.org/wiki/Microsoft_Advisor_Help +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/h/hlp-ms-adv.trid.xml +# Note: called "Microsoft Advisor Help" by TrID +0 ulequad&0xFFffFFfeFFffFFff 0x003a000000024e4c MS Advisor help file +#!:mime application/octet-stream +!:mime application/x-ms-hlp +!:ext hlp # HtmlHelp files (.chm) 0 string/b ITSF\003\000\000\000\x60\000\000\000 MS Windows HtmlHelp Data @@ -2302,3 +2854,220 @@ # year part >2 uleshort/512 x 1980+%u # + +# ExcelBIFF2-8BOF.magic - Excel Binary Interchange File Format versions 2-8 +# Beginning of File records +# See https://www.gaia-gis.it/gaia-sins/freexl-1.0.6-doxy-doc/html/Format.html +# Excel Commercial BIFF Release +# Version Name Version Year Notes +# 2.x Excel 2.0 BIFF2 1987 Before CFBF. File is the BIFF +# stream, containing a single +# worksheet. +# 3.0 Excel 3.0 BIFF3 1990 "" +# 4.0 Excel 4.0 BIFF4 1992 "" +# 5.0 Excel 5.0 BIFF5 1993 Starting with BIFF5, a single +# Workbook can internally store +# many individual Worksheets. +# The BIFF stream is stored in +# the CFBF file container. +# 7.0 Excel 95 BIFF5 1995 +# 8.0 Excel 98 BIFF8 1998 +# 9.0 Excel 2000 BIFF8 1999 +# 10.0 Excel XP BIFF8 2001 +# 11.0 Excel 2003 BIFF8 2003 +# See https://www.openoffice.org/sc/excelfileformat.pdf#page=135 +# 5.8 BOF – Beginning of File +# See also https://en.wikipedia.org/wiki/Microsoft_Excel; +# Old file extensions +# Format Extension Description +# Spreadsheet .xls Main spreadsheet format which holds data in +# worksheets, charts, and macros +# Add-in (VBA) .xla Adds custom functionality; written in VBA +# Toolbar .xlb The file extension where Microsoft Excel custom +# toolbar settings are stored. +# Chart .xlc A chart created with data from a Microsoft Excel +# spreadsheet that only saves the chart. +# To save the chart and spreadsheet save as .XLS. +# XLC is not supported in Excel 2007 or in any +# newer versions of Excel. +# Dialog .xld Used in older versions of Excel. +# Archive .xlk A backup of an Excel Spreadsheet +# Add-in (DLL) .xll Adds custom functionality; written in C++/C, +# Fortran, etc. and compiled in to a special +# dynamic-link library +# Macro .xlm A macro is created by the user or pre-installed +# with Excel. +# Template .xlt A pre-formatted spreadsheet created by the user +# or by Microsoft Excel. +# Module .xlv A module is written in VBA (Visual Basic for +# Applications) for Microsoft Excel +# Workspace .xlw Arrangement of the windows of multiple Workbooks +# Library .DLL Code written in VBA may access functions in a +# DLL, typically this is used to access the +# Windows API +#!:ext xls/xla/xlb/xlc/xld/xlk/xll/xlm/xlt/xlv/xlw + +#!:mime application/vnd.ms-excel + +# 5.8.1 BOF Records Written by Excel +# Record BOF, BIFF2 (record identifier is 0009 H): +# Offset Size Contents +# 0 2 BIFF version (not used) +# 2 2 Type of the following data: 0010H = Sheet +# 0020H = Chart +# 0040H = Macro sheet +# e.g. 0x0009 BOF len 4 version 2 content 0x0010 Sheet +0 uleshort =0x0009 Excel 2 BIFF 2 +>2 uleshort =4 +# version +>>4 uleshort =0 +>>4 uleshort =2 +>>>6 uleshort =0x0010 Sheet +>>>6 uleshort =0x0020 Chart +>>>6 uleshort =0x0040 Macros + +# Record BOF, BIFF3 (record identifier is 0209 H) and +# BIFF4 (record identifier is 0409H): +# Offset Size Contents +# 0 2 BIFF version (not used) +# 2 2 Type of the following data: 0010H = Sheet +# 0020H = Chart +# 0040H = Macro sheet +# 0100H = Workspace +# (BIFF3W/BIFF4W only) +# 4 2 Not used +0 uleshort =0x0209 Excel 3 BIFF 3 +>2 uleshort =6 +# version +>>4 uleshort =0 +>>4 uleshort =3 +>>>6 uleshort =0x0010 Sheet +>>>6 uleshort =0x0020 Chart +>>>6 uleshort =0x0040 Macros +# (BIFF3W only) +>>>6 uleshort =0x0100 Workspace + +0 uleshort =0x0409 Excel 4 BIFF 4 +>2 uleshort =6 +# version +>>4 uleshort =0 +>>4 uleshort =4 +>>>6 uleshort =0x0010 Sheet +>>>6 uleshort =0x0020 Chart +>>>6 uleshort =0x0040 Macros +# (BIFF4W only) +>>>6 uleshort =0x0100 Workspace + +# Record BOF, BIFF5 (record identifier is 0809 H): +# Offset Size Contents +# 0 2 BIFF version (always 0500H for BIFF5). +# Should only be used, if this record is the leading +# workbook globals BOF (see above). +# 2 2 Type of the following data: +# 0005H = Workbook globals +# 0006H = Visual Basic module +# 0010H = Sheet or dialogue (see SHEETPR, +# âžœ5.97) +# 0020H = Chart +# 0040H = Macro sheet +# 0100H = Workspace (BIFF5W only) +# 4 2 Build identifier, must not be 0 +# 6 2 Build year +0 uleshort =0x0809 Excel 5 BIFF 5 +>2 uleshort =8 +# version +>>4 uleshort =0x0500 +>>4 uleshort =5 +>>4 uleshort =0 +>>>6 uleshort =0x0005 Workbook Globals +>>>6 uleshort =0x0006 VB Module +>>>6 uleshort =0x0010 Sheet +>>>6 uleshort =0x0020 Chart +>>>6 uleshort =0x0040 Macros +# (BIFF5W only) +>>>6 uleshort =0x0100 Workspace +>>>>8 uleshort >0 Build %d +>>>>>10 uleshort >1900 Year %d + +# Record BOF, BIFF8 (record identifier is 0809 H): +# Offset Size Contents +# 0 2 BIFF version (always 0600 H for BIFF8) +# 2 2 Type of the following data: +# 0005H = Workbook globals +# 0006H = Visual Basic module +# 0010H = Sheet or dialogue (see SHEETPR, +# âžœ5.97) +# 0020H = Chart +# 0040H = Macro sheet +# 0100H = Workspace (BIFF8W only) +# 4 2 Build identifier, must not be 0 +# 6 2 Build year, must not be 0 +# 8 4 File history flags +# 12 4 Lowest Excel version that can read all records in this +# file +0 uleshort =0x0809 Excel 8 BIFF 8 +>2 uleshort =16 +# version +>>4 uleshort =0x0600 +>>4 uleshort =8 +>>4 uleshort =0 +>>>6 uleshort =0x0005 Workbook Globals +>>>6 uleshort =0x0006 VB Module +>>>6 uleshort =0x0010 Sheet +>>>6 uleshort =0x0020 Chart +>>>6 uleshort =0x0040 Macros +# (BIFF8W only) +>>>6 uleshort =0x0100 Workspace +>>>>8 uleshort >0 Build %d +>>>>>10 uleshort >1900 Year %d +>>>>>>12 ulelong !0 File history %d +>>>>>>16 ulelong >0 Excel version needed %d + +# 5.8.2 BOF Records Written by Other External Tools +# Various external tools write non-standard BOF records with the record +# identifier 0809H (determining a BIFF5-BIFF8 BOF record), but with a +# different BIFF version field. In this case, the record identifier is +# ignored, and only the version field is used to set the BIFF version of +# the workbook. +# Record BOF (record identifier is 0809 H): +# Offset Size Contents +# 0 2 BIFF version: 0000H = BIFF5 +# 0200H = BIFF2 +# 0300H = BIFF3 +# 0400H = BIFF4 +# 0500H = BIFF5 +# 0600H = BIFF8 +# 2 2 Type of the following data: +# 0005H = Workbook globals +# 0006H = Visual Basic module +# 0010H = Sheet or dialogue (see SHEETPR, +# âžœ5.97) +# 0020H = Chart +# 0040H = Macro sheet +# 0100H = Workspace +# [4] var. (optional) Additional fields of a BOF record, +# should be ignored +0 uleshort =0x0809 +# >= 4 +>2 uleshort >3 +>>4 uleshort =0 Excel 5 BIFF 5 +>>4 uleshort =0x0200 Excel 2 BIFF 2 +>>4 uleshort =2 Excel 2 BIFF 2 +>>4 uleshort =0x0300 Excel 3 BIFF 3 +>>4 uleshort =3 Excel 3 BIFF 3 +>>4 uleshort =0x0400 Excel 4 BIFF 4 +>>4 uleshort =4 Excel 4 BIFF 4 +>>4 uleshort =0x0500 Excel 5 BIFF 5 +>>4 uleshort =5 Excel 5 BIFF 5 +>>4 uleshort =0x0600 Excel 8 BIFF 8 +>>4 uleshort =6 Excel 8 BIFF 8 +>>4 uleshort =0x0800 Excel 8 BIFF 8 +>>4 uleshort =8 Excel 8 BIFF 8 +>>>6 uleshort =0x0005 Workbook Globals +>>>6 uleshort =0x0006 VB Module +>>>6 uleshort =0x0010 Sheet/Dialogue +>>>6 uleshort =0x0020 Chart +>>>6 uleshort =0x0040 Macros +# (BIFF8W only) +>>>6 uleshort =0x0100 Workspace + diff --git a/magic/Magdir/msooxml b/magic/Magdir/msooxml index 905017eb9123..4dfb3a9fb623 100644 --- a/magic/Magdir/msooxml +++ b/magic/Magdir/msooxml @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: msooxml,v 1.19 2023/03/14 19:46:15 christos Exp $ +# $File: msooxml,v 1.23 2024/07/19 18:48:23 christos Exp $ # msooxml: file(1) magic for Microsoft Office XML # From: Ralf Brown <ralf.brown@gmail.com> @@ -38,31 +38,40 @@ # since some documents include a 520-byte extra field following the file # header, we need to scan for the next header >>>(18.l+49) search/6000 PK\003\004 +>>>>&26 use msooxml +>>>>&26 default x # now skip to the *third* local file header; again, we need to scan due to a # 520-byte extra field following the file header ->>>>&26 search/6000 PK\003\004 +>>>>>&26 search/6000 PK\003\004 # and check the subdirectory name to determine which type of OOXML -# file we have. Correct the mimetype with the registered ones: +# file we have. Correct the mimetype with the registered ones: # https://technet.microsoft.com/en-us/library/cc179224.aspx ->>>>>&26 use msooxml ->>>>>&26 default x +>>>>>>&26 use msooxml +>>>>>>&26 default x # OpenOffice/Libreoffice orders ZIP entry differently, so check the 4th file ->>>>>>&26 search/6000 PK\003\004 ->>>>>>>&26 use msooxml +>>>>>>>&26 search/6000 PK\003\004 +>>>>>>>>&26 use msooxml # Some OOXML generators add an extra customXml directory. Check another file. ->>>>>>>&26 default x ->>>>>>>>&26 search/6000 PK\003\004 ->>>>>>>>>&26 use msooxml +>>>>>>>>&26 default x +>>>>>>>>>&26 search/6000 PK\003\004 +>>>>>>>>>>&26 use msooxml +>>>>>>>>>>&26 default x +>>>>>>>>>>>&26 search/6000 PK\003\004 +>>>>>>>>>>>>&26 use msooxml +>>>>>>>>>>>>&26 default x Microsoft OOXML +>>>>>>>>>>>&26 default x Microsoft OOXML +>>>>>>>>>>&26 default x Microsoft OOXML >>>>>>>>>&26 default x Microsoft OOXML +>>>>>>>>&26 default x Microsoft OOXML >>>>>>>&26 default x Microsoft OOXML ->>>>>&26 default x Microsoft OOXML +>>>>>>&26 default x Microsoft OOXML >>0x1E regex \\[trash\\] >>>&26 search/6000 PK\003\004 >>>>&26 search/6000 PK\003\004 ->>>>>&26 use msooxml ->>>>>&26 default x +>>>>>&26 use msooxml +>>>>>&26 default x >>>>>>&26 search/6000 PK\003\004 ->>>>>>>&26 use msooxml +>>>>>>>&26 use msooxml >>>>>>>&26 default x Microsoft OOXML >>>>>>&26 default x Microsoft OOXML >>>>>&26 default x Microsoft OOXML diff --git a/magic/Magdir/msvc b/magic/Magdir/msvc index fbfa4f266f9b..c66a00ad506e 100644 --- a/magic/Magdir/msvc +++ b/magic/Magdir/msvc @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: msvc,v 1.11 2022/01/17 17:17:30 christos Exp $ +# $File: msvc,v 1.12 2024/03/31 15:08:13 christos Exp $ # msvc: file(1) magic for msvc # "H. Nanosecond" <aldomel@ix.netcom.com> # Microsoft visual C @@ -15,9 +15,14 @@ 0 string \102\157\162\154\141\156\144\040\103\053\053\040\120\162\157 MSVC .ide # .res -0 string \000\000\000\000\040\000\000\000\377 MSVC .res -0 string \377\003\000\377\001\000\020\020\350 MSVC .res -0 string \377\003\000\377\001\000\060\020\350 MSVC .res +# https://learn.microsoft.com/en-us/windows/win32/menurc/resource-file-formats +# https://learn.microsoft.com/en-us/windows/win32/menurc/resourceheader +# A binary resource file consists of a number of concatenated resource entries. +# Each entry consists of a resource header and the data for that resource. +# Resource file starts with an empty resource entry with 32-byte long header in +# which is stored ordinal type 0 and ordinal name 0. +0 string \000\000\000\000\040\000\000\000\377\377\000\000\377\377\000\000 Microsoft Visual C binary resource file +!:ext res #.lib # URL: https://en.wikipedia.org/wiki/Microsoft_Visual_C%2B%2B diff --git a/magic/Magdir/msx b/magic/Magdir/msx index 60e16569e24f..ce593cb80f02 100644 --- a/magic/Magdir/msx +++ b/magic/Magdir/msx @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: msx,v 1.12 2024/08/30 17:29:28 christos Exp $ # msx: file(1) magic for the MSX Home Computer # v1.3 # Fabio R. Schmidlin <sd-snatcher@users.sourceforge.net> @@ -202,21 +203,6 @@ >>4 uleshort >0 \b, stahdl=%#04x >>6 uleshort >0 \b, devhdl=%#04x >>8 uleshort >0 \b, bas=%#04x -0 string/b AB\0\0 ->6 uleshort 0 ->>4 uleshort >0x400F MSX-BASIC extension ROM ->>>4 uleshort >0 \b, stahdl=%#04x ->>>6 uleshort >0 \b, devhdl=%#04x ->>>0x1C string OPLL \b, MSX-Music ->>>>0x18 string PAC2 \b (external) ->>>>0x18 string APRL \b (internal) - -0 string/b AB\0\0\0\0 ->6 uleshort >0x400F MSX device BIOS ->>6 uleshort >0 \b, devhdl=%#04x - - -0 string/b AB #>2 string 5JSuperLAYDOCK MSX Super Laydock ROM #>3 string @HYDLIDE3MSX MSX Hydlide-3 ROM #>3 string @3\x80IA862 Golvellius MSX1 ROM @@ -242,6 +228,21 @@ >>>>>6 uleshort 0 >>>>>>8 uleshort >0 MSX BASIC program in ROM, bas=%#04x +0 string/b AB\0\0 +>6 uleshort 0 +>>4 uleshort >0x400F MSX-BASIC extension ROM +>>>4 uleshort >0 \b, stahdl=%#04x +>>>6 uleshort >0 \b, devhdl=%#04x +>>>0x1C string OPLL \b, MSX-Music +>>>>0x18 string PAC2 \b (external) +>>>>0x18 string APRL \b (internal) + +0 string/b AB\0\0\0\0 +>6 uleshort >0x400F MSX device BIOS +>>6 uleshort >0 \b, devhdl=%#04x + + + 0x4000 string/b AB >0x4002 uleshort >0x400F >>0x400A string \0\0\0\0\0\0 MSX ROM with nonstandard page order diff --git a/magic/Magdir/music b/magic/Magdir/music index ad8da6593811..f87fc12ef8b2 100644 --- a/magic/Magdir/music +++ b/magic/Magdir/music @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: music,v 1.1 2011/11/25 03:28:17 christos Exp $ -# music: file (1) magic for music formats +# $File: music,v 1.2 2024/06/10 23:09:52 christos Exp $ +# music: file(1) magic for music formats # BWW format used by Bagpipe Music Writer Gold by Robert MacNeil Musicworks # and Bagpipe Writer by Doug Wickstrom diff --git a/magic/Magdir/nasa b/magic/Magdir/nasa index de3545f80800..dd5a166e13c6 100644 --- a/magic/Magdir/nasa +++ b/magic/Magdir/nasa @@ -1,6 +1,7 @@ #------------------------------------------------------------------------------ -# nasa: file(1) magic +# $File: nasa,v 1.3 2024/06/10 23:09:52 christos Exp $ +# nasa: file(1) magic for NASA SPICE file # From: Barry Carter <carter.barry@gmail.com> 0 string DAF/SPK NASA SPICE file (binary format) diff --git a/magic/Magdir/ole2compounddocs b/magic/Magdir/ole2compounddocs index 2c451a9ab578..e86183c8036c 100644 --- a/magic/Magdir/ole2compounddocs +++ b/magic/Magdir/ole2compounddocs @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: ole2compounddocs,v 1.26 2023/05/15 16:46:12 christos Exp $ +# $File: ole2compounddocs,v 1.29 2024/06/18 17:07:48 christos Exp $ # Microsoft OLE 2 Compound Documents : file(1) magic for Microsoft Structured # storage (https://en.wikipedia.org/wiki/Compound_File_Binary_Format) # Additional tests for OLE 2 Compound Documents should be under this recipe. @@ -319,6 +319,18 @@ #>>>>>>&0 use PageMaker # THIS WORKS PARTLY! >>>>>>&0 indirect x +# +# URL: http://fileformats.archiveteam.org/wiki/Easy_CD_Creator +# From: Joerg Jenderek +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/c/cl4.trid.xml +# Note: called "Easy CD Creator Layout" by TrID +# "newer" version 4 contain a clsid +# Second directory entry name Contents +>>>>128 lestring16 Contents : Easy CD Creator 2 Layout +# contains also 3 strings SesnDescriptor CD_PLUS 0090 +#!:mime application/x-ole-storage +!:mime application/x-corel-cl2 +!:ext cl2 # remaining null clsid >>>>128 default x >>>>>0 use ole2-unknown @@ -503,10 +515,17 @@ # https://extension.nirsoft.net/wsb # like: wsbsamp.wsb WORKS2003_CD:\MSWorks\Common\Sammlung.wsb !:ext wsb -#?? -# URL: http://fileformats.archiveteam.org/wiki/Microsoft_Publisher +# +# Update: Joerg Jenderek +# URL: http://fileformats.archiveteam.org/wiki/Microsoft_Publisher +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/p/pub.trid.xml +# Note: called like "Microsoft Publisher document" by TrID +# "version" string MSPublisher.2 inside CompObj stream >>88 ubequad 0x00c0000000000046 : Microsoft ->>>80 ubequad 0x0112020000000000 Publisher +>>>80 ubequad 0x0012020000000000 Publisher 95 (2.0) +!:mime application/vnd.ms-publisher +!:ext pub +>>>80 ubequad 0x0112020000000000 Publisher 97-2013 (3.0-11.0) !:mime application/vnd.ms-publisher !:ext pub # @@ -731,6 +750,33 @@ !:ext max # also chr for character file according to DROID https://www.nationalarchives.gov.uk/PRONOM/fmt/978 #!:ext max/chr +# From: Joerg Jenderek +# URL: http://fileformats.archiveteam.org/wiki/IPT +# https://en.wikipedia.org/wiki/Autodesk_Inventor +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/i/ipt.trid.xml +# Note: called "Autodesk Inventor Part" by TrID +# second, third, fifth and seventh directory entry name like RSeStorage RSeEmbeddings RefdFiles RSeDb +>>88 ubequad 0x93c37e0706000000 : Autodesk +>>>80 ubequad 0x90b4294db249d011 Inventor Part +#!:mime application/x-ole-storage +!:mime model/x-autodesk-ipt +!:ext ipt +# From: Joerg Jenderek +# URL: http://fileformats.archiveteam.org/wiki/Easy_CD_Creator +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/c/cl4.trid.xml +# Note: called "Easy CD Creator Layout" by TrID, +# "Easy CD Creator 4" by CREATR32.exe and "Easy CD Creator Document" on Windows +# verified by Michal Mutl Structured Storage Viewer `SSView.exe MY_CD3.cl4` +# verified partly by libolecf-utils `olecfinfo -v MY_CD4.cl4` +# created by Adaptec Easy CD Creator 4.02b +# "older" version 2 contain no clsid +>>88 ubequad 0x893f00802964b632 : Easy +>>>80 ubequad 0x0293c3a90a77d111 CD Creator 4 Layout +#!:mime application/x-ole-storage +!:mime application/x-corel-cl4 +!:ext cl4 +# maybe also suffix cl3 +#!:ext cl3/cl4 # remaining non null clsid >>88 default x >>>0 use ole2-unknown diff --git a/magic/Magdir/olf b/magic/Magdir/olf index 6ae3fc04e5ec..5c970b2f974f 100644 --- a/magic/Magdir/olf +++ b/magic/Magdir/olf @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: olf,v 1.4 2009/09/19 16:28:11 christos Exp $ +# $File: olf,v 1.5 2024/02/29 03:42:40 christos Exp $ # olf: file(1) magic for OLF executables # # We have to check the byte order flag to see what byte order all the @@ -43,11 +43,11 @@ >>18 leshort 0 no machine, >>18 leshort 1 AT&T WE32100 - invalid byte order, >>18 leshort 2 SPARC - invalid byte order, ->>18 leshort 3 Intel 80386, +>>18 leshort 3 Intel i386, >>18 leshort 4 Motorola 68000 - invalid byte order, >>18 leshort 5 Motorola 88000 - invalid byte order, ->>18 leshort 6 Intel 80486, ->>18 leshort 7 Intel 80860, +>>18 leshort 6 Intel i486, +>>18 leshort 7 Intel i860, >>18 leshort 8 MIPS R3000_BE - invalid byte order, >>18 leshort 9 Amdahl - invalid byte order, >>18 leshort 10 MIPS R3000_LE, @@ -74,11 +74,11 @@ >>18 beshort 0 no machine, >>18 beshort 1 AT&T WE32100, >>18 beshort 2 SPARC, ->>18 beshort 3 Intel 80386 - invalid byte order, +>>18 beshort 3 Intel i386 - invalid byte order, >>18 beshort 4 Motorola 68000, >>18 beshort 5 Motorola 88000, ->>18 beshort 6 Intel 80486 - invalid byte order, ->>18 beshort 7 Intel 80860, +>>18 beshort 6 Intel i486 - invalid byte order, +>>18 beshort 7 Intel i860, >>18 beshort 8 MIPS R3000_BE, >>18 beshort 9 Amdahl, >>18 beshort 10 MIPS R3000_LE - invalid byte order, diff --git a/magic/Magdir/pack b/magic/Magdir/pack new file mode 100644 index 000000000000..e0f6835e8c84 --- /dev/null +++ b/magic/Magdir/pack @@ -0,0 +1,101 @@ +#------------------------------------------------------------------------------ +# $File: pack,v 1.1 2024/08/30 17:29:28 christos Exp $ +# file(1) magic for things that have PACK as magic + +0 string PACK +# Type: Git pack +# From: Adam Buchbinder <adam.buchbinder@gmail.com> +# Update: Joerg Jenderek +# URL: http://fileformats.archiveteam.org/wiki/Git +# reference: https://github.com/git/git/blob/master/Documentation/technical/pack-format.txt +# The actual magic is 'PACK', but that clashes with Doom/Quake packs. However, +# those have a little-endian offset immediately following the magic 'PACK', +# the first byte of which is never 0, while the first byte of the Git pack +# version, since it's a tiny number stored in big-endian format, is always 0. +# GRR: line above is too general as it matches also PackDir archive ./acorn +# test for major version. Git 2017 accepts version number 2 or 3 +>4 ubelong <9 +# Acorn PackDir with method 0 compression has root like ADFS::HardDisc4.$.AsylumSrc +# or SystemDevice::foobar +>>9 search/13 :: +# but in git binary +>>9 default x Git pack +!:mime application/x-git +!:ext pack +# 4 GB limit implies unsigned integer +>>>4 ubelong x \b, version %u +>>>8 ubelong x \b, %u objects + +# From: Joerg Jenderek +# URL: https://www.kyzer.me.uk/pack/xad/#PackDir +# reference: https://www.kyzer.me.uk/pack/xad/xad_PackDir.lha/PackDir.c +# GRR: line below is too general as it matches also "Git pack" in ./revision +# check for valid compression method 0-4 +>5 ulelong <5 +# https://www.riscosopen.org/wiki/documentation/show/Introduction%20To%20Filing%20Systems +# To skip "Git pack" version 0 test for root directory object like +# ADFS::RPC.$.websitezip.FONTFIX +>>9 string >ADFS\ PackDir archive (RISC OS) +# TrID labels above as "Acorn PackDir compressed Archive" +# compression mode y (0 - 4) for GIF LZW with a maximum n bits +# (y~n,0~12,1~13,2~14,3~15,4~16) +>>>5 ulelong+12 x \b, LZW %u-bits compression +# https://www.filebase.org.uk/filetypes +# !Packdir compressed archive has three hexadecimal digits code 68E +!:mime application/x-acorn-68E +!:ext pkd/bin +# null terminated root directory object like IDEFS::IDE-4.$.Apps.GRAPHICS.!XFMPdemo +>>>9 string x \b, root "%s" +# load address 0xFFFtttdd, ttt is the object filetype and dddddddddd is time +>>>>&1 ulelong x \b, load address %#x +# execution address 0xdddddddd dddddddddd is 40 bit unsigned centiseconds since 1.1.1900 UTC +>>>>&5 ulelong x \b, exec address %#x +# attributes (bits: 0~owner read,1~owner write,3~no delete,4~public read,5~public write) +>>>>&9 ulelong x \b, attributes %#x +# number of entries in this directory. for root dir 0 +#>>>&13 ulelong x \b, entries %#x +# the entries start here with object name +>>>>&17 string x \b, 1st object "%s" + +# Update: Joerg Jenderek +# URL: http://fileformats.archiveteam.org/wiki/PAK +# reference: https://quakewiki.org/wiki/.pak +# GRR: line below is too general as it matches also Acorn PackDir compressed Archive +# real Quake examples like pak0.pak have only some hundreds like 150 files +# So test for few files +>8 ulelong <0x01000000 +# in file version 5.32 test for null terminator is only true for +# offset ~< FILE_BYTES_MAX = 1 MB defined in ../../src/file.h +# look for null terminator of 1st entry name +>>(4.l+55) ubyte 0 Quake I or II world or extension +!:mime application/x-dzip +!:ext pak +#>>>8 ulelong x \b, table size %u +# dividing this by entry size (64) gives number of files +>>>8 ulelong/64 x \b, %u files +# offset to the beginning of the file table +>>>4 ulelong x \b, offset %#x +# 1st file entry +>>>(4.l) use pak-entry +# 2nd file entry +#>>>4 ulelong+64 x \b, offset %#x +#>>>(4.l+64) use pak-entry +# +# display file table entry of Quake PAK archive +0 name pak-entry +# normally entry start after header which implies offset 12 or higher +>56 ulelong >11 +# the offset from the beginning of pak to beginning of this entry file contents +>>56 ulelong x at %#x +# the size of file for this entry +>>60 ulelong x %u bytes +# 56 byte null-terminated entry name string includes path like maps/e1m1.bsp +>>0 string x '%-.56s' +# inspect entry content by jumping to entry offset +>>(56) indirect x \b: + +#0 string -1\x0a Quake I demo +#>30 string x version %.4s +#>61 string x level %s + +#0 string 5\x0a Quake I save diff --git a/magic/Magdir/pc88 b/magic/Magdir/pc88 deleted file mode 100644 index 03822f50279f..000000000000 --- a/magic/Magdir/pc88 +++ /dev/null @@ -1,24 +0,0 @@ -#------------------------------------------------------------------------------ -# pc88: file(1) magic for the NEC Home Computer -# v1.0 -# Fabio R. Schmidlin <sd-snatcher@users.sourceforge.net> - -# PC88 2D disk image -0x20 ulelong&0xFFFFFEFF 0x2A0 ->0x10 string \0\0\0\0\0\0\0\0\0\0 ->>0x280 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 ->>>0x1A ubyte&0xEF 0 ->>>>0x1B ubyte&0x8F 0 ->>>>>0x1B ubyte&70 <0x40 ->>>>>>0x1C ulelong >0x21 ->>>>>>>0 regex [[:print:]]* NEC PC-88 disk image, name=%s ->>>>>>>>0x1B ubyte 0 \b, media=2D ->>>>>>>>0x1B ubyte 0x10 \b, media=2DD ->>>>>>>>0x1B ubyte 0x20 \b, media=2HD ->>>>>>>>0x1B ubyte 0x30 \b, media=1D ->>>>>>>>0x1B ubyte 0x40 \b, media=1DD ->>>>>>>>0x1A ubyte 0x10 \b, write-protected - - - - diff --git a/magic/Magdir/pdp b/magic/Magdir/pdp index 2d18b62df595..dfb0ca60cbd3 100644 --- a/magic/Magdir/pdp +++ b/magic/Magdir/pdp @@ -1,7 +1,8 @@ #------------------------------------------------------------------------------ -# $File: pdp,v 1.11 2017/03/17 21:35:28 christos Exp $ +# $File: pdp,v 1.12 2024/02/29 03:40:37 christos Exp $ # pdp: file(1) magic for PDP-11 executable/object and APL workspace +# URL: https://en.wikipedia.org/wiki/PDP-11 # 0 lelong 0101555 PDP-11 single precision APL workspace 0 lelong 0101554 PDP-11 double precision APL workspace @@ -12,13 +13,22 @@ >8 leshort >0 not stripped >15 byte >0 - version %d -# updated by Joerg Jenderek at Mar 2013 +# updated by Joerg Jenderek at Mar 2013, Feb 2024 # GRR: line below too general as it catches also Windows precompiled setup information *.PNF 0 leshort 0401 +# PDP-11 UNIX/RT ldp (strength=50=50+0) after D64 Image (strength=70=70+0 ./c64) and MMDF mailbox (strength=70=70+0 ./mmdf) +#!:strength +0 # skip *.PNF with WinDirPathOffset 58h ->68 ulelong !0x00000058 PDP-11 UNIX/RT ldp +>68 ulelong !0x00000058 # skip *.PNF with high byte of InfVersionDatumCount zero #>>15 byte !0 PDP-11 UNIX/RT ldp +# skip few Commodore D64 disc image like "The Great Gianna Sisters.d64" initialized with ^A and handled by ./c64 +>>8 quad !0x0101010101010101 +# skip MMDF mailbox like maillog.expected.2 with MBOX characteristic near the beginning handled by ./mmdf +>>>5 search/610/b From\ +>>>5 default x PDP-11 UNIX/RT ldp +#!:mime application/octet-stream +#!:ext foo 0 leshort 0405 PDP-11 old overlay 0 leshort 0410 PDP-11 pure executable diff --git a/magic/Magdir/pgp b/magic/Magdir/pgp index d81883868b41..d7d3ae95d850 100644 --- a/magic/Magdir/pgp +++ b/magic/Magdir/pgp @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: pgp,v 1.25 2021/04/26 15:56:00 christos Exp $ +# $File: pgp,v 1.26 2024/09/01 15:51:51 christos Exp $ # pgp: file(1) magic for Pretty Good Privacy # Handling of binary PGP keys is in pgp-binary-keys. @@ -108,15 +108,15 @@ >7 belong x %08X >11 byte 0x01 RSA (Encrypt or Sign) 1024b >11 byte 0x02 RSA Encrypt-Only 1024b ->12 string \x04\x00 ->12 string \x03\xff ->12 string \x03\xfe ->12 string \x03\xfd ->12 string \x03\xfc ->12 string \x03\xfb ->12 string \x03\xfa ->12 string \x03\xf9 ->142 byte 0xd2 . +#>12 string \x04\x00 +#>12 string \x03\xff +#>12 string \x03\xfe +#>12 string \x03\xfd +#>12 string \x03\xfc +#>12 string \x03\xfb +#>12 string \x03\xfa +#>12 string \x03\xf9 +#>142 byte 0xd2 . # 2048b RSA encrypted data @@ -125,15 +125,15 @@ >8 belong x %08X >12 byte 0x01 RSA (Encrypt or Sign) 2048b >12 byte 0x02 RSA Encrypt-Only 2048b ->13 string \x08\x00 ->13 string \x07\xff ->13 string \x07\xfe ->13 string \x07\xfd ->13 string \x07\xfc ->13 string \x07\xfb ->13 string \x07\xfa ->13 string \x07\xf9 ->271 byte 0xd2 . +#>13 string \x08\x00 +#>13 string \x07\xff +#>13 string \x07\xfe +#>13 string \x07\xfd +#>13 string \x07\xfc +#>13 string \x07\xfb +#>13 string \x07\xfa +#>13 string \x07\xf9 +#>271 byte 0xd2 . # 3072b RSA encrypted data @@ -142,15 +142,15 @@ >8 belong x %08X >12 byte 0x01 RSA (Encrypt or Sign) 3072b >12 byte 0x02 RSA Encrypt-Only 3072b ->13 string \x0c\x00 ->13 string \x0b\xff ->13 string \x0b\xfe ->13 string \x0b\xfd ->13 string \x0b\xfc ->13 string \x0b\xfb ->13 string \x0b\xfa ->13 string \x0b\xf9 ->399 byte 0xd2 . +#>13 string \x0c\x00 +#>13 string \x0b\xff +#>13 string \x0b\xfe +#>13 string \x0b\xfd +#>13 string \x0b\xfc +#>13 string \x0b\xfb +#>13 string \x0b\xfa +#>13 string \x0b\xf9 +#>399 byte 0xd2 . # 4096b RSA encrypted data @@ -159,15 +159,15 @@ >8 belong x %08X >12 byte 0x01 RSA (Encrypt or Sign) 4096b >12 byte 0x02 RSA Encrypt-Only 4096b ->13 string \x10\x00 ->13 string \x0f\xff ->13 string \x0f\xfe ->13 string \x0f\xfd ->13 string \x0f\xfc ->13 string \x0f\xfb ->13 string \x0f\xfa ->13 string \x0f\xf9 ->527 byte 0xd2 . +#>13 string \x10\x00 +#>13 string \x0f\xff +#>13 string \x0f\xfe +#>13 string \x0f\xfd +#>13 string \x0f\xfc +#>13 string \x0f\xfb +#>13 string \x0f\xfa +#>13 string \x0f\xf9 +#>527 byte 0xd2 . # 8192b RSA encrypted data @@ -176,15 +176,15 @@ >8 belong x %08X >12 byte 0x01 RSA (Encrypt or Sign) 8192b >12 byte 0x02 RSA Encrypt-Only 8192b ->13 string \x20\x00 ->13 string \x1f\xff ->13 string \x1f\xfe ->13 string \x1f\xfd ->13 string \x1f\xfc ->13 string \x1f\xfb ->13 string \x1f\xfa ->13 string \x1f\xf9 ->1039 byte 0xd2 . +#>13 string \x20\x00 +#>13 string \x1f\xff +#>13 string \x1f\xfe +#>13 string \x1f\xfd +#>13 string \x1f\xfc +#>13 string \x1f\xfb +#>13 string \x1f\xfa +#>13 string \x1f\xf9 +#>1039 byte 0xd2 . # 1024b Elgamal encrypted data @@ -192,14 +192,14 @@ >4 belong x keyid: %08X >8 belong x %08X >12 byte 0x10 Elgamal Encrypt-Only 1024b. ->13 string \x04\x00 ->13 string \x03\xff ->13 string \x03\xfe ->13 string \x03\xfd ->13 string \x03\xfc ->13 string \x03\xfb ->13 string \x03\xfa ->13 string \x03\xf9 +#>13 string \x04\x00 +#>13 string \x03\xff +#>13 string \x03\xfe +#>13 string \x03\xfd +#>13 string \x03\xfc +#>13 string \x03\xfb +#>13 string \x03\xfa +#>13 string \x03\xf9 # 2048b Elgamal encrypted data @@ -207,14 +207,14 @@ >4 belong x keyid: %08X >8 belong x %08X >12 byte 0x10 Elgamal Encrypt-Only 2048b. ->13 string \x08\x00 ->13 string \x07\xff ->13 string \x07\xfe ->13 string \x07\xfd ->13 string \x07\xfc ->13 string \x07\xfb ->13 string \x07\xfa ->13 string \x07\xf9 +#>13 string \x08\x00 +#>13 string \x07\xff +#>13 string \x07\xfe +#>13 string \x07\xfd +#>13 string \x07\xfc +#>13 string \x07\xfb +#>13 string \x07\xfa +#>13 string \x07\xf9 # 3072b Elgamal encrypted data @@ -222,14 +222,14 @@ >4 belong x keyid: %08X >8 belong x %08X >12 byte 0x10 Elgamal Encrypt-Only 3072b. ->13 string \x0c\x00 ->13 string \x0b\xff ->13 string \x0b\xfe ->13 string \x0b\xfd ->13 string \x0b\xfc ->13 string \x0b\xfb ->13 string \x0b\xfa ->13 string \x0b\xf9 +#>13 string \x0c\x00 +#>13 string \x0b\xff +#>13 string \x0b\xfe +#>13 string \x0b\xfd +#>13 string \x0b\xfc +#>13 string \x0b\xfb +#>13 string \x0b\xfa +#>13 string \x0b\xf9 # crypto algo mapper diff --git a/magic/Magdir/plan9 b/magic/Magdir/plan9 index db068479c2d7..4f8ab352ec33 100644 --- a/magic/Magdir/plan9 +++ b/magic/Magdir/plan9 @@ -1,13 +1,13 @@ #------------------------------------------------------------------------------ -# $File: plan9,v 1.6 2021/07/30 12:25:13 christos Exp $ +# $File: plan9,v 1.7 2024/02/29 03:42:40 christos Exp $ # plan9: file(1) magic for AT&T Bell Labs' Plan 9 executables and object files # From: "Stefan A. Haubenthal" <polluks@web.de> # 0 belong 0x00000107 Plan 9 executable, Motorola 68k 0 belong 0x00000197 Plan 9 executable, AT&T Hobbit -0 belong 0x000001EB Plan 9 executable, Intel 386 -0 belong 0x00000247 Plan 9 executable, Intel 960 +0 belong 0x000001EB Plan 9 executable, Intel i386 +0 belong 0x00000247 Plan 9 executable, Intel i960 0 belong 0x000002AB Plan 9 executable, SPARC 0 belong 0x00000407 Plan 9 executable, MIPS R3000 0 belong 0x0000048B Plan 9 executable, AT&T DSP 3210 @@ -22,4 +22,4 @@ 0 belong 0x430D013C Plan 9 object file, AT&T Hobbit 0 belong 0x4D013201 Plan 9 object file, Motorola 68k 0 belong 0x7410013C Plan 9 object file, SPARC -0 belong 0x7E004501 Plan 9 object file, Intel 386 +0 belong 0x7E004501 Plan 9 object file, Intel i386 diff --git a/magic/Magdir/printer b/magic/Magdir/printer index b45a2025ec8a..e55c320b2ebf 100644 --- a/magic/Magdir/printer +++ b/magic/Magdir/printer @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: printer,v 1.34 2023/06/16 19:27:12 christos Exp $ +# $File: printer,v 1.36 2024/08/27 18:50:57 christos Exp $ # printer: file(1) magic for printer-formatted files # @@ -86,19 +86,6 @@ # (LANGUAGE and Language) # For example the LaserJet 5L driver puts the "PJL ENTER LANGUAGE" in line 10 # From: Uwe Bonnes <bon@elektron.ikp.physik.th-darmstadt.de> -# -0 string \033%-12345X@PJL HP Printer Job Language data ->&0 string >\0 %s ->>&0 string >\0 %s ->>>&0 string >\0 %s ->>>>&0 string >\0 %s -#>15 string \ ENTER\ LANGUAGE\ = -#>31 string PostScript PostScript - -# From: Stefan Thurner <thurners@nicsys.de> -0 string \033%-12345X@PJL ->&0 search/10000 %! PJL encapsulated PostScript document text - # Rick Richardson <rickrich@gmail.com> # For Fuji-Xerox Printers - HBPL stands for Host Based Printer Language @@ -106,13 +93,14 @@ # For Konica Minolta Printers - LAVAFLOW # For Samsung Printers - QPDL # For HP Printers - ZJS stands for Zenographics ZJStream -0 string \033%-12345X@PJL HP Printer Job Language data >0 search/10000 @PJL\ ENTER\ LANGUAGE=HBPL - HBPL >0 search/10000 @PJL\ ENTER\ LANGUAGE=HIPERC - Oki Data HIPERC >0 search/10000 @PJL\ ENTER\ LANGUAGE=LAVAFLOW - Konica Minolta LAVAFLOW >0 search/10000 @PJL\ ENTER\ LANGUAGE=QPDL - Samsung QPDL >0 search/10000 @PJL\ ENTER\ LANGUAGE\ =\ QPDL - Samsung QPDL >0 search/10000 @PJL\ ENTER\ LANGUAGE=ZJS - HP ZJS +# From: Stefan Thurner <thurners@nicsys.de> +>&0 search/10000 %! PJL encapsulated PostScript document text # Summary: Hewlett-Packard printer firmware update # From: Joerg Jenderek # URL: https://support.hp.com/us-en/drivers/selfservice/hp-envy-6000e-all-in-one-printer-series/2100187505/model/2100187513 @@ -230,8 +218,9 @@ 0 string PS4 >0 use hpgl # la.hp -0 string BP ->0 use hpgl +# Too weak +#0 string BP +#>0 use hpgl # miter.hp # Plot Absolute x,y{,x,y{...}}; x and y in range between -32767 and 32768 like: PA4000,3000; 0 string PA @@ -241,8 +230,9 @@ #>2 regex \^([-]{0,1}[0-9]{1,5}) COORDINATE=%s >>0 use hpgl # pw.hpg number of pens x -0 string NP ->0 use hpgl +# Too weak +#0 string NP +#>0 use hpgl # win_1.hp #0 string \003INCA WHAT_IS_THAT #>0 use hpgl diff --git a/magic/Magdir/python b/magic/Magdir/python index 00d90d123882..e00a087d8bec 100644 --- a/magic/Magdir/python +++ b/magic/Magdir/python @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: python,v 1.45 2022/07/24 23:59:37 christos Exp $ +# $File: python,v 1.47 2024/08/27 18:50:57 christos Exp $ # python: file(1) magic for python # # Outlook puts """ too for urgent messages @@ -191,6 +191,7 @@ # magic 3392+ implements PEP 552: Deterministic pycs 0 name pyc-pep552 +>0 uleshort x (magic: %04d), # the flag field determines how .pyc validity is checked >4 ulelong&1 0 timestamp-based, >>8 uledate x .py timestamp: %s UTC, @@ -208,24 +209,28 @@ >>1 ubyte 0x0d Byte-compiled Python module for !:mime application/x-bytecode.python # now look at the magic number to determine the version ->>>0 uleshort <3400 CPython 3.7, +>>>0 uleshort <3400 CPython 3.7 >>>0 default x ->>>>0 uleshort <3420 CPython 3.8, +>>>>0 uleshort <3420 CPython 3.8 >>>>0 default x ->>>>>0 uleshort <3430 CPython 3.9, +>>>>>0 uleshort <3430 CPython 3.9 >>>>>0 default x ->>>>>>0 uleshort <3450 CPython 3.10, +>>>>>>0 uleshort <3450 CPython 3.10 >>>>>>0 default x ->>>>>>>0 uleshort <3500 CPython 3.11, ->>>>>>>0 default x CPython 3.12 or newer, +>>>>>>>0 uleshort <3500 CPython 3.11 +>>>>>>>0 default x +>>>>>>>>0 uleshort <3550 CPython 3.12 +>>>>>>>>0 default x +>>>>>>>>>0 uleshort <3600 CPython 3.13 +>>>>>>>>>0 default x CPython 3.14 or newer >>>0 use pyc-pep552 ->>0 uleshort 240 Byte-compiled Python module for PyPy3.7, +>>0 uleshort 240 Byte-compiled Python module for PyPy3.7 !:mime application/x-bytecode.python >>>0 use pyc-pep552 ->>0 uleshort 256 Byte-compiled Python module for PyPy3.8, +>>0 uleshort 256 Byte-compiled Python module for PyPy3.8 !:mime application/x-bytecode.python >>>0 use pyc-pep552 ->>0 uleshort 336 Byte-compiled Python module for PyPy3.9, +>>0 uleshort 336 Byte-compiled Python module for PyPy3.9 !:mime application/x-bytecode.python >>>0 use pyc-pep552 @@ -245,6 +250,9 @@ >0 regex \^from[\040\t]+([A-Za-z0-9_]|\\.)+[\040\t]+import.*$ Python script text executable !:strength + 15 !:mime text/x-script.python +>0 regex \^import\ [_[:alpha:]]+\ as\ [[:alpha:]][[:space:]]*$ Python script text executable +!:mime text/x-script.python + # def __init__ (self, ...): 0 search/4096 def\ __init__ @@ -259,11 +267,6 @@ !:strength + 15 !:mime text/x-script.python -# import module [as abrev] -0 search/8192 import ->0 regex \^import\ [_[:alpha:]]+\ as\ [[:alpha:]][[:space:]]*$ Python script text executable -!:mime text/x-script.python - # comments #0 search/4096 ''' #>&0 regex .*'''$ Python script text executable diff --git a/magic/Magdir/revision b/magic/Magdir/revision index 824220a3d295..cf7e2f4d7a13 100644 --- a/magic/Magdir/revision +++ b/magic/Magdir/revision @@ -1,7 +1,8 @@ #------------------------------------------------------------------------------ -# $File: revision,v 1.11 2019/04/19 00:42:27 christos Exp $ +# $File: revision,v 1.12 2024/08/30 17:29:28 christos Exp $ # file(1) magic for revision control files + # From Hendrik Scholz <hendrik@scholz.net> 0 string/t /1\ :pserver: cvs password text file @@ -13,30 +14,6 @@ # From: Josh Triplett <josh@freedesktop.org> 0 string #\ v2\ git\ bundle\n Git bundle -# Type: Git pack -# From: Adam Buchbinder <adam.buchbinder@gmail.com> -# Update: Joerg Jenderek -# URL: http://fileformats.archiveteam.org/wiki/Git -# reference: https://github.com/git/git/blob/master/Documentation/technical/pack-format.txt -# The actual magic is 'PACK', but that clashes with Doom/Quake packs. However, -# those have a little-endian offset immediately following the magic 'PACK', -# the first byte of which is never 0, while the first byte of the Git pack -# version, since it's a tiny number stored in big-endian format, is always 0. -0 string PACK -# GRR: line above is too general as it matches also PackDir archive ./acorn -# test for major version. Git 2017 accepts version number 2 or 3 ->4 ubelong <9 -# Acorn PackDir with method 0 compression has root like ADFS::HardDisc4.$.AsylumSrc -# or SystemDevice::foobar ->>9 search/13 :: -# but in git binary ->>9 default x Git pack -!:mime application/x-git -!:ext pack -# 4 GB limit implies unsigned integer ->>>4 ubelong x \b, version %u ->>>8 ubelong x \b, %u objects - # Type: Git pack index # From: Adam Buchbinder <adam.buchbinder@gmail.com> 0 string \377tOc Git pack index diff --git a/magic/Magdir/riff b/magic/Magdir/riff index 9b913a54f8b8..664fef24d5e9 100644 --- a/magic/Magdir/riff +++ b/magic/Magdir/riff @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: riff,v 1.45 2022/07/24 23:47:49 christos Exp $ +# $File: riff,v 1.50 2024/04/13 16:40:48 christos Exp $ # riff: file(1) magic for RIFF format # See # @@ -140,24 +140,39 @@ >>&(4.l+4) use riff-walk >0 string fact >>&(4.l+4) use riff-walk ->0 string VP8 +# https://developers.google.com/speed/webp/docs/riff_container +>0 string VP8\x20 >>11 byte 0x9d >>>12 byte 0x01 >>>>13 byte 0x2a \b, VP8 encoding >>>>>14 leshort&0x3fff x \b, %d >>>>>16 leshort&0x3fff x \bx%d, Scaling: >>>>>14 leshort&0xc000 0x0000 \b [none] ->>>>>14 leshort&0xc000 0x1000 \b [5/4] ->>>>>14 leshort&0xc000 0x2000 \b [5/3] ->>>>>14 leshort&0xc000 0x3000 \b [2] ->>>>>14 leshort&0xc000 0x0000 \bx[none] ->>>>>14 leshort&0xc000 0x1000 \bx[5/4] ->>>>>14 leshort&0xc000 0x2000 \bx[5/3] ->>>>>14 leshort&0xc000 0x3000 \bx[2] +>>>>>14 leshort&0xc000 0x4000 \b [5/4] +>>>>>14 leshort&0xc000 0x8000 \b [5/3] +>>>>>14 leshort&0xc000 0xc000 \b [2] +>>>>>16 leshort&0xc000 0x0000 \bx[none] +>>>>>16 leshort&0xc000 0x4000 \bx[5/4] +>>>>>16 leshort&0xc000 0x8000 \bx[5/3] +>>>>>16 leshort&0xc000 0xc000 \bx[2] >>>>>15 byte&0x80 =0x00 \b, YUV color >>>>>15 byte&0x80 =0x80 \b, bad color specification >>>>>15 byte&0x40 =0x40 \b, no clamping required >>>>>15 byte&0x40 =0x00 \b, decoders should clamp +>0 string VP8L +>>8 byte 0x2f \b, lossless +>>>11 byte &0x01 \b, with alpha +>0 string VP8X +>>4 lelong 0x0a +>>>8 byte &0x02 \b, animated +>>>8 byte &0x04 \b, XMP metadata +>>>8 byte &0x08 \b, EXIF metadata +>>>8 byte &0x10 \b, with alpha +>>>8 byte &0x20 \b, ICC profile +# TODO: These two values are off-by-one, for a 64x64 WebP they contain +# 63x63 as there can be no 0x0 file. +>>>12 lelong&0xffffff x \b, %d+1 +>>>15 lelong&0xffffff x \bx%d+1 #>0 string x we got %s #>>&(4.l+4) use riff-walk @@ -332,6 +347,35 @@ # MORE TESTS NEEDED HERE! #>>>0 use corel-des #>>>0 use corel-draw +# From: Joerg Jenderek +# URL: http://fileformats.archiveteam.org/wiki/SHW_(Corel) +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/s/shw-corel.trid.xml +# Note: called "CorelSHOW presentation (v4)" by TrID +# and "Corel Presentation" by DROID via PUID fmt/877 +>8 string shw4 \b, CorelSHOW presentation, version 4 +#!:mime application/octet-stream +!:mime application/x-corel-shw +!:ext shw +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/s/shw-corel-5.trid.xml +# Note: called "CorelSHOW presentation (v5)" by TrID +>8 string shw5 \b, CorelSHOW presentation, version 5 +#!:mime application/octet-stream +!:mime application/x-corel-shw +!:ext shw +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/s/shb-corel.trid.xml +# Note: called "CorelSHOW Background (v5)" by TrID +>8 string shl5 \b, CorelSHOW Background, version 5 +#!:mime application/octet-stream +!:mime application/x-corel-shb +# GRR: no example +!:ext shb +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/s/shr-corel.trid.xml +# Note: called "CorelSHOW player data (v5)" by TrID +>8 string shr5 \b, CorelSHOW player data, version 5 +#!:mime application/octet-stream +!:mime application/x-corel-shr +# GRR: no example +!:ext shr >8 string NUNDROOT \b, Steinberg CuBase # From: Joerg Jenderek # URL: http://fileformats.archiveteam.org/wiki/MIDI_Instrument_Definition_File @@ -354,6 +398,17 @@ >>0x31 search/256 inst by # probably manufacture name like: "Unspecified Company" "NVidia Corporation" >>>&0x24 string x "%s" +# From: Joerg Jenderek +# URL: https://en.wikipedia.org/wiki/Microsoft_Flight_Simulator +# Reference: https://www.fsdeveloper.com/wiki/index.php?title=MDL_file_format_(FSX) +# http://mark0.net/download/triddefs_xml.7z/defs/m/mdl-fs-gen.trid.xml +# Note: called "Microsoft Flight Simulator 3D model (generic)" by TrID +>8 string MDL +>>12 string MDLH \b, Microsoft Flight Simulator 3D model +#!:mime application/x-riff +!:mime application/x-ms-mdl +!:ext mdl +#>>>8 string MDL8 \b, version 8? # AVI == Audio Video Interleave # Reference: http://fileformats.archiveteam.org/wiki/AVI >8 string AVI\040 \b, AVI @@ -650,6 +705,22 @@ !:mime application/x-trid-trd !:ext trd # From: Joerg Jenderek +# URL: http://fileformats.archiveteam.org/wiki/Easy_CD_Creator +# https://en.wikipedia.org/wiki/Roxio +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/i/img-cif.trid.xml +# Note: called "Easy CD Creator disk image" by TrID, +# "Adaptec CD Image File" by Adaptec CD Creator 2.1.082 1995-1996 and +# "Easy CD/DVD Creator image" by PowerISO 8.5 +>8 string imag \b, Easy CD Creator disk image +#!:mime application/octet-stream +#!:mime application/x-riff +!:mime application/x-corel-cif +!:ext cif +# contains also 2 strings disc info +# look for ISO 9660 CD-ROM tag handled by ./filesystems +>>32769 search/4565/s CD001 \b; with +>>>&-32769 use cdrom +# From: Joerg Jenderek # URL: https://en.wikipedia.org/wiki/CorelDRAW # Reference: http://fileformats.archiveteam.org/wiki/CorelDRAW # Note: Since version 3 CorelDraw Pictures are RIFF based diff --git a/magic/Magdir/rpm b/magic/Magdir/rpm index 9a795f841ade..e9dd8c80888b 100644 --- a/magic/Magdir/rpm +++ b/magic/Magdir/rpm @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: rpm,v 1.12 2013/01/11 16:45:23 christos Exp $ +# $File: rpm,v 1.13 2023/10/31 21:46:28 christos Exp $ # # RPM: file(1) magic for Red Hat Packages Erik Troan (ewt@redhat.com) # @@ -28,6 +28,11 @@ >>8 beshort 16 PowerPC64 >>8 beshort 17 SuperH >>8 beshort 18 Xtensa +>>8 beshort 19 AArch64 +>>8 beshort 20 MIPSr6 +>>8 beshort 21 MIPS64r6 +>>8 beshort 22 RISC-V64 +>>8 beshort 23 LoongArch64 >>8 beshort 255 noarch #delta RPM Daniel Novotny (dnovotny@redhat.com) @@ -42,4 +47,9 @@ >>8 beshort 16 PowerPC64 >>8 beshort 17 SuperH >>8 beshort 18 Xtensa +>>8 beshort 19 AArch64 +>>8 beshort 20 MIPSr6 +>>8 beshort 21 MIPS64r6 +>>8 beshort 22 RISC-V64 +>>8 beshort 23 LoongArch64 >>10 string x %s diff --git a/magic/Magdir/sgml b/magic/Magdir/sgml index fb698a54a616..f7327b45961a 100644 --- a/magic/Magdir/sgml +++ b/magic/Magdir/sgml @@ -1,45 +1,49 @@ #------------------------------------------------------------------------------ -# $File: sgml,v 1.48 2023/01/18 16:10:21 christos Exp $ +# $File: sgml,v 1.53 2024/11/10 14:48:55 christos Exp $ # Type: SVG Vectorial Graphics # From: Noel Torres <tecnico@ejerciciosresueltos.com> -0 string \<?xml\ version= +0 string/bt \<?xml\ version= >14 regex ['"\ \t]*[0-9.]+['"\ \t]* >>19 search/4096 \<svg SVG Scalable Vector Graphics image +!:strength +50 !:mime image/svg+xml !:ext svg >>19 search/4096 \<gnc-v2 GnuCash file !:mime application/x-gnucash -0 string \<svg SVG Scalable Vector Graphics image +0 string/bt \<svg SVG Scalable Vector Graphics image !:mime image/svg+xml !:ext svg -# Sitemap file -0 string/t \<?xml\ version= >14 regex ['"\ \t]*[0-9.]+['"\ \t]* +# Sitemap file >>19 search/4096 \<urlset XML Sitemap document text !:mime application/xml-sitemap +# XML-based format representing braille pages in a digital format. +# +# Specification: +# http://files.pef-format.org/specifications/pef-2008-1/pef-specification.html +# +# Simon Aittamaa <simon.aittamaa@gmail.com> +>>19 search/4096 \<pef Portable Embosser Format +!:mime application/x-pef+xml + # OpenStreetMap XML (.osm) # https://wiki.openstreetmap.org/wiki/OSM_XML # From: Markus Heidelberg <markus.heidelberg@web.de> -0 string \<?xml\ version= ->14 regex ['"\ \t]*[0-9.]+['"\ \t]* >>19 search/4096 \<osm OpenStreetMap XML data # xhtml -0 string/t \<?xml\ version=" >19 search/4096/cWbt \<!doctype\ html XHTML document text >>15 string >\0 (version %.3s) -!:mime text/html -0 string/t \<?xml\ version=' ->19 search/4096/cWbt \<!doctype\ html XHTML document text ->>15 string >\0 (version %.3s) -!:mime text/html -0 string/t \<?xml\ version=" ->19 search/4096/cWbt \<html broken XHTML document text +!:strength + 15 +!:mime application/xhtml+xml + +>19 search/4096/cWbt \<html\ xmlns= XHTML document text >>15 string >\0 (version %.3s) -!:mime text/html +!:mime application/xhtml+xml + #------------------------------------------------------------------------------ # sgml: file(1) magic for Standard Generalized Markup Language @@ -53,11 +57,14 @@ # avoid misdetection as JavaScript 0 string/cWt \<!doctype\ html HTML document text !:mime text/html +!:strength + 30 0 string/ct \<html> HTML document text !:mime text/html +!:strength + 30 0 string/ct \<!-- >&0 search/4096/cWt \<!doctype\ html HTML document text !:mime text/html +!:strength + 30 >&0 search/4096/ct \<html> HTML document text !:mime text/html @@ -65,69 +72,68 @@ # https://www.w3.org/TR/SVG/single-page.html 0 search/4096/cWbt \<!doctype\ svg SVG XML document !:mime image/svg+xml -!:strength + 15 +!:strength + 30 0 search/4096/cwt \<head\> HTML document text !:mime text/html -!:strength + 15 +!:strength + 30 0 search/4096/cWt \<head\ HTML document text !:mime text/html -!:strength + 15 +!:strength + 30 0 search/4096/cwt \<title\> HTML document text !:mime text/html -!:strength + 15 +!:strength + 30 0 search/4096/cWt \<title\ HTML document text !:mime text/html -!:strength + 15 +!:strength + 30 0 search/4096/cwt \<html\> HTML document text !:mime text/html -!:strength + 15 +!:strength + 30 0 search/4096/cWt \<html\ HTML document text !:mime text/html -!:strength + 15 +!:strength + 30 0 search/4096/cwt \<script\> HTML document text !:mime text/html -!:strength + 15 +!:strength + 30 0 search/4096/cWt \<script\ HTML document text !:mime text/html -!:strength + 15 +!:strength + 30 0 search/4096/cwt \<style\> HTML document text !:mime text/html -!:strength + 15 +!:strength + 30 0 search/4096/cWt \<style\ HTML document text !:mime text/html -!:strength + 15 +!:strength + 30 0 search/4096/cwt \<table\> HTML document text !:mime text/html -!:strength + 15 +!:strength + 30 0 search/4096/cWt \<table\ HTML document text !:mime text/html -!:strength + 15 +!:strength + 30 0 search/4096/cwt \<a\ href= HTML document text !:mime text/html -!:strength + 15 +!:strength + 30 + +# Microsoft HTML Application (HTA) +# https://learn.microsoft.com/en-us/previous-versions//ms536496(v=vs.85) +0 search/4096/cWt \<hta:application\ Microsoft HTML Application (HTA) +!:mime application/hta +!:ext hta +!:strength + 50 # Extensible markup language (XML), a subset of SGML # from Marc Prud'hommeaux (marc@apocalypse.org) 0 search/1/cwt \<?xml XML document text !:mime text/xml -!:strength + 15 -0 string/t \<?xml\ version\ " XML -!:mime text/xml -!:strength + 15 +!:strength + 30 0 string/t \<?xml\ version=" XML !:mime text/xml -!:strength + 15 ->15 string/t >\0 %.3s document text ->>23 search/1 \<xsl:stylesheet (XSL stylesheet) ->>24 search/1 \<xsl:stylesheet (XSL stylesheet) -0 string/t \<?xml\ version=' XML -!:mime text/xml -!:strength + 15 +!:strength + 30 >15 string/t >\0 %.3s document text >>23 search/1 \<xsl:stylesheet (XSL stylesheet) >>24 search/1 \<xsl:stylesheet (XSL stylesheet) + 0 search/1/wt \<?XML broken XML document text !:mime text/xml !:strength - 10 @@ -146,16 +152,6 @@ 0 search/1 #\ Netscape\ HTTP\ Cookie\ File Netscape cookie text 0 search/1 #\ KDE\ Cookie\ File Konqueror cookie text -# XML-based format representing braille pages in a digital format. -# -# Specification: -# http://files.pef-format.org/specifications/pef-2008-1/pef-specification.html -# -# Simon Aittamaa <simon.aittamaa@gmail.com> -0 string \<?xml\ version= ->14 regex ['"\ \t]*[0-9.]+['"\ \t]* ->>19 search/4096 \<pef Portable Embosser Format -!:mime application/x-pef+xml # https://www.qgis.org/en/site/ 0 string \<!DOCTYPE\040qgis QGIS XML document diff --git a/magic/Magdir/sharc b/magic/Magdir/sharc index e54088bc8f75..85fe125017ff 100644 --- a/magic/Magdir/sharc +++ b/magic/Magdir/sharc @@ -1,6 +1,6 @@ #------------------------------------------------------------------------ -# $File: sharc,v 1.8 2017/03/17 21:35:28 christos Exp $ +# $File: sharc,v 1.9 2024/09/04 19:06:12 christos Exp $ # file(1) magic for sharc files # # SHARC DSP, MIDI SysEx and RiscOS filetype definitions added by @@ -19,5 +19,5 @@ 0 string .system SHARC architecture file 0 leshort 0x521C SHARC COFF binary ->2 leshort >1 , %d sections ->>12 lelong >0 , not stripped +>2 leshort >1 \b, %d sections +>>12 lelong >0 \b, not stripped diff --git a/magic/Magdir/sniffer b/magic/Magdir/sniffer index 751d19737662..d5cf63d509e6 100644 --- a/magic/Magdir/sniffer +++ b/magic/Magdir/sniffer @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: sniffer,v 1.34 2022/12/14 18:27:36 christos Exp $ +# $File: sniffer,v 1.36 2024/06/16 15:09:26 christos Exp $ # sniffer: file(1) magic for packet capture files # # From: guy@alum.mit.edu (Guy Harris) @@ -78,8 +78,8 @@ # # "libpcap" capture files. # https://www.tcpdump.org/manpages/pcap-savefile.5.html -# (We call them "tcpdump capture file(s)" for now, as "tcpdump" is -# the main program that uses that format, but there are other programs +# (We call them "libpcap capture file(s)", as "libpcap" is +# the first library that uses that format, but there are other programs # that use "libpcap", or that use the same capture file format.) # 0 name pcap-be @@ -198,7 +198,7 @@ >20 belong&0x03FFFFFF 204 (PPP with direction pseudo-header >20 belong&0x03FFFFFF 205 (Cisco HDLC with direction pseudo-header >20 belong&0x03FFFFFF 206 (Frame Relay with direction pseudo-header ->20 belong&0x03FFFFFF 209 (Linux IPMB +>20 belong&0x03FFFFFF 209 (Linux I2C >20 belong&0x03FFFFFF 215 (802.15.4 with non-ASK PHY header >20 belong&0x03FFFFFF 216 (Linux evdev events >20 belong&0x03FFFFFF 219 (MPLS with label as link-layer header diff --git a/magic/Magdir/sql b/magic/Magdir/sql index 00f36179f8a5..d8cdfbf165b3 100644 --- a/magic/Magdir/sql +++ b/magic/Magdir/sql @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: sql,v 1.26 2023/04/29 17:26:58 christos Exp $ +# $File: sql,v 1.27 2023/08/19 15:33:04 christos Exp $ # sql: file(1) magic for SQL files # # From: "Marty Leisner" <mleisner@eng.mc.xerox.com> @@ -100,6 +100,7 @@ # URL: https://en.wikipedia.org/wiki/SQLite # Reference: https://www.sqlite.org/fileformat.html # Update: Joerg Jenderek +# TODO: missing extensions for Bentley Systems and Esri Spatially-Enabled Database # Version 3 of SQLite allows applications to embed their own "user version" # number in the database at offset 60. Later, SQLite added an "application id" # at offset 68 that is preferred over "user version" for indicating the @@ -110,7 +111,6 @@ >16 ubeshort >0 SQLite 3.x # deprecated #!:mime application/x-sqlite3 -!:mime application/vnd.sqlite3 # seldom found extension sqlite3 like in SyncData.sqlite3 # db # db3 like: AddrBook.db3 cgipcrvp.db3 @@ -119,14 +119,88 @@ # SQLite database weewx.sdb used by weather software weewx # https://www.weewx.com/docs/usersguide.htm # Avira Antivir use extension "dbe" like in avevtdb.dbe, avguard_tchk.dbe +# ide is used in storage.ide +# localstorage like in Enigma2 http_itv.ard.de_0.localstorage +# xowa like in home-html.user.xowa http://fileformats.archiveteam.org/wiki/XOWA +# sqlar like in sqlar-src-4824e73896.sqlar http://fileformats.archiveteam.org/wiki/SQLite_Archive +# sketch http://fileformats.archiveteam.org/wiki/Sketch +# ftb http://fileformats.archiveteam.org/wiki/MyHeritage_Family_Tree_Builder +# lrcat http://fileformats.archiveteam.org/wiki/Lightroom_catalog +# without suffix like in "Diagnostic Data" # Unfortunately extension sqlite also used for other databases starting with string # "TTCONTAINER" like in tracks.sqlite contentconsumer.sqlite contentproducerrepository.sqlite # and with string "ZV-zlib" in like extra.sqlite ->>68 belong !0x5CDE09EF database -!:ext sqlite/sqlite3/db/db3/dbe/sdb/help +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/m/maple-sqlite.trid.xml >>68 belong =0x5CDE09EF database # maple is used for Maple Workbook !:ext maple +# From: Joerg Jenderek +# URL: https://en.wikipedia.org/wiki/Audacity_(audio_editor) +# http://fileformats.archiveteam.org/wiki/Audacity_Project_Format +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/a/aup3.trid.xml +# Note: called "Audacity 3 Project" by TrID and "Audacity Project File" version 3.x by DROID via PUID fmt/1826 +# with user version 03000000h whereas older versions *.AUP are not SQLite based +>>68 belong =0x41554459 database +!:mime application/x-audacity-project+sqlite3 +!:ext aup3 +# From: Joerg Jenderek +# URL: http://fileformats.archiveteam.org/wiki/TeXnicard +# Reference: http://fileformats.archiveteam.org/wiki/TeXnicard_card_database +# Note: no examples found +>>68 belong =0x6A035744 database +!:mime application/vnd.sqlite3 +!:ext db +# Update: Joerg Jenderek +# URL: http://fileformats.archiveteam.org/wiki/Fossil_repository_database +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/f/fossil.trid.xml +# Note: called "Fossil repository data base" by TrID +>>68 belong =0x0F055111 database +!:mime application/vnd.sqlite3 +!:ext fossil/fsl +# URL: http://fileformats.archiveteam.org/wiki/Fossil_checkout_database +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/f/fossil-checkout.trid.xml +# Note: called "Fossil checkout data base" by TrID +>>68 belong =0x0F055112 database +!:mime application/vnd.sqlite3 +# name _FOSSIL_ on Windows or .fslckout else +!:ext /fslckout +# Update: Joerg Jenderek +# URL: http://fileformats.archiveteam.org/wiki/Fossil_configuration_database +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/f/fossil-config.trid.xml +# Note: called "Fossil configuration data base" by TrID +>>68 belong =0x0F055113 database +!:mime application/vnd.sqlite3 +# %LOCALAPPDATA%\_fossil on Windows and ~/.fossil or fossil.db else +!:ext /fossil/db +# Update: Joerg Jenderek +# URL: http://fileformats.archiveteam.org/wiki/GeoPackage +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/g/gpkg-v1.trid.xml +# Note: called "GeoPackage (v1)" by TrID and "OGC GeoPackage" version 1.0-1.31 by DROID via PUID fmt/1700 +# with GP10 application id +>>68 belong =0x47503130 database +# https://www.iana.org/assignments/media-types/application/geopackage+sqlite3 +!:mime application/geopackage+sqlite3 +# https://github.com/opengeospatial/ets-gpkg12/blob/master/src/test/resources/gpkg/bluemarble.gpkg +!:ext gpkg +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/g/gpkg-v12.trid.xml +# Note: called "GeoPackage (v1.2)" by TrID and "OGC GeoPackage" version 1.0-1.31 by DROID via PUID fmt/1700 +# with GPKG application id +>>68 belong =0x47504B47 database +!:mime application/geopackage+sqlite3 +!:ext gpkg +# Update: Joerg Jenderek +# URL: https://github.com/mapbox/mbtiles-spec/tree/master +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/m/mbtiles-MPBX.trid.xml +# Note: called "MBTiles tileset (MPBX)" by TrID and many samples without application id MPBX like +# https://ftp.gwdg.de/pub/misc/openstreetmap/openseamap/charts/mbtiles/OSM-OpenCPN2-MagellanStrait.mbtiles +>>68 belong =0x4D504258 database +!:mime application/vnd.sqlite3 +!:ext mbtiles +>>68 default x database +!:mime application/vnd.sqlite3 +# no examples found with s3db sl3 suffix +!:ext /sqlite/sqlite3/db/db3/dbe/sdb/help/ide/localstorage/sqlar/xowa/mbtiles +# GRR: the line above only works if in ../../src/file.h FILE_MAGICSIZE ext[] are raised or you get >>60 belong =0x5f4d544e (Monotone source repository) # if no known user version then check for Application IDs with default clause >>60 belong !0x5f4d544e @@ -143,17 +217,24 @@ >>>68 belong =0x4d504258 (MBTiles tileset) # https://www.maplesoft.com/support/help/errors/view.aspx?path=Formats/Maple >>>68 belong =0x5CDE09EF (Maple Workbook) +# AUDY Audacity Project File +>>>68 belong =0x41554459 (Audacity Project) +>>>68 belong =0x6A035744 (TeXnicard card database) # unknown application ID >>>68 default x >>>>68 belong !0 \b, application id %u # The "user version" as read and set by the user_version pragma like: -# 1 2 4 5 7 9 10 25 36 43 53 400 416 131073 131074 131075 +# 1 2 4 5 7 9 10 25 36 43 53 400 416 131073 131074 131075 50331648 >>60 belong !0 \b, user version %d -# SQLITE_VERSION_NUMBER like: 0 3008011 3016002 3007014 3017000 3022000 3028000 3031001 +# expressed as hexadecimal because some people mention version number in hexadecimal with marking that item +>>>60 belong x (%#x) +# SQLITE_VERSION_NUMBER like: 0 3007014 3008011 3016002 3017000 3022000 3028000 3031001 3032003 3035005 >>96 belong x \b, last written using SQLite version %d # database page size in bytes; a power of two between 512 and 32768, or 1 for 65536 # like: 512 1024 often 4096 32768 ->>16 ubeshort !4096 \b, page size %u +>>16 ubeshort !4096 \b, page size +>>>16 ubeshort !1 %u +>>>16 ubeshort =1 65536 # File format write version. 1 for legacy; 2 for WAL; 0 for corruptDB.sqlite >>18 ubyte !1 \b, writer version %u # File format read version. 1 for legacy; 2 for WAL; 4 for corruptDB.sqlite diff --git a/magic/Magdir/ssh b/magic/Magdir/ssh index 56b28a8488ea..84d3817cbd33 100644 --- a/magic/Magdir/ssh +++ b/magic/Magdir/ssh @@ -1,19 +1,64 @@ # Type: OpenSSH key files # From: Nicolas Collignon <tsointsoin@gmail.com> +# Update: Joerg Jenderek +# URL: https://en.wikipedia.org/wiki/Secure_Shell_Protocol 0 string SSH\040PRIVATE\040KEY OpenSSH RSA1 private key, >28 string >\0 version %s 0 string -----BEGIN\040OPENSSH\040PRIVATE\040KEY----- OpenSSH private key +!:mime application/x-pem-file # https://www.rfc-editor.org/rfc/rfc5958 0 string -----BEGIN\040PRIVATE\040KEY----- OpenSSH private key (no password) +#!:mime text/plain +!:mime text/x-ssh-private-key +!:ext key 0 string -----BEGIN\040ENCRYPTED\040PRIVATE\040KEY----- OpenSSH private key (with password) +# https://download.qemu.org/qemu-9.0.0.tar.xz +# qemu-9.0.0/roms/skiboot/libstb/crypto/mbedtls/tests/data_files/format_gen.pub +0 string -----BEGIN\040PUBLIC\040KEY----- OpenSSH public key +#!:mime text/plain +!:mime text/x-ssh-public-key +!:ext pub +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/p/pub-ssh-dss.trid.xml +# Note: called "SSH-DSS Public key" by TrID 0 string ssh-dss\040 OpenSSH DSA public key +#!:mime text/plain +!:mime text/x-ssh-public-key +!:ext pub +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/p/pub-ssh-rsa.trid.xml +# Note: called "SSH-RSA Public key" by TrID 0 string ssh-rsa\040 OpenSSH RSA public key +#!:mime text/plain +!:mime text/x-ssh-public-key +!:ext pub 0 string ecdsa-sha2-nistp256 OpenSSH ECDSA public key +#!:mime text/plain +!:mime text/x-ssh-public-key +!:ext pub +# https://cvsweb.openbsd.org/src/usr.bin/ssh/PROTOCOL.u2f?annotate=HEAD +0 string sk-ecdsa-sha2-nistp256@openssh.com OpenSSH U2F ECDSA public key +#!:mime text/plain +!:mime text/x-ssh-public-key +!:ext pub 0 string ecdsa-sha2-nistp384 OpenSSH ECDSA public key +#!:mime text/plain +!:mime text/x-ssh-public-key +!:ext pub 0 string ecdsa-sha2-nistp521 OpenSSH ECDSA public key +#!:mime text/plain +!:mime text/x-ssh-public-key +!:ext pub 0 string ssh-ed25519 OpenSSH ED25519 public key +#!:mime text/plain +!:mime text/x-ssh-public-key +!:ext pub +0 string sk-ssh-ed25519@openssh.com OpenSSH U2F ED25519 public key +#!:mime text/plain +!:mime text/x-ssh-public-key +!:ext pub + + 0 string SSHKRL\n\0 >8 ubelong 1 OpenSSH key/certificate revocation list, format %u diff --git a/magic/Magdir/ssl b/magic/Magdir/ssl index 230939239323..2d0e77f7234c 100644 --- a/magic/Magdir/ssl +++ b/magic/Magdir/ssl @@ -1,17 +1,37 @@ #------------------------------------------------------------------------------ -# $File: ssl,v 1.5 2017/12/29 04:00:07 christos Exp $ +# $File: ssl,v 1.7 2024/06/10 23:23:55 christos Exp $ # ssl: file(1) magic for SSL file formats # Type: OpenSSL certificates/key files # From: Nicolas Collignon <tsointsoin@gmail.com> 0 string -----BEGIN\040CERTIFICATE----- PEM certificate +!:mime application/x-pem-file 0 string -----BEGIN\040CERTIFICATE\040REQ PEM certificate request +!:mime application/x-pem-file +# Update: Joerg Jenderek +# Reference: https://github.com/openssl/openssl/blob/master/include/openssl/pem.h +# http://mark0.net/download/triddefs_xml.7z/defs/k/key-rsa-pvt.trid.xml +# Note: called "ASCII armored RSA Private Key" by TrID 0 string -----BEGIN\040RSA\040PRIVATE PEM RSA private key +#!:mime text/plain +!:mime text/x-ssl-private-key +!:ext key/priv +0 string -----BEGIN\040RSA\040PRIVATE PEM RSA private key +!:mime application/x-pem-file 0 string -----BEGIN\040DSA\040PRIVATE PEM DSA private key +!:mime application/x-pem-file 0 string -----BEGIN\040EC\040PRIVATE PEM EC private key +!:mime application/x-pem-file 0 string -----BEGIN\040ECDSA\040PRIVATE PEM ECDSA private key +!:mime application/x-pem-file +# From: Joerg Jenderek +# Reference: https://github.com/openssl/openssl/blob/master/include/openssl/pem.h +0 string -----BEGIN\040RSA\040PUBLIC\040KEY----- PEM RSA public key +#!:mime text/plain +!:mime text/x-ssl-public-key +!:ext pub # From Luc Gommans # OpenSSL enc file (recognized by a magic string preceding the password's salt) diff --git a/magic/Magdir/sun b/magic/Magdir/sun index df83834d2dd1..14fa6af4b473 100644 --- a/magic/Magdir/sun +++ b/magic/Magdir/sun @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: sun,v 1.28 2019/04/19 00:42:27 christos Exp $ +# $File: sun,v 1.29 2024/03/31 15:06:56 christos Exp $ # sun: file(1) magic for Sun machines # # Values for big-endian Sun (MC680x0, SPARC) binaries on pre-5.x @@ -9,13 +9,14 @@ # are in aout, as they're indistinguishable from other big-endian # 32-bit a.out files. # -0 belong&077777777 0600413 a.out SunOS SPARC demand paged ->0 byte &0x80 ->>20 belong <4096 shared library ->>20 belong =4096 dynamically linked executable ->>20 belong >4096 dynamically linked executable ->0 byte ^0x80 executable ->16 belong >0 not stripped +# Note: already handled as "SPARC demand paged" by ./bsdi +#0 belong&077777777 0600413 a.out SunOS SPARC demand paged +#>0 byte &0x80 +#>>20 belong <4096 shared library +#>>20 belong =4096 dynamically linked executable~ +#>>20 belong >4096 dynamically linked executable +#>0 byte ^0x80 executable +#>16 belong >0 not stripped 0 belong&077777777 0600410 a.out SunOS SPARC pure >0 byte &0x80 dynamically linked executable diff --git a/magic/Magdir/symbos b/magic/Magdir/symbos index c97a42e0c74d..0a79ec4c7550 100644 --- a/magic/Magdir/symbos +++ b/magic/Magdir/symbos @@ -1,6 +1,7 @@ #------------------------------------------------------------------------------ -# msx: file(1) magic for the SymbOS operating system +# $File: symbos,v 1.3 2024/06/10 23:09:52 christos Exp $ +# symbos: file(1) magic for the SymbOS operating system # http://www.symbos.de # Fabio R. Schmidlin <frs@pop.com.br> diff --git a/magic/Magdir/terminfo b/magic/Magdir/terminfo index 41704eb55946..647cdfeeb137 100644 --- a/magic/Magdir/terminfo +++ b/magic/Magdir/terminfo @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: terminfo,v 1.13 2022/11/21 22:25:37 christos Exp $ +# $File: terminfo,v 1.14 2024/09/04 19:06:12 christos Exp $ # terminfo: file(1) magic for terminfo # # URL: https://invisible-island.net/ncurses/man/term.5.html @@ -48,12 +48,12 @@ # Rather than SVr4, Solaris "xcurses" writes this header: 0 regex \^MAX=[0-9]+,[0-9]+$ >1 regex \^BEG=[0-9]+,[0-9]+$ ->2 regex \^SCROLL=[0-9]+,[0-9]+$ ->3 regex \^VMIN=[0-9]+$ ->4 regex \^VTIME=[0-9]+$ ->5 regex \^FLAGS=0x[[:xdigit:]]+$ ->6 regex \^FG=[0-9],[0-9]+$ ->7 regex \^BG=[0-9]+,[0-9]+, Solaris xcurses screen image +>>2 regex \^SCROLL=[0-9]+,[0-9]+$ +>>>3 regex \^VMIN=[0-9]+$ +>>>>4 regex \^VTIME=[0-9]+$ +>>>>>5 regex \^FLAGS=0x[[:xdigit:]]+$ +>>>>>>6 regex \^FG=[0-9],[0-9]+$ +>>>>>>>7 regex \^BG=[0-9]+,[0-9]+, Solaris xcurses screen image # # ncurses5 (and before) did not use a magic number, making screen dumps "data". # ncurses6 (2015) uses this format, ignoring byte-order diff --git a/magic/Magdir/uf2 b/magic/Magdir/uf2 index 49a86d7640c1..adaee0611f83 100644 --- a/magic/Magdir/uf2 +++ b/magic/Magdir/uf2 @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: uf2,v 1.3 2021/04/28 01:00:31 christos Exp $ +# $File: uf2,v 1.6 2024/09/04 19:08:08 christos Exp $ # uf2: file(1) magic for UF2 firmware image files # # https://github.com/microsoft/uf2 @@ -28,6 +28,8 @@ ### BEGIN UF2 FAMILIES >>28 lelong 0x00ff6919 ST STM32L4xx >>28 lelong 0x04240bdf ST STM32L5xx +>>28 lelong 0x06d1097b ST STM32F411xC +>>28 lelong 0x11de784a M0SENSE BL702 >>28 lelong 0x16573617 Microchip (Atmel) ATmega32 >>28 lelong 0x1851780a Microchip (Atmel) SAML21 >>28 lelong 0x1b57745f Nordic NRF52 @@ -35,31 +37,63 @@ >>28 lelong 0x1e1f432d ST STM32L1xx >>28 lelong 0x202e3a91 ST STM32L0xx >>28 lelong 0x21460ff0 ST STM32WLxx +>>28 lelong 0x22e0d6fc Realtek AmebaZ RTL8710B >>28 lelong 0x2abc77ec NXP LPC55xx +>>28 lelong 0x2b88d29c ESP32-C2 +>>28 lelong 0x2dc309c5 ST STM32F411xE >>28 lelong 0x300f5633 ST STM32G0xx >>28 lelong 0x31d228c6 GD32F350 +>>28 lelong 0x332726f6 ESP32-H2 +>>28 lelong 0x3379CFE2 Realtek AmebaD RTL8720D +>>28 lelong 0x3d308e94 ESP32-P4 +>>28 lelong 0x4b684d71 Sipeed MaixPlay-U4 (BL618) >>28 lelong 0x4c71240a ST STM32G4xx +>>28 lelong 0x4f6ace52 LISTENAI CSK300x/400x >>28 lelong 0x4fb2d5bd NXP i.MX RT10XX +>>28 lelong 0x51e903a8 Xradiotech 809 >>28 lelong 0x53b80f00 ST STM32F7xx +>>28 lelong 0x540ddf62 ESP32-C6 >>28 lelong 0x55114460 Microchip (Atmel) SAMD51 ->>28 lelong 0x57755a57 ST STM32F401 +>>28 lelong 0x57755a57 ST STM32F4xx >>28 lelong 0x5a18069b Cypress FX2 >>28 lelong 0x5d1a0a2e ST STM32F2xx >>28 lelong 0x5ee21072 ST STM32F103 +>>28 lelong 0x621e937a Nordic NRF52833 >>28 lelong 0x647824b6 ST STM32F0xx +>>28 lelong 0x675a40b0 Beken 7231U/7231T >>28 lelong 0x68ed2b88 Microchip (Atmel) SAMD21 +>>28 lelong 0x699b62ec WCH CH32V2xx and CH32V3xx +>>28 lelong 0x6a82cc42 Beken 7251/7252 >>28 lelong 0x6b846188 ST STM32F3xx >>28 lelong 0x6d0922fa ST STM32F407 >>28 lelong 0x6db66082 ST STM32H7xx +>>28 lelong 0x6e7348a8 LISTENAI CSK60xx +>>28 lelong 0x6f752678 Nordic NRF52832xxAB >>28 lelong 0x70d16653 ST STM32WBxx +>>28 lelong 0x72721d4e Nordic NRF52832xxAA +>>28 lelong 0x77d850c4 ESP32-C61 +>>28 lelong 0x7b3ef230 Beken 7231N +>>28 lelong 0x7be8976d Renesas RA4M1 >>28 lelong 0x7eab61ed ESP8266 >>28 lelong 0x7f83e793 NXP KL32L2x >>28 lelong 0x8fb060fe ST STM32F407VG +>>28 lelong 0x9517422f Renesas RZ/A1LU (R7S7210xx) +>>28 lelong 0x9af03e33 GigaDevice GD32VF103 +>>28 lelong 0x9fffd543 Realtek Ameba1 RTL8710A +>>28 lelong 0xa0c97b8e ArteryTek AT32F415 >>28 lelong 0xada52840 Nordic NRF52840 >>28 lelong 0xbfdd4eee ESP32-S2 >>28 lelong 0xc47e5767 ESP32-S3 >>28 lelong 0xd42ba06c ESP32-C3 +>>28 lelong 0xde1270b7 Boufallo 602 +>>28 lelong 0xe08f7564 Realtek AmebaZ2 RTL8720C >>28 lelong 0xe48bff56 Raspberry Pi RP2040 +>>28 lelong 0xe48bff57 Raspberry Pi MC: Absolute (unpartitioned) download +>>28 lelong 0xe48bff58 Raspberry Pi MC: Data partition download +>>28 lelong 0xe48bff59 Raspberry Pi RP2350, Secure Arm image +>>28 lelong 0xe48bff5a Raspberry Pi RP2350, RISC-V image +>>28 lelong 0xe48bff5b Raspberry Pi RP2350, Non-secure Arm image +>>28 lelong 0xf71c0343 ESP32-C5 ### END UF2 FAMILIES >>28 default x @@ -68,5 +102,5 @@ >>28 lelong x %#08x >8 lelong &0x4000 \b, MD5 checksum present >8 lelong &0x8000 \b, extension tags present ->12 lelong x \b, address %#08x +>12 lelong x \b, base address %#08x >24 lelong x \b, %u total blocks diff --git a/magic/Magdir/uxn b/magic/Magdir/uxn new file mode 100644 index 000000000000..a7910c550bc4 --- /dev/null +++ b/magic/Magdir/uxn @@ -0,0 +1,18 @@ + +#------------------------------------------------------------------------------ +# $File: uxn,v 1.1 2024/07/30 22:25:24 christos Exp $ +# uxn: file(1) magic for Uxn ROM files +# +# https://100r.co/site/uxn.html +# https://wiki.xxiivv.com/site/uxn.html +# +# Created by Samuel Dionne-Riel <samuel@dionne-riel.com> + +# https://wiki.xxiivv.com/site/metadata.html +0x00 byte =0xa0 +>0x01 ubeshort x +>>0x03 byte =0x80 +>>>0x04 byte =0x06 +>>>>0x05 byte =0x37 Varvara Uxn ROM +>>>>>0x01 ubeshort x with metadata at 0x%x +>>>>>>(0x01.S-0x0ff) string x (%s) diff --git a/magic/Magdir/varied.script b/magic/Magdir/varied.script index 74b1b2276c51..e6090b49f43f 100644 --- a/magic/Magdir/varied.script +++ b/magic/Magdir/varied.script @@ -1,7 +1,10 @@ #------------------------------------------------------------------------------ -# $File: varied.script,v 1.15 2022/10/18 13:01:30 christos Exp $ +# $File: varied.script,v 1.16 2024/02/04 19:26:02 christos Exp $ # varied.script: file(1) magic for various interpreter scripts +0 string #![ Rust Source file +!:ext rs + 0 string/wt #!\ a >&-1 string/T x %s script text executable !:strength / 3 diff --git a/magic/Magdir/vax b/magic/Magdir/vax index f3deffa59fa3..dbf455477338 100644 --- a/magic/Magdir/vax +++ b/magic/Magdir/vax @@ -1,13 +1,13 @@ #------------------------------------------------------------------------------ -# $File: vax,v 1.10 2019/10/04 18:07:46 christos Exp $ +# $File: vax,v 1.11 2024/02/29 03:42:40 christos Exp $ # vax: file(1) magic for VAX executable/object and APL workspace # 0 lelong 0101557 VAX single precision APL workspace 0 lelong 0101556 VAX double precision APL workspace # -# VAX a.out (BSD; others collide with 386 and other 32-bit little-endian +# VAX a.out (BSD; others collide with i386 and other 32-bit little-endian # executables, and are handled in aout) # 0 lelong 0420 a.out VAX demand paged (first page unmapped) pure executable diff --git a/magic/Magdir/virtual b/magic/Magdir/virtual index 3372020421a7..295dbd025d52 100644 --- a/magic/Magdir/virtual +++ b/magic/Magdir/virtual @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: virtual,v 1.17 2022/08/23 08:00:54 christos Exp $ +# $File: virtual,v 1.21 2024/09/04 19:09:00 christos Exp $ # From: James Nobis <quel@quelrod.net> # Microsoft hard disk images for: # Virtual Server @@ -135,8 +135,8 @@ # Reserved[4016] #>>0x10050 ulequad >0 \b, Reserved %#llx # VHDX_REGION_TABLE_HEADER Signature 0x69676572~regi at offset 192 KB and 256 KB ->0x30000 ulelong !0x69676572 \b, 1st region INVALID ->0x30000 ulelong =0x69676572 \b; region +>0x30000 ulelong !0x69676572 Microsoft Disk Image Extended, 1st region INVALID +>0x30000 ulelong =0x69676572 Microsoft Disk Image Extended; region # region Checksum. CRC-32C hash over the entire 64-KB table #>>0x30004 ulelong x \b, CRC %#x # The EntryCount specifies number of valid entries; Found 2; This must be =< 2047. @@ -299,9 +299,41 @@ >0 string >\0 (%s) >368 lequad x \b, %lld bytes +# From: Joerg Jenderek +# URL: https://www.virtualbox.org/manual/ch08.html#vboxmanage-modifynvram +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/n/nvram-virtualbox.trid.xml +# Note: called "VirtualBox saved (U)EFI BIOS settings" by TrID and +# verfied partly by VirtualBox version 7.0.12 `VBoxManage modifynvram <uuid|vmname> listvars` +# first 64 bytes seems to be constant +0 long 0 +>0x28 string _FVH +>>0x64 beshort 0xAA55 +>>>0 use virtualbox-nvram +# display information of virtualbox *.nvram +0 name virtualbox-nvram +>0x64 beshort x VirtualBox NVRAM file +#!:mime application/octet-stream +!:mime application/x-virtualbox-nvram +!:ext nvram + 0 string/b Bochs\ Virtual\ HD\ Image Bochs disk image, >32 string x type %s, >48 string x subtype %s 0 lelong 0x02468ace Bochs Sparse disk image +# QEMU replay image +# From: Alexandre Iooss <erdnaxe@crans.org> +# URL: https://www.qemu.org/docs/master/system/replay.html +# Reference: https://gitlab.com/qemu/qemu/-/blob/master/replay/replay.c +0 ubelong&0xFFFFFFF0 0x00e02000 +>3 byte >5 +>>4 quad 0 +>>>12 ulelong <40 QEMU replay +>>>>3 byte x \b, version %d +>>>>3 byte 6 (QEMU 2.10-2.11) +>>>>3 byte 7 (QEMU 2.12-4.1) +>>>>3 byte 8 (QEMU 4.2) +>>>>3 byte 9 (QEMU 5.0) +>>>>3 byte 10 (QEMU 5.1-7.0) +>>>>3 byte 12 (QEMU 7.1+) diff --git a/magic/Magdir/weak b/magic/Magdir/weak index 6dc1793c927e..404a67a50156 100644 --- a/magic/Magdir/weak +++ b/magic/Magdir/weak @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: weak,v 1.3 2024/06/10 23:09:52 christos Exp $ # weak: file(1) magic for very weak magic entries, disabled by default # # These entries are so weak that they might interfere identification of diff --git a/magic/Magdir/windows b/magic/Magdir/windows index f58ce3e5a511..2614e57f96be 100644 --- a/magic/Magdir/windows +++ b/magic/Magdir/windows @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: windows,v 1.63 2023/07/17 16:56:13 christos Exp $ +# $File: windows,v 1.67 2024/11/09 22:43:01 christos Exp $ # windows: file(1) magic for Microsoft Windows # # This file is mainly reserved for files where programs @@ -480,77 +480,131 @@ >>4 leshort 1 Windows # print non empty string above to avoid error message # Warning: Current entry does not yet have a description for adding a MIME type -!:mime application/winhelp -!:ext hlp +# not officially registered at IANA +#!:mime application/winhelp +#!:mime application/winhlp +!:mime application/x-winhelp # version Minor of help file format is hint for windows version ->>>2 leshort 0x0F 3.x ->>>2 leshort 0x15 3.0 ->>>2 leshort 0x21 3.1 ->>>2 leshort 0x27 x.y ->>>2 leshort 0x33 95 +# HC30 Windows 3.0 help file +>>>2 leshort 15 3.0 +# HC31 Windows 3.1 help file +>>>2 leshort 21 3.1 +# WMVC/MMVC media view file +>>>2 leshort 27 +# MVC or HCW 4.00 Windows 95 +>>>2 leshort 33 95 +# next line should not happen >>>2 default x y.z >>>>2 leshort x %#x # to complete message string like "MS Windows 3.x help file" ->>>2 leshort x help +>>>2 leshort !27 +# HLP or few MVB like NOTEPLAY.MVB +>>>>2 leshort x help +!:ext hlp +# URL: http://fileformats.archiveteam.org/wiki/Multimedia_Viewer_Book +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/m/mvb.trid.xml +# Note: called "Multimedia Viewer Book" by TrID and by DROID via PUID fmt/1800 +>>>2 leshort =27 Multimedia Viewer Book +!:ext mvb # GenDate often older than file creation date >>>6 ldate x \b, %s -# +# flags determine the compression +#>>>10 uleshort x \b, flags %#x +>>>2 leshort <17 +# HelpFileTitle +>>>>12 string x \b, title "%s" +>>>2 leshort >16 +# SYSTEMREC[].RecordType type of data in record; 1~help file title 2~COPYRIGHT 3~TOPICOFFSET Contents 4~Macro 5~*.ICO 6~HPJ-structure +#>>>>12 uleshort x \b, RecordType %u +# DataSize size of data +#>>>>14 uleshort x \b, DataSize %u +>>>>12 uleshort 1 +>>>>>14 pstring/h >\0 \b, title "%s" # Magic for HeLP files +# URL: http://fileformats.archiveteam.org/wiki/HLP_(WinHelp) +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/h/hlp.trid.xml +# Note: called "Windows HELP File" by TrID, "Windows Help File" by DROID via PUID fmt/474 and +# "WinHelp help file" by shared MIME-info database from freedesktop.org 0 lelong 0x00035f3f # ./windows (version 5.25) labeled the entry as "MS Windows 3.x help file" # file header magic 0x293B at DirectoryStart+9 >(4.l+9) uleshort 0x293B MS +# URL: http://fileformats.archiveteam.org/wiki/WinHelp_annotation +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/a/ann.trid.xml # look for @VERSION bmf.. like IBMAVW.ANN >>0xD4 string =\x62\x6D\x66\x01\x00 Windows help annotation !:mime application/x-winhelp !:ext ann >>0xD4 string !\x62\x6D\x66\x01\x00 -# "GID Help index" by TrID ->>>(4.l+0x65) string =|Pete Windows help Global Index +# "GID Help index" by TrID by gid.trid.xml +# sometimes at little higher offset like in corelap.GID +>>>(4.l+0x65) search/26 |Pete Windows help Global Index !:mime application/x-winhelp !:ext gid # HeLP Bookmark or -# "Windows HELP File" by TrID ->>>(4.l+0x65) string !|Pete +# Multimedia_Viewer_Book or +# "Windows HELP File" by TrID by hlp.trid.xml +>>>(4.l+0x65) default x # maybe there exist a cleaner way to detect HeLP fragments -# brute search for Magic 0x036C with matching Major maximal 7 iterations -# discapp.hlp ->>>>16 search/0x49AF/s \x6c\x03 +# brute search for Magic 0x036C with matching Major maximal 13 iterations +# https://sembiance.com/fileFormatSamples/document/multimediaViewerBook/viewerht.mvb +>>>>16 search/0x1bbc370/s \x6c\x03 >>>>>&0 use help-ver-date >>>>>&4 leshort !1 -# putty.hlp ->>>>>>&0 search/0x69AF/s \x6c\x03 +# viewerht.mvb +>>>>>>&-2 search/0x1c4b6f0/s \x6c\x03 >>>>>>>&0 use help-ver-date >>>>>>>&4 leshort !1 ->>>>>>>>&0 search/0x49AF/s \x6c\x03 +# https://sembiance.com/fileFormatSamples/document/multimediaViewerBook/clarkhow.mvb +>>>>>>>>&0 search/0x34ab80/s \x6c\x03 >>>>>>>>>&0 use help-ver-date >>>>>>>>>&4 leshort !1 ->>>>>>>>>>&0 search/0x49AF/s \x6c\x03 +>>>>>>>>>>&0 search/0x473ab0/s \x6c\x03 >>>>>>>>>>>&0 use help-ver-date >>>>>>>>>>>&4 leshort !1 ->>>>>>>>>>>>&0 search/0x49AF/s \x6c\x03 +>>>>>>>>>>>>&0 search/0x739680/s \x6c\x03 >>>>>>>>>>>>>&0 use help-ver-date >>>>>>>>>>>>>&4 leshort !1 ->>>>>>>>>>>>>>&0 search/0x49AF/s \x6c\x03 +>>>>>>>>>>>>>>&0 search/0x76c030/s \x6c\x03 >>>>>>>>>>>>>>>&0 use help-ver-date >>>>>>>>>>>>>>>&4 leshort !1 ->>>>>>>>>>>>>>>>&0 search/0x49AF/s \x6c\x03 +>>>>>>>>>>>>>>>>&0 search/0x805c80/s \x6c\x03 # GCC.HLP is detected after 7 iterations >>>>>>>>>>>>>>>>>&0 use help-ver-date -# this only happens if bigger hlp file is detected after used search iterations ->>>>>>>>>>>>>>>>>&4 leshort !1 Windows y.z help -!:mime application/winhelp -!:ext hlp +>>>>>>>>>>>>>>>>>&4 leshort !1 +>>>>>>>>>>>>>>>>>>&0 search/0x805c80/s \x6c\x03 +>>>>>>>>>>>>>>>>>>>&0 use help-ver-date +>>>>>>>>>>>>>>>>>>>&4 leshort !1 +>>>>>>>>>>>>>>>>>>>>&0 search/0xb63480/s \x6c\x03 +>>>>>>>>>>>>>>>>>>>>>&0 use help-ver-date +>>>>>>>>>>>>>>>>>>>>>&4 leshort !1 +>>>>>>>>>>>>>>>>>>>>>>&0 search/0xb7fe80/s \x6c\x03 +>>>>>>>>>>>>>>>>>>>>>>>&0 use help-ver-date +>>>>>>>>>>>>>>>>>>>>>>>&4 leshort !1 +>>>>>>>>>>>>>>>>>>>>>>>>&0 search/0xb8ade0/s \x6c\x03 +>>>>>>>>>>>>>>>>>>>>>>>>>&0 use help-ver-date +>>>>>>>>>>>>>>>>>>>>>>>>>&4 leshort !1 +>>>>>>>>>>>>>>>>>>>>>>>>>>&0 search/0x371d4/s \x6c\x03 +>>>>>>>>>>>>>>>>>>>>>>>>>>>&0 use help-ver-date +>>>>>>>>>>>>>>>>>>>>>>>>>>>&4 leshort !1 +>>>>>>>>>>>>>>>>>>>>>>>>>>>>&0 search/0x371d4/s \x6c\x03 +>>>>>>>>>>>>>>>>>>>>>>>>>>>>>&0 use help-ver-date +>>>>>>>>>>>>>>>>>>>>>>>>>>>>>&4 leshort !1 +# https://sembiance.com/fileFormatSamples/document/multimediaViewerBook/arivideo.mvb +>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>8 lelong !0xFFffFFff Windows Multimedia Viewer Book +!:mime application/x-winhelp +!:ext mvb # repeat search again or following default line does not work >>>>16 search/0x49AF/s \x6c\x03 -# remaining files should be HeLP Bookmark WinHlp32.BMK (XP 32-bit) or WinHlp32 (Windows 8.1 64-bit) +# remaining files should be HeLP Bookmark WinHlp32.BMK (XP 32-bit) or WinHlp32 (Windows 7 8.1 64-bit) +# typically found inside directory %LOCALAPPDATA%\Help >>>>16 default x Windows help Bookmark !:mime application/x-winhelp -!:ext bmk -## FirstFreeBlock normally FFFFFFFFh 10h for *ANN -##>>8 lelong x \b, FirstFreeBlock %#8.8x -# EntireFileSize ->>12 lelong x \b, %d bytes +!:ext /bmk +# DirectoryStart offset of FILEHEADER of internal directory +#>4 lelong x \b, DirectoryStart %8.8x +## FirstFreeBlock normally for *HLP FFFFFFFFh if no free list or 10h for *ANN +#>>8 lelong x \b, FirstFreeBlock %#8.8x ## ReservedSpace normally 042Fh AFh for *.ANN #>>(4.l) lelong x \b, ReservedSpace %#8.8x ## UsedSpace normally 0426h A6h for *.ANN @@ -581,6 +635,16 @@ #>>(4.l+43) ulelong x \b, TotalBtreeEntries %#8.8x ## pages of the B+ tree #>>(4.l+47) ubequad x \b, PageStart %#16.16llx +# GRR: offset is not reachable in few samples like STMMHLP.MVB because probably damaged file +# or DROID fmt-474-signature-id-748.hlp +# or for example run file command with higher --parameter bytes=30335189 +>(4.l+9) uleshort !0x293B MS Windows Multimedia Viewer Book +#!:mime application/octet-stream +!:ext mvb +# GRR: next line is not executed! +>>12 lelong x (damaged or use higher '-P bytes' option) +# EntireFileSize; biggest 1551334 for CORELDRW.HLP 30335189 for viewerht.mvb; smallest 28672 for open.mvb +>12 lelong x \b, %d bytes # start with colon or semicolon for comment line like Back2Life.cnt 0 regex \^(:|;) @@ -603,11 +667,22 @@ !:mime text/plain !:apple ????TEXT !:ext cnt -# +# URL: https://en.wikipedia.org/wiki/WinHelp +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/f/fts.trid.xml +# Note: called "Windows Help Full-Text Search index" by TrID # Windows creates a full text search from hlp file, if the user clicks the "Find" tab and enables keyword indexing 0 string tfMR MS Windows help Full Text Search index !:mime application/x-winhelp-fts !:ext fts +# path of corresponding MS Windows help like: "C:\CDCREATR\creatr32.hlp" "C:\PROGRAMME\IPHOTO PLUS 4\PROGRAMS\Guide.hlp" +>16 string >\0 for "%s" +# From: Joerg Jenderek +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/f/ftg-winhelp.trid.xml +# Note: called "Windows Help Full-Text search Group" by TrID +0 string gfMR MS Windows help Full Text search Group +!:mime application/x-winhelp-ftg +!:ext ftg +# path of corresponding FTS like: "C:\Windows\Help\winhlp32.FTS" >16 string >\0 for "%s" # Summary: Hyper terminal @@ -1475,7 +1550,7 @@ # Not null, but size terminated unicoded string >>>>>>>>(70.s) lestring16 x \b, name: %s # size of Media Label (104h) ->>>>>72 uleshort >0 +#>>>>>72 uleshort >0 # offset of Media Label (C4h,C6h,CCh) >>>>>74 uleshort >0 >>>>>>48 ubyte 1 @@ -1820,3 +1895,23 @@ # URL: https://learn.microsoft.com/en-us/previous-versions/windows/desktop/policy/registry-policy-file-format 0 string PReg >4 lelong x Group Policy Registry Policy, Version=%d + +# Microsoft Type Library Format (.TLB file) +# Stores metadata on calling COM APIs (method parameters/etc) +# Exists in two formats: the original (SLTG aka Type 1) and a newer format (MSFT aka Type 2) +# SLTG: https://www.nationalarchives.gov.uk/PRONOM/fmt/1601 +# MSFT: https://www.nationalarchives.gov.uk/PRONOM/fmt/1602 +# (Pronom claims these formats are due to Borland, but that appears to be incorrect, Microsoft invented them.) +# The MSFT format is documented here: https://gist.github.com/djhohnstein/e4a346ee1506895000ca0fa93e5a0024 +# Which is a copy of original: http://theircorp.byethost11.com/files/TypeLib.txt (but which displays incorrectly due to encoding issues) +# The MSFT format is generated by the Windows CreateTypeLib2 API: https://learn.microsoft.com/en-us/windows/win32/api/oleauto/nf-oleauto-createtypelib2 +# The SLTG format is generated by the Windows CreateTypeLib API: https://learn.microsoft.com/en-us/windows/win32/api/oleauto/nf-oleauto-createtypelib +# +# Note type libraries can also be embedded as resources inside executables/DLL. No attempt is made here to detect that scenario. + +# Legacy SLTG format +0 string SLTG +>-36 string TYPELIB Type Library (legacy SLTG format) + +# MSFT format +0 string MSFT\x02\x00\x01\x00 Type Library (MSFT format) diff --git a/magic/Magdir/wordprocessors b/magic/Magdir/wordprocessors index 3a2e1ceaa8ca..992c06727dbc 100644 --- a/magic/Magdir/wordprocessors +++ b/magic/Magdir/wordprocessors @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: wordprocessors,v 1.34 2023/01/24 20:13:40 christos Exp $ +# $File: wordprocessors,v 1.39 2024/11/09 23:26:33 christos Exp $ # wordprocessors: file(1) magic fo word processors. # ####### PWP file format used on Smith Corona Personal Word Processors: @@ -27,6 +27,28 @@ !:apple ????AWWP !:ext wps +# From: Joerg Jenderek +# URL: https://en.wikipedia.org/wiki/Microsoft_Publisher +# Reference: http://fileformats.archiveteam.org/wiki/Microsoft_Publisher +# Note: older non OLE 2 (./ole2compounddocs) Compound based version +0 ubelong =0xE7AC2C00 Microsoft Publisher (1.0) +#!:mime application/x-mspublisher +# Not registered at IANA but +# https://web.archive.org/web/20200930085807/https://reposcope.com/mimetype/application/vnd.ms-publisher +!:mime application/vnd.ms-publisher +!:ext pub + +# From: Joerg Jenderek +# URL: http://fileformats.archiveteam.org/wiki/COSMI_MultiMedia +# https://en.wikipedia.org/wiki/Cosmi_Corporation +# Reference: http://mark0.net/download/triddefs_xml.7z/defs/c/cosmi.trid.xml +# Note: called "COSMI document (generic)" by TrID +0 string/b LCP COSMI document +#!:mime application/octet-stream +!:mime application/x-cosmi +# BCD~Business Card Maker BRO~Brochure Magic CRD~Greeting Card Magic DTP~Print Perfect PUB~Desktop Publisher +!:ext bcd/bro/crd/dtp/pub/ + # Corel/WordPerfect # URL: https://en.wikipedia.org/wiki/WordPerfect # Reference: https://github.com/OneWingedShark/WordPerfect/blob/master/doc/SDK_Help/FileFormats/WPFF_DocumentStructure.htm @@ -541,15 +563,11 @@ 0 string DOC >43 byte 0x14 Just System Word Processor Ichitaro v4 !:mime application/x-ichitaro4 ->144 string JDASH application/x-ichitaro4 - -0 string DOC >43 byte 0x15 Just System Word Processor Ichitaro v5 !:mime application/x-ichitaro5 - -0 string DOC >43 byte 0x16 Just System Word Processor Ichitaro v6 !:mime application/x-ichitaro6 +>144 string JDASH application/x-ichitaro4 # Type: Freemind mindmap documents # From: Jamie Thompson <debian-bugs@jamie-thompson.co.uk> @@ -568,8 +586,23 @@ !:mime application/x-scribus # help files .hlp compiled from html and used by gfxboot added by Joerg Jenderek +# URL: https://en.opensuse.org/Gfxboot +# Reference: https://github.com/openSUSE/gfxboot/blob/master/gfxboot +# http://mark0.net/download/triddefs_xml.7z/defs/h/hlp-gfxboot-main.trid.xml,hlp-gfxboot-opt.trid.xml +# Note: called "gfxboot compiled html help" (main),(opt) by TrID +# verified by command like `gfxboot --help-show en.hlp > en.html` # markups page=0x04,label=0x12, followed by strings like "opt" or "main" and title=0x14 -0 ulelong&0x8080FFFF 0x00001204 gfxboot compiled html help file +0 ulelong&0x8080FFFF 0x00001204 +# display "gfxboot compiled html help file" (strength=70) after one "TeX font metric data" (tri10u.tfm strength=71=50+21) handled by ./tex +#!:strength +0 +>2 regex \^(main|opt) gfxboot compiled html help file, label %s +#!:mime application/octet-stream +!:mime application/x-gfxboot-hlp +!:ext hlp +# check for title token \x14 +>>&0 ubyte 0x14 \b, title +# title text ends with \x10 +>>>&0 regex \^[[:print:]]+ '%s' # From: Joerg Jenderek # URL: https://en.wikipedia.org/wiki/StarOffice @@ -628,3 +661,6 @@ # inspect 1st GALLERY thumbnail magic by ./images with 1 space at end #>11 indirect x \b; contains +# Atari ST Hypertext files +0 string HDOC\0 ST-Guide file +0 string HREF\0 ST-Guide reference file diff --git a/magic/Magdir/xenix b/magic/Magdir/xenix index fc8027b74687..f2bdda547acb 100644 --- a/magic/Magdir/xenix +++ b/magic/Magdir/xenix @@ -1,9 +1,9 @@ #------------------------------------------------------------------------------ -# $File: xenix,v 1.15 2022/10/19 20:15:16 christos Exp $ +# $File: xenix,v 1.17 2024/02/29 03:42:40 christos Exp $ # xenix: file(1) magic for Microsoft Xenix # -# "Middle model" stuff, and "Xenix 8086 relocatable or 80286 small +# "Middle model" stuff, and "Xenix 8086 relocatable or i286 small # model" lifted from "magic.xenix", with comment "derived empirically; # treat as folklore until proven" # @@ -45,37 +45,105 @@ # highest F1h~Library End Record >>>>>>(1.s+3) ubyte x \b, 2nd record type %#x >>>>>>(1.s+4) uleshort x \b, 2nd record data length %u -0 leshort 0xff65 x.out + +# Microsoft Xenix archive header +0 leshort 0xff65 Microsoft x.out >2 string __.SYMDEF randomized >0 byte x archive -0 leshort 0x206 Microsoft a.out ->8 leshort 1 Middle model + +# Microsoft Xenix x.out header +# Used by Xenix and also by Windows/386 2.x for WIN386.386 file +# URL: http://www.polarhome.com/service/man/?qf=a.out&tf=2&of=Xenix +# http://lock.cmpxchg8b.com/files/a.out.h +# https://www.geoffchappell.com/notes/windows/retro/win386.htm +# Big-endian examples: +# - static executables for Xenix V2.x from Motorola 6800 files in IMD tar archive: +# https://github.com/pski/model2archive/blob/master/Software/Xenix/Xenix_Games/GAMES1.IMD +# Little-endian examples: +# - static executables from Windows/386 2.x: WIN386.386, CGA.386, EGA.386, CTVGA.386, HERCULES.386, 8514.386 +# - static executables from SCO Xenix 2.1.3 for 8086: /bin/vi, /bin/file, ... +# - standalone kernel executables from SCO Xenix 2.1.3 for 8086: /boot, /dos, /xenix +0 leshort 0x206 +>0x1c byte&0xc0 =0x40 Microsoft x.out little-endian +>>0 use microsoft-x.out +0 beshort 0x206 +>0x1c byte&0xc0 =0x00 Microsoft x.out PDP-11-endian +# PDP-11-endian is not supported by magic "use" keyword yet but because +# we do not use long and quad types, we can parse it as big-endian +>>0 use \^microsoft-x.out +>0x1c byte&0xc0 =0x80 Microsoft x.out big-endian +>>0 use \^microsoft-x.out +0 name microsoft-x.out +# Parse type mask >0x1e leshort &0x10 overlay >0x1e leshort &0x2 separate >0x1e leshort &0x4 pure >0x1e leshort &0x800 segmented ->0x1e leshort &0x400 standalone ->0x1e leshort &0x8 fixed-stack ->0x1c byte &0x80 byte-swapped ->0x1c byte &0x40 word-swapped ->0x10 lelong >0 not-stripped ->0x1e leshort ^0xc000 pre-SysV ->0x1e leshort &0x4000 V2.3 ->0x1e leshort &0x8000 V3.0 ->0x1c byte &0x4 86 ->0x1c byte &0xb 186 ->0x1c byte &0x9 286 ->0x1c byte &0xa 386 ->0x1f byte <0x040 small model ->0x1f byte =0x048 large model ->0x1f byte =0x049 huge model ->0x1e leshort &0x1 executable ->0x1e leshort ^0x1 object file ->0x1e leshort &0x40 Large Text ->0x1e leshort &0x20 Large Data ->0x1e leshort &0x120 Huge Objects Enabled ->0x10 lelong >0 not stripped +>0x1e clear x +>0x1e leshort&0x501 =0x001 static executable +>0x1e leshort&0x501 =0x100 shared library module +>0x1e leshort&0x501 =0x101 dynamic executable +>0x1e leshort&0x501 =0x401 standalone kernel executable +>0x1e leshort&0x501 =0x500 virtual kernel module +>0x1e default x unknown binary type +# Parse OS type and OS version mask +>0x1e leshort&0xc000 =0x0000 for pre-SysV +>0x1e leshort&0xc000 =0x4000 for Xenix V2.x +>0x1e leshort&0xc000 =0x8000 for Xenix V3.x +>0x1e leshort&0xc000 =0xc000 +>>0x1e leshort ^0x800 for Xenix V5.x +>>0x1e leshort &0x800 +>>>2 leshort =0x2c +>>>>0x46 ubyte 1 +>>>>>0x47 ubyte 0 for Xenix V2.x +>>>>>0x47 ubyte 1 for Xenix V3.x +>>>>>0x47 ubyte 2 for Xenix V5.x +# little-endian segmented static executable for Intel i386 with OS type 1 and +# OS version 2 is used also by Windows/386 2.x for *.386 files (e.g. WIN386.386) +>>>>>>0x1c ulequad&0x3fff00ff =0x0801004a or Windows/386 2.x +>>>>0x46 ubyte 2 for iRMX +>>>>0x46 ubyte 3 for Concurrent CP/M +# Parse CPU mask +>0x1c byte&0x3f =0x01 \b, PDP-11 +>0x1c byte&0x3f =0x02 \b, PDP-11/23 +>0x1c byte&0x3f =0x03 \b, Zilog Z8000 +>0x1c byte&0x3f =0x04 \b, Intel 8086 +>0x1c byte&0x3f =0x05 \b, Motorola 6800 +>0x1c byte&0x3f =0x06 \b, Zilog Z80 +>0x1c byte&0x3f =0x07 \b, VAX 780/750 +>0x1c byte&0x3f =0x08 \b, NS16032 +>0x1c byte&0x3f =0x09 \b, Intel i286 +>0x1c byte&0x3f =0x0a \b, Intel i386 +>0x1c byte&0x3f =0x0b \b, Intel i186 +>0x1c byte&0x3f =0x29 \b, Intel i286 +# Parse other flags +# /bin/file from SCO Xenix 2.1.3 for 8086 reports bit 0x40 as Middle model +# even that in a.out.h is this defined as large model text, so do same +>0x1e leshort &0x40 \b, Middle model +# following long check works in any endianity (including PDP-11) +>0x10 lelong !0 \b, not stripped +# Flags for debugging +#>0x1c byte &0x40 \b, words swapped (differs from PDP-11) +#>0x1c byte &0x80 \b, bytes swapped (differs from PDP-11) +#>0x1e leshort &0x1 \b, executable +#>0x1e leshort &0x2 \b, separate I&D +#>0x1e leshort &0x4 \b, pure text +#>0x1e leshort &0x8 \b, fixed stack +#>0x1e leshort &0x10 \b, text overlay +#>0x1e leshort &0x20 \b, large model data +#>0x1e leshort &0x40 \b, large model text +#>0x1e leshort &0x80 \b, FPU required +#>0x1e leshort &0x100 \b, virtual module / huge model data +#>0x1e leshort &0x200 \b, iterated text/data present +#>0x1e leshort &0x400 \b, absolute memory image +#>0x1e leshort &0x800 \b, segment table present +#>0x1e leshort &0x1000 \b, advisory locking +#>0x1e leshort &0x2000 \b, needs 5.3 functionality +# Microsoft Xenix a.out header +# URL: http://www.polarhome.com/service/man/?qf=a.out&tf=2&of=Xenix +# http://lock.cmpxchg8b.com/files/a.out.h +# FIXME: Below magic definition is probably wrong, it does not match struct aexec from a.out.h 0 leshort 0x140 old Microsoft 8086 x.out >0x3 byte &0x4 separate >0x3 byte &0x2 pure @@ -83,6 +151,10 @@ >0 byte ^0x1 relocatable >0x14 lelong >0 not stripped +# Microsoft Xenix b.out header +# URL: http://www.polarhome.com/service/man/?qf=a.out&tf=2&of=Xenix +# http://lock.cmpxchg8b.com/files/a.out.h +# FIXME: Below magic definition is probably wrong, it does not match struct bexec from a.out.h 0 lelong 0x206 b.out >0x1e leshort &0x10 overlay >0x1e leshort &0x2 separate @@ -93,14 +165,14 @@ >0x1e leshort ^0x1 object file >0x1e leshort &0x4000 V2.3 >0x1e leshort &0x8000 V3.0 ->0x1c byte &0x4 86 ->0x1c byte &0xb 186 ->0x1c byte &0x9 286 ->0x1c byte &0x29 286 ->0x1c byte &0xa 386 +>0x1c byte &0x4 8086 +>0x1c byte &0xb i186 +>0x1c byte &0x9 i286 +>0x1c byte &0x29 i286 +>0x1c byte &0xa i386 >0x1e leshort &0x4 Large Text >0x1e leshort &0x2 Large Data >0x1e leshort &0x102 Huge Objects Enabled -0 leshort 0x580 XENIX 8086 relocatable or 80286 small model +0 leshort 0x580 XENIX 8086 relocatable or i286 small model # GRR: line above is too general as it catches also all 8086 relocatable (Microsoft) with 1st record data length 5 C0M.OBJ C0T.OBJ C0S.OBJ diff --git a/magic/Magdir/xilinx b/magic/Magdir/xilinx index fd1467813cbc..3476e5181236 100644 --- a/magic/Magdir/xilinx +++ b/magic/Magdir/xilinx @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ -# $File: xilinx,v 1.10 2022/12/18 14:59:32 christos Exp $ +# $File: xilinx,v 1.12 2024/09/04 19:06:12 christos Exp $ # This is Aaron's attempt at a MAGIC file for Xilinx .bit files. # Xilinx-Magic@RevRagnarok.com # Got the info from FPGA-FAQ 0026 @@ -14,26 +14,26 @@ >2 belong =0x0ff00ff0 >>&0 belong =0x0ff00ff0 >>>&0 byte =0x00 ->>>&1 beshort =0x0001 ->>>&3 string a Xilinx BIT data +>>>>&1 beshort =0x0001 +>>>>>&3 string a Xilinx BIT data # Next is a Pascal-style string with the NCD name. We want to capture that. ->>>>&0 pstring/H x - from %s +>>>>>>&0 pstring/H x - from %s # And then 'b' ->>>>>&1 string b +>>>>>>>&1 string b # Then the model / part number: ->>>>>>&0 pstring/H x - for %s +>>>>>>>>&0 pstring/H x - for %s # Then 'c' ->>>>>>>&1 string c +>>>>>>>>>&1 string c # Then the build-date ->>>>>>>>&0 pstring/H x - built %s +>>>>>>>>>>&0 pstring/H x - built %s # Then 'd' ->>>>>>>>>&1 string d +>>>>>>>>>>>&1 string d # Then the build-time ->>>>>>>>>>&0 pstring/H x \b(%s) +>>>>>>>>>>>>&0 pstring/H x \b(%s) # Then 'e' ->>>>>>>>>>>&1 string e +>>>>>>>>>>>>>&1 string e # And length of data ->>>>>>>>>>>>&0 belong x - data length %#x +>>>>>>>>>>>>>>&0 belong x - data length %#x # Raw bitstream files 0 long 0xffffffff @@ -55,4 +55,27 @@ >0x1a8 ubeshort x \b-%04x >0x1aa ubelong x \b-%08x >0x1ae ubeshort x \b%04x ->0x1c0 lelong x \b, %d sections
\ No newline at end of file +>0x1c0 lelong x \b, %d sections + +# Xilinx Boot Image files +# File format spec is from Xilinx UG1283 +# https://docs.xilinx.com/r/en-US/ug1283-bootgen-user-guide +0x20 lelong 0xAA995566 +>0x24 lelong 0x584c4e58 Xilinx Boot Image +>>0x0 lelong 0xEAFFFFFE \b, 32-bit +>>0x0 lelong 0x14000000 \b, 64-bit +>>0x28 lelong 0x00000000 \b, unencrypted +>>0x28 lelong 0xA5C3C5A5 \b, black key in efuse +>>0x28 lelong 0xA5C3C5A7 \b, obfuscated key in efuse +>>0x28 lelong 0x3A5C3C5A \b, red key in bbram +>>0x28 lelong 0xA5C3C5A3 \b, efuse red key in efuse +>>0x28 lelong 0xA35C7CA5 \b, obfuscated key in boot header +>>0x28 lelong 0xA3A5C3C5 \b, user key in boot header +>>0x28 lelong 0xA35C7C53 \b, black key in boot header +>>0x2C lelong 0x01010000 \b, Zynq 7000 SoC +!:mime application/x-xilinx-boot-zynq +>>>0x34 ulelong >0 \b, FSBL size %#x bytes +>>0x2C lelong !0x01010000 \b, Zynq UltraScale+ MPSoC +!:mime application/x-xilinx-boot-zynqmp +>>>0x34 ulelong >0 \b, PMU size %#x bytes +>>>0x3C ulelong >0 \b, FSBL size %#x bytes diff --git a/magic/Magdir/yara b/magic/Magdir/yara index 6156cc63bc3d..70edc815e011 100644 --- a/magic/Magdir/yara +++ b/magic/Magdir/yara @@ -1,17 +1,17 @@ #------------------------------------------------------------------------------ -# $File: yara,v 1.4 2021/04/26 15:56:00 christos Exp $ +# $File: yara,v 1.5 2024/09/04 19:06:12 christos Exp $ # yara: file(1) magic for https://virustotal.github.io/yara/ # 0 string YARA >4 lelong >2047 ->8 byte <20 YARA 3.x compiled rule set +>>8 byte <20 YARA 3.x compiled rule set # version ->>8 clear x ->>8 byte 6 created with version 3.3.0 ->>8 byte 8 created with version 3.4.0 ->>8 byte 11 created with version 3.5.0 ->>8 default x ->>>8 byte x development version %#02x +>>>8 clear x +>>>8 byte 6 created with version 3.3.0 +>>>8 byte 8 created with version 3.4.0 +>>>8 byte 11 created with version 3.5.0 +>>>8 default x +>>>>8 byte x development version %#02x diff --git a/magic/Makefile.am b/magic/Makefile.am index 270c7fc25da6..e0f90343fc89 100644 --- a/magic/Makefile.am +++ b/magic/Makefile.am @@ -1,5 +1,5 @@ # -# $File: Makefile.am,v 1.188 2023/05/21 17:19:08 christos Exp $ +# $File: Makefile.am,v 1.192 2024/10/02 01:45:32 christos Exp $ # MAGIC_FRAGMENT_BASE = Magdir MAGIC_DIR = $(top_srcdir)/magic @@ -157,9 +157,11 @@ $(MAGIC_FRAGMENT_DIR)/karma \ $(MAGIC_FRAGMENT_DIR)/kde \ $(MAGIC_FRAGMENT_DIR)/keepass \ $(MAGIC_FRAGMENT_DIR)/kerberos \ +$(MAGIC_FRAGMENT_DIR)/keyman \ $(MAGIC_FRAGMENT_DIR)/kicad \ $(MAGIC_FRAGMENT_DIR)/kml \ $(MAGIC_FRAGMENT_DIR)/lammps \ +$(MAGIC_FRAGMENT_DIR)/lauterbach \ $(MAGIC_FRAGMENT_DIR)/lecter \ $(MAGIC_FRAGMENT_DIR)/lex \ $(MAGIC_FRAGMENT_DIR)/lif \ @@ -228,13 +230,13 @@ $(MAGIC_FRAGMENT_DIR)/os2 \ $(MAGIC_FRAGMENT_DIR)/os400 \ $(MAGIC_FRAGMENT_DIR)/os9 \ $(MAGIC_FRAGMENT_DIR)/osf1 \ +$(MAGIC_FRAGMENT_DIR)/pack \ $(MAGIC_FRAGMENT_DIR)/palm \ $(MAGIC_FRAGMENT_DIR)/parix \ $(MAGIC_FRAGMENT_DIR)/parrot \ $(MAGIC_FRAGMENT_DIR)/pascal \ $(MAGIC_FRAGMENT_DIR)/pbf \ $(MAGIC_FRAGMENT_DIR)/pbm \ -$(MAGIC_FRAGMENT_DIR)/pc88 \ $(MAGIC_FRAGMENT_DIR)/pc98 \ $(MAGIC_FRAGMENT_DIR)/pci_ids \ $(MAGIC_FRAGMENT_DIR)/pcjr \ @@ -319,6 +321,7 @@ $(MAGIC_FRAGMENT_DIR)/unknown \ $(MAGIC_FRAGMENT_DIR)/usd \ $(MAGIC_FRAGMENT_DIR)/uterus \ $(MAGIC_FRAGMENT_DIR)/uuencode \ +$(MAGIC_FRAGMENT_DIR)/uxn \ $(MAGIC_FRAGMENT_DIR)/vacuum-cleaner \ $(MAGIC_FRAGMENT_DIR)/varied.out \ $(MAGIC_FRAGMENT_DIR)/varied.script \ diff --git a/magic/Makefile.in b/magic/Makefile.in index c528269244d8..5774badc4bbf 100644 --- a/magic/Makefile.in +++ b/magic/Makefile.in @@ -181,6 +181,7 @@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ +FILECMD = @FILECMD@ GREP = @GREP@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ INSTALL = @INSTALL@ @@ -278,7 +279,7 @@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # -# $File: Makefile.am,v 1.188 2023/05/21 17:19:08 christos Exp $ +# $File: Makefile.am,v 1.192 2024/10/02 01:45:32 christos Exp $ # MAGIC_FRAGMENT_BASE = Magdir MAGIC_DIR = $(top_srcdir)/magic @@ -434,9 +435,11 @@ $(MAGIC_FRAGMENT_DIR)/karma \ $(MAGIC_FRAGMENT_DIR)/kde \ $(MAGIC_FRAGMENT_DIR)/keepass \ $(MAGIC_FRAGMENT_DIR)/kerberos \ +$(MAGIC_FRAGMENT_DIR)/keyman \ $(MAGIC_FRAGMENT_DIR)/kicad \ $(MAGIC_FRAGMENT_DIR)/kml \ $(MAGIC_FRAGMENT_DIR)/lammps \ +$(MAGIC_FRAGMENT_DIR)/lauterbach \ $(MAGIC_FRAGMENT_DIR)/lecter \ $(MAGIC_FRAGMENT_DIR)/lex \ $(MAGIC_FRAGMENT_DIR)/lif \ @@ -505,13 +508,13 @@ $(MAGIC_FRAGMENT_DIR)/os2 \ $(MAGIC_FRAGMENT_DIR)/os400 \ $(MAGIC_FRAGMENT_DIR)/os9 \ $(MAGIC_FRAGMENT_DIR)/osf1 \ +$(MAGIC_FRAGMENT_DIR)/pack \ $(MAGIC_FRAGMENT_DIR)/palm \ $(MAGIC_FRAGMENT_DIR)/parix \ $(MAGIC_FRAGMENT_DIR)/parrot \ $(MAGIC_FRAGMENT_DIR)/pascal \ $(MAGIC_FRAGMENT_DIR)/pbf \ $(MAGIC_FRAGMENT_DIR)/pbm \ -$(MAGIC_FRAGMENT_DIR)/pc88 \ $(MAGIC_FRAGMENT_DIR)/pc98 \ $(MAGIC_FRAGMENT_DIR)/pci_ids \ $(MAGIC_FRAGMENT_DIR)/pcjr \ @@ -596,6 +599,7 @@ $(MAGIC_FRAGMENT_DIR)/unknown \ $(MAGIC_FRAGMENT_DIR)/usd \ $(MAGIC_FRAGMENT_DIR)/uterus \ $(MAGIC_FRAGMENT_DIR)/uuencode \ +$(MAGIC_FRAGMENT_DIR)/uxn \ $(MAGIC_FRAGMENT_DIR)/vacuum-cleaner \ $(MAGIC_FRAGMENT_DIR)/varied.out \ $(MAGIC_FRAGMENT_DIR)/varied.script \ diff --git a/python/Makefile.in b/python/Makefile.in index b3053e695bbd..26c86d23d9fc 100644 --- a/python/Makefile.in +++ b/python/Makefile.in @@ -151,6 +151,7 @@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ +FILECMD = @FILECMD@ GREP = @GREP@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ INSTALL = @INSTALL@ diff --git a/src/Makefile.in b/src/Makefile.in index 08184edd6ccf..a7ced2864afc 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -263,6 +263,7 @@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ +FILECMD = @FILECMD@ GREP = @GREP@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ INSTALL = @INSTALL@ diff --git a/src/apprentice.c b/src/apprentice.c index e795741d5e16..cf040cddd9e0 100644 --- a/src/apprentice.c +++ b/src/apprentice.c @@ -32,7 +32,7 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: apprentice.c,v 1.342 2023/07/17 14:38:35 christos Exp $") +FILE_RCSID("@(#)$File: apprentice.c,v 1.356 2024/11/27 15:37:00 christos Exp $") #endif /* lint */ #include "magic.h" @@ -107,17 +107,17 @@ struct magic_map { uint32_t nmagic[MAGIC_SETS]; }; -int file_formats[FILE_NAMES_SIZE]; -const size_t file_nformats = FILE_NAMES_SIZE; -const char *file_names[FILE_NAMES_SIZE]; -const size_t file_nnames = FILE_NAMES_SIZE; +file_private int file_formats[FILE_NAMES_SIZE]; +file_private const size_t file_nformats = FILE_NAMES_SIZE; +file_protected const char *file_names[FILE_NAMES_SIZE]; +file_protected const size_t file_nnames = FILE_NAMES_SIZE; file_private int getvalue(struct magic_set *ms, struct magic *, const char **, int); file_private int hextoint(int); file_private const char *getstr(struct magic_set *, struct magic *, const char *, int); file_private int parse(struct magic_set *, struct magic_entry *, const char *, - size_t, int); + const char *, size_t, int); file_private void eatsize(const char **); file_private int apprentice_1(struct magic_set *, const char *, int); file_private ssize_t apprentice_magic_strength_1(const struct magic *); @@ -496,7 +496,7 @@ apprentice_1(struct magic_set *ms, const char *fn, int action) map = apprentice_map(ms, fn); if (map == NULL) { if (ms->flags & MAGIC_CHECK) - file_magwarn(NULL, "using regular magic file `%s'", fn); + file_magwarn(ms, "using regular magic file `%s'", fn); map = apprentice_load(ms, fn, action); if (map == NULL) return -1; @@ -540,6 +540,7 @@ file_ms_free(struct magic_set *ms) free(ms->o.pbuf); free(ms->o.buf); free(ms->c.li); + free(ms->fnamebuf); #ifdef USE_C_LOCALE freelocale(ms->c_lc_ctype); #endif @@ -572,8 +573,10 @@ file_ms_alloc(int flags) ms->error = -1; for (i = 0; i < MAGIC_SETS; i++) ms->mlist[i] = NULL; + ms->fnamebuf = NULL; ms->file = "unknown"; ms->line = 0; + ms->magwarn = 0; ms->indir_max = FILE_INDIR_MAX; ms->name_max = FILE_NAME_MAX; ms->elf_shnum_max = FILE_ELF_SHNUM_MAX; @@ -583,6 +586,7 @@ file_ms_alloc(int flags) ms->regex_max = FILE_REGEX_MAX; ms->bytes_max = FILE_BYTES_MAX; ms->encoding_max = FILE_ENCODING_MAX; + ms->magwarn_max = FILE_MAGWARN_MAX; #ifdef USE_C_LOCALE ms->c_lc_ctype = newlocale(LC_CTYPE_MASK, "C", 0); assert(ms->c_lc_ctype != NULL); @@ -733,7 +737,7 @@ fail: file_protected int file_apprentice(struct magic_set *ms, const char *fn, int action) { - char *p, *mfn; + char *p; int fileerr, errs = -1; size_t i, j; @@ -744,7 +748,8 @@ file_apprentice(struct magic_set *ms, const char *fn, int action) init_file_tables(); - if ((mfn = strdup(fn)) == NULL) { + free(ms->fnamebuf); + if ((ms->fnamebuf = strdup(fn)) == NULL) { file_oomem(ms, strlen(fn)); return -1; } @@ -757,11 +762,10 @@ file_apprentice(struct magic_set *ms, const char *fn, int action) mlist_free(ms->mlist[j]); ms->mlist[j] = NULL; } - free(mfn); return -1; } } - fn = mfn; + fn = ms->fnamebuf; while (fn) { p = CCAST(char *, strchr(fn, PATHSEP)); @@ -774,8 +778,6 @@ file_apprentice(struct magic_set *ms, const char *fn, int action) fn = p; } - free(mfn); - if (errs == -1) { for (i = 0; i < MAGIC_SETS; i++) { mlist_free(ms->mlist[i]); @@ -940,7 +942,7 @@ apprentice_magic_strength_1(const struct magic *m) switch (m->type) { case FILE_DEFAULT: /* make sure this sorts last */ if (m->factor_op != FILE_FACTOR_OP_NONE) { - file_magwarn(NULL, "Usupported factor_op in default %d", + file_magwarn1("Unsupported factor_op in default %d", m->factor_op); } return 0; @@ -1135,12 +1137,24 @@ apprentice_sort(const void *a, const void *b) const struct magic_entry *mb = CAST(const struct magic_entry *, b); size_t sa = file_magic_strength(ma->mp, ma->cont_count); size_t sb = file_magic_strength(mb->mp, mb->cont_count); - if (sa == sb) - return 0; - else if (sa > sb) - return -1; - else - return 1; + if (sa == sb) { + struct magic mpa = *ma->mp; + struct magic mpb = *mb->mp; + mpa.lineno = mpb.lineno = 0; + int x = memcmp(&mpa, &mpb, sizeof(mpa)); + if (x == 0) { + // Don't warn for DER + if (mpa.type == FILE_DER) + return 0; + file_magwarn1("Duplicate magic entry `%s'", + ma->mp->desc); + file_mdump(ma->mp); + file_mdump(mb->mp); + return 0; + } + return x > 0 ? -1 : 1; + } + return sa > sb ? -1 : 1; } /* @@ -1330,6 +1344,8 @@ load_1(struct magic_set *ms, int action, const char *fn, int *errs, /* read and parse this file */ for (ms->line = 1; (len = getline(&line, &llen, f)) != -1; ms->line++) { + if (ms->magwarn >= ms->magwarn_max) + break; if (len == 0) /* null line, garbage, etc */ continue; if (line[len - 1] == '\n') { @@ -1374,7 +1390,7 @@ load_1(struct magic_set *ms, int action, const char *fn, int *errs, /*FALLTHROUGH*/ default: again: - switch (parse(ms, &me, line, lineno, action)) { + switch (parse(ms, &me, fn, line, lineno, action)) { case 0: continue; case 1: @@ -2013,8 +2029,8 @@ out: * parse one line from magic file, put into magic[index++] if valid */ file_private int -parse(struct magic_set *ms, struct magic_entry *me, const char *line, - size_t lineno, int action) +parse(struct magic_set *ms, struct magic_entry *me, const char *file, + const char *line, size_t lineno, int action) { #ifdef ENABLE_CONDITIONALS static uint32_t last_cont_level = 0; @@ -2111,9 +2127,9 @@ parse(struct magic_set *ms, struct magic_entry *me, const char *line, } /* get offset, then skip over it */ - if (*l == '-') { + if (*l == '-' || *l == '+') { ++l; /* step over */ - m->flag |= OFFNEGATIVE; + m->flag |= l[-1] == '-' ? OFFNEGATIVE : OFFPOSITIVE; } m->offset = CAST(int32_t, strtol(l, &t, 0)); if (l == t) { @@ -2401,6 +2417,10 @@ parse(struct magic_set *ms, struct magic_entry *me, const char *line, } for (i = 0; (m->desc[i++] = *l++) != '\0' && i < sizeof(m->desc); ) continue; + if (m->desc[0] == '\0') { + // Tuck in the filename for debugging. + strlcpy(m->desc + 1, file, sizeof(m->desc) - 1); + } if (i == sizeof(m->desc)) { m->desc[sizeof(m->desc) - 1] = '\0'; if (ms->flags & MAGIC_CHECK) @@ -2554,7 +2574,7 @@ parse_apple(struct magic_set *ms, struct magic_entry *me, const char *line, { return parse_extra(ms, me, line, len, CAST(off_t, offsetof(struct magic, apple)), - sizeof(me->mp[0].apple), "APPLE", "!+-./?", 0); + sizeof(me->mp[me->cont_count - 1].apple), "APPLE", "!+-./?", 0); } /* @@ -2566,7 +2586,8 @@ parse_ext(struct magic_set *ms, struct magic_entry *me, const char *line, { return parse_extra(ms, me, line, len, CAST(off_t, offsetof(struct magic, ext)), - sizeof(me->mp[0].ext), "EXTENSION", ",!+-/@?_$&~", 0); + sizeof(me->mp[me->cont_count - 1].ext), "EXTENSION", ",!+-/@?_$&~", + 0); /* & for b&w */ /* ~ for journal~ */ } @@ -2581,7 +2602,8 @@ parse_mime(struct magic_set *ms, struct magic_entry *me, const char *line, { return parse_extra(ms, me, line, len, CAST(off_t, offsetof(struct magic, mimetype)), - sizeof(me->mp[0].mimetype), "MIME", "+-/.$?:{}", 1); + sizeof(me->mp[me->cont_count - 1].mimetype), "MIME", "+-/.$?:{};=", + 1); } file_private int @@ -3354,6 +3376,19 @@ check_buffer(struct magic_set *ms, struct magic_map *map, const char *dbname) uint32_t version; int i, needsbyteswap; + entries = CAST(uint32_t, map->len / sizeof(struct magic)); + if (entries < MAGIC_SETS + 1) { + file_error(ms, 0, "Too few magic entries %u in `%s'", + entries, dbname); + return -1; + } + if ((entries * sizeof(struct magic)) != map->len) { + file_error(ms, 0, "Size of `%s' %" SIZE_T_FORMAT "u is not " + "a multiple of %" SIZE_T_FORMAT "u", + dbname, map->len, sizeof(struct magic)); + return -1; + } + ptr = CAST(uint32_t *, map->p); if (*ptr != MAGICNO) { if (swap4(*ptr) != MAGICNO) { @@ -3373,13 +3408,6 @@ check_buffer(struct magic_set *ms, struct magic_map *map, const char *dbname) VERSIONNO, dbname, version); return -1; } - entries = CAST(uint32_t, map->len / sizeof(struct magic)); - if ((entries * sizeof(struct magic)) != map->len) { - file_error(ms, 0, "Size of `%s' %" SIZE_T_FORMAT "u is not " - "a multiple of %" SIZE_T_FORMAT "u", - dbname, map->len, sizeof(struct magic)); - return -1; - } map->magic[0] = CAST(struct magic *, map->p) + 1; nentries = 0; for (i = 0; i < MAGIC_SETS; i++) { @@ -3482,8 +3510,8 @@ mkdbname(struct magic_set *ms, const char *fn, int strip) /* Did not find .mgc, restore q */ if (p >= ext) - while (*q) - q++; + for (q = fn; *q; q++) + continue; q++; /* Compatibility with old code that looked in .mime */ diff --git a/src/cdf.c b/src/cdf.c index 36a6031ed3f7..0c9c3743a075 100644 --- a/src/cdf.c +++ b/src/cdf.c @@ -35,7 +35,7 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: cdf.c,v 1.123 2022/09/24 20:30:13 christos Exp $") +FILE_RCSID("@(#)$File: cdf.c,v 1.124 2024/11/25 21:24:59 christos Exp $") #endif #include <assert.h> @@ -71,7 +71,7 @@ FILE_RCSID("@(#)$File: cdf.c,v 1.123 2022/09/24 20:30:13 christos Exp $") #define DPRINTF(a) #endif -static union { +file_private union { char s[4]; uint32_t u; } cdf_bo; @@ -97,7 +97,7 @@ static union { /*ARGSUSED*/ -static void * +file_private void * cdf_malloc(const char *file __attribute__((__unused__)), size_t line __attribute__((__unused__)), size_t n) { @@ -109,7 +109,7 @@ cdf_malloc(const char *file __attribute__((__unused__)), } /*ARGSUSED*/ -static void * +file_private void * cdf_realloc(const char *file __attribute__((__unused__)), size_t line __attribute__((__unused__)), void *p, size_t n) { @@ -119,7 +119,7 @@ cdf_realloc(const char *file __attribute__((__unused__)), } /*ARGSUSED*/ -static void * +file_private void * cdf_calloc(const char *file __attribute__((__unused__)), size_t line __attribute__((__unused__)), size_t n, size_t u) { @@ -142,7 +142,7 @@ cdf_calloc(const char *file __attribute__((__unused__)), /* * swap a short */ -static uint16_t +file_private uint16_t _cdf_tole2(uint16_t sv) { uint16_t rv; @@ -156,7 +156,7 @@ _cdf_tole2(uint16_t sv) /* * swap an int */ -static uint32_t +file_private uint32_t _cdf_tole4(uint32_t sv) { uint32_t rv; @@ -172,7 +172,7 @@ _cdf_tole4(uint32_t sv) /* * swap a quad */ -static uint64_t +file_private uint64_t _cdf_tole8(uint64_t sv) { uint64_t rv; @@ -194,7 +194,7 @@ _cdf_tole8(uint64_t sv) * grab a uint32_t from a possibly unaligned address, and return it in * the native host order. */ -static uint32_t +file_private uint32_t cdf_getuint32(const uint8_t *p, size_t offs) { uint32_t rv; @@ -207,25 +207,25 @@ cdf_getuint32(const uint8_t *p, size_t offs) #define CDF_UNPACKA(a) \ (void)memcpy((a), &buf[len], sizeof(a)), len += sizeof(a) -uint16_t +file_protected uint16_t cdf_tole2(uint16_t sv) { return CDF_TOLE2(sv); } -uint32_t +file_protected uint32_t cdf_tole4(uint32_t sv) { return CDF_TOLE4(sv); } -uint64_t +file_protected uint64_t cdf_tole8(uint64_t sv) { return CDF_TOLE8(sv); } -void +file_protected void cdf_swap_header(cdf_header_t *h) { size_t i; @@ -256,7 +256,7 @@ cdf_swap_header(cdf_header_t *h) } } -void +file_protected void cdf_unpack_header(cdf_header_t *h, char *buf) { size_t i; @@ -282,7 +282,7 @@ cdf_unpack_header(cdf_header_t *h, char *buf) CDF_UNPACK(h->h_master_sat[i]); } -void +file_protected void cdf_swap_dir(cdf_directory_t *d) { d->d_namelen = CDF_TOLE2(d->d_namelen); @@ -299,7 +299,7 @@ cdf_swap_dir(cdf_directory_t *d) d->d_size = CDF_TOLE4(d->d_size); } -void +file_protected void cdf_swap_class(cdf_classid_t *d) { d->cl_dword = CDF_TOLE4(d->cl_dword); @@ -307,7 +307,7 @@ cdf_swap_class(cdf_classid_t *d) d->cl_word[1] = CDF_TOLE2(d->cl_word[1]); } -void +file_protected void cdf_unpack_dir(cdf_directory_t *d, char *buf) { size_t len = 0; @@ -328,7 +328,7 @@ cdf_unpack_dir(cdf_directory_t *d, char *buf) CDF_UNPACK(d->d_unused0); } -int +file_protected int cdf_zero_stream(cdf_stream_t *scn) { scn->sst_len = 0; @@ -339,7 +339,7 @@ cdf_zero_stream(cdf_stream_t *scn) return -1; } -static size_t +file_private size_t cdf_check_stream(const cdf_stream_t *sst, const cdf_header_t *h) { size_t ss = sst->sst_dirlen < h->h_min_size_standard_stream ? @@ -348,7 +348,7 @@ cdf_check_stream(const cdf_stream_t *sst, const cdf_header_t *h) return sst->sst_ss; } -static int +file_private int cdf_check_stream_offset(const cdf_stream_t *sst, const cdf_header_t *h, const void *p, size_t tail, int line) { @@ -366,7 +366,7 @@ cdf_check_stream_offset(const cdf_stream_t *sst, const cdf_header_t *h, return -1; } -static ssize_t +file_private ssize_t cdf_read(const cdf_info_t *info, off_t off, void *buf, size_t len) { size_t siz = CAST(size_t, off + len); @@ -391,7 +391,7 @@ out: return -1; } -int +file_protected int cdf_read_header(const cdf_info_t *info, cdf_header_t *h) { char buf[512]; @@ -468,7 +468,7 @@ out: /* * Read the sector allocation table. */ -int +file_protected int cdf_read_sat(const cdf_info_t *info, cdf_header_t *h, cdf_sat_t *sat) { size_t i, j, k; @@ -593,7 +593,7 @@ out: return CAST(size_t, -1); } -int +file_protected int cdf_read_long_sector_chain(const cdf_info_t *info, const cdf_header_t *h, const cdf_sat_t *sat, cdf_secid_t sid, size_t len, cdf_stream_t *scn) { @@ -642,7 +642,7 @@ out: return cdf_zero_stream(scn); } -int +file_protected int cdf_read_short_sector_chain(const cdf_header_t *h, const cdf_sat_t *ssat, const cdf_stream_t *sst, cdf_secid_t sid, size_t len, cdf_stream_t *scn) @@ -684,7 +684,7 @@ out: return cdf_zero_stream(scn); } -int +file_protected int cdf_read_sector_chain(const cdf_info_t *info, const cdf_header_t *h, const cdf_sat_t *sat, const cdf_sat_t *ssat, const cdf_stream_t *sst, cdf_secid_t sid, size_t len, cdf_stream_t *scn) @@ -697,7 +697,7 @@ cdf_read_sector_chain(const cdf_info_t *info, const cdf_header_t *h, return cdf_read_long_sector_chain(info, h, sat, sid, len, scn); } -int +file_protected int cdf_read_dir(const cdf_info_t *info, const cdf_header_t *h, const cdf_sat_t *sat, cdf_dir_t *dir) { @@ -752,7 +752,7 @@ out: } -int +file_protected int cdf_read_ssat(const cdf_info_t *info, const cdf_header_t *h, const cdf_sat_t *sat, cdf_sat_t *ssat) { @@ -795,7 +795,7 @@ out1: return -1; } -int +file_protected int cdf_read_short_stream(const cdf_info_t *info, const cdf_header_t *h, const cdf_sat_t *sat, const cdf_dir_t *dir, cdf_stream_t *scn, const cdf_directory_t **root) @@ -830,7 +830,7 @@ out: return 0; } -static int +file_private int cdf_namecmp(const char *d, const uint16_t *s, size_t l) { for (; l--; d++, s++) @@ -839,7 +839,7 @@ cdf_namecmp(const char *d, const uint16_t *s, size_t l) return 0; } -int +file_protected int cdf_read_doc_summary_info(const cdf_info_t *info, const cdf_header_t *h, const cdf_sat_t *sat, const cdf_sat_t *ssat, const cdf_stream_t *sst, const cdf_dir_t *dir, cdf_stream_t *scn) @@ -848,7 +848,7 @@ cdf_read_doc_summary_info(const cdf_info_t *info, const cdf_header_t *h, "\05DocumentSummaryInformation", scn); } -int +file_protected int cdf_read_summary_info(const cdf_info_t *info, const cdf_header_t *h, const cdf_sat_t *sat, const cdf_sat_t *ssat, const cdf_stream_t *sst, const cdf_dir_t *dir, cdf_stream_t *scn) @@ -857,7 +857,7 @@ cdf_read_summary_info(const cdf_info_t *info, const cdf_header_t *h, "\05SummaryInformation", scn); } -int +file_protected int cdf_read_user_stream(const cdf_info_t *info, const cdf_header_t *h, const cdf_sat_t *sat, const cdf_sat_t *ssat, const cdf_stream_t *sst, const cdf_dir_t *dir, const char *name, cdf_stream_t *scn) @@ -875,7 +875,7 @@ cdf_read_user_stream(const cdf_info_t *info, const cdf_header_t *h, d->d_stream_first_sector, d->d_size, scn); } -int +file_protected int cdf_find_stream(const cdf_dir_t *dir, const char *name, int type) { size_t i, name_len = strlen(name) + 1; @@ -896,13 +896,13 @@ cdf_find_stream(const cdf_dir_t *dir, const char *name, int type) #define CDF_SHLEN_LIMIT (UINT32_MAX / 64) #define CDF_PROP_LIMIT (UINT32_MAX / (64 * sizeof(cdf_property_info_t))) -static const void * +file_private const void * cdf_offset(const void *p, size_t l) { return CAST(const void *, CAST(const uint8_t *, p) + l); } -static const uint8_t * +file_private const uint8_t * cdf_get_property_info_pos(const cdf_stream_t *sst, const cdf_header_t *h, const uint8_t *p, const uint8_t *e, size_t i) { @@ -933,7 +933,7 @@ cdf_get_property_info_pos(const cdf_stream_t *sst, const cdf_header_t *h, return CAST(const uint8_t *, cdf_offset(CAST(const void *, p), ofs)); } -static cdf_property_info_t * +file_private cdf_property_info_t * cdf_grow_info(cdf_property_info_t **info, size_t *maxcount, size_t incr) { cdf_property_info_t *inp; @@ -959,7 +959,7 @@ out: return NULL; } -static int +file_private int cdf_copy_info(cdf_property_info_t *inp, const void *p, const void *e, size_t len) { @@ -987,7 +987,7 @@ cdf_copy_info(cdf_property_info_t *inp, const void *p, const void *e, return 1; } -int +file_protected int cdf_read_property_info(const cdf_stream_t *sst, const cdf_header_t *h, uint32_t offs, cdf_property_info_t **info, size_t *count, size_t *maxcount) { @@ -1144,7 +1144,7 @@ out: return -1; } -int +file_protected int cdf_unpack_summary_info(const cdf_stream_t *sst, const cdf_header_t *h, cdf_summary_info_header_t *ssi, cdf_property_info_t **info, size_t *count) { @@ -1183,7 +1183,7 @@ cdf_unpack_summary_info(const cdf_stream_t *sst, const cdf_header_t *h, memcpy(&cep->f, b + (l), sizeof(cep->f)); \ ce[i].f = CAST(t, CDF_TOLE(cep->f)) -int +file_protected int cdf_unpack_catalog(const cdf_header_t *h, const cdf_stream_t *sst, cdf_catalog_t **cat) { @@ -1251,7 +1251,7 @@ cdf_unpack_catalog(const cdf_header_t *h, const cdf_stream_t *sst, return 0; } -int +file_protected int cdf_print_classid(char *buf, size_t buflen, const cdf_classid_t *id) { return snprintf(buf, buflen, "%.8x-%.4x-%.4x-%.2x%.2x-" @@ -1261,7 +1261,7 @@ cdf_print_classid(char *buf, size_t buflen, const cdf_classid_t *id) id->cl_six[5]); } -static const struct { +file_private const struct { uint32_t v; const char *n; } vn[] = { @@ -1287,7 +1287,7 @@ static const struct { { CDF_PROPERTY_LOCALE_ID, "Locale ID" }, }; -int +file_protected int cdf_print_property_name(char *buf, size_t bufsiz, uint32_t p) { size_t i; @@ -1298,7 +1298,7 @@ cdf_print_property_name(char *buf, size_t bufsiz, uint32_t p) return snprintf(buf, bufsiz, "%#x", p); } -int +file_protected int cdf_print_elapsed_time(char *buf, size_t bufsiz, cdf_timestamp_t ts) { int len = 0; @@ -1333,7 +1333,7 @@ cdf_print_elapsed_time(char *buf, size_t bufsiz, cdf_timestamp_t ts) return len; } -char * +file_protected char * cdf_u16tos8(char *buf, size_t len, const uint16_t *p) { size_t i; @@ -1344,7 +1344,7 @@ cdf_u16tos8(char *buf, size_t len, const uint16_t *p) } #ifdef CDF_DEBUG -void +file_protected void cdf_dump_header(const cdf_header_t *h) { size_t i; @@ -1372,7 +1372,7 @@ cdf_dump_header(const cdf_header_t *h) } } -void +file_protected void cdf_dump_sat(const char *prefix, const cdf_sat_t *sat, size_t size) { size_t i, j, s = size / sizeof(cdf_secid_t); @@ -1391,7 +1391,7 @@ cdf_dump_sat(const char *prefix, const cdf_sat_t *sat, size_t size) } } -void +file_protected void cdf_dump(const void *v, size_t len) { size_t i, j; @@ -1412,14 +1412,14 @@ cdf_dump(const void *v, size_t len) (void)fprintf(stderr, "\n"); } -void +file_protected void cdf_dump_stream(const cdf_stream_t *sst) { size_t ss = sst->sst_ss; cdf_dump(sst->sst_tab, ss * sst->sst_len); } -void +file_protected void cdf_dump_dir(const cdf_info_t *info, const cdf_header_t *h, const cdf_sat_t *sat, const cdf_sat_t *ssat, const cdf_stream_t *sst, const cdf_dir_t *dir) @@ -1479,7 +1479,7 @@ cdf_dump_dir(const cdf_info_t *info, const cdf_header_t *h, } } -void +file_protected void cdf_dump_property_info(const cdf_property_info_t *info, size_t count) { cdf_timestamp_t tp; @@ -1549,7 +1549,7 @@ cdf_dump_property_info(const cdf_property_info_t *info, size_t count) } -void +file_protected void cdf_dump_summary_info(const cdf_header_t *h, const cdf_stream_t *sst) { char buf[128]; @@ -1572,7 +1572,7 @@ cdf_dump_summary_info(const cdf_header_t *h, const cdf_stream_t *sst) } -void +file_protected void cdf_dump_catalog(const cdf_header_t *h, const cdf_stream_t *sst) { cdf_catalog_t *cat; diff --git a/src/cdf.h b/src/cdf.h index 05056668fb22..4a4c35554cdf 100644 --- a/src/cdf.h +++ b/src/cdf.h @@ -283,70 +283,79 @@ typedef struct { } cdf_catalog_t; struct timespec; -int cdf_timestamp_to_timespec(struct timespec *, cdf_timestamp_t); -int cdf_timespec_to_timestamp(cdf_timestamp_t *, const struct timespec *); -int cdf_read_header(const cdf_info_t *, cdf_header_t *); -void cdf_swap_header(cdf_header_t *); -void cdf_unpack_header(cdf_header_t *, char *); -void cdf_swap_dir(cdf_directory_t *); -void cdf_unpack_dir(cdf_directory_t *, char *); -void cdf_swap_class(cdf_classid_t *); -ssize_t cdf_read_sector(const cdf_info_t *, void *, size_t, size_t, - const cdf_header_t *, cdf_secid_t); -ssize_t cdf_read_short_sector(const cdf_stream_t *, void *, size_t, size_t, - const cdf_header_t *, cdf_secid_t); -int cdf_read_sat(const cdf_info_t *, cdf_header_t *, cdf_sat_t *); -size_t cdf_count_chain(const cdf_sat_t *, cdf_secid_t, size_t); -int cdf_read_long_sector_chain(const cdf_info_t *, const cdf_header_t *, - const cdf_sat_t *, cdf_secid_t, size_t, cdf_stream_t *); -int cdf_read_short_sector_chain(const cdf_header_t *, const cdf_sat_t *, - const cdf_stream_t *, cdf_secid_t, size_t, cdf_stream_t *); -int cdf_read_sector_chain(const cdf_info_t *, const cdf_header_t *, - const cdf_sat_t *, const cdf_sat_t *, const cdf_stream_t *, cdf_secid_t, - size_t, cdf_stream_t *); -int cdf_read_dir(const cdf_info_t *, const cdf_header_t *, const cdf_sat_t *, - cdf_dir_t *); -int cdf_read_ssat(const cdf_info_t *, const cdf_header_t *, const cdf_sat_t *, +file_protected int cdf_timestamp_to_timespec(struct timespec *, + cdf_timestamp_t); +file_protected int cdf_timespec_to_timestamp(cdf_timestamp_t *, + const struct timespec *); +file_protected int cdf_read_header(const cdf_info_t *, cdf_header_t *); +file_protected void cdf_swap_header(cdf_header_t *); +file_protected void cdf_unpack_header(cdf_header_t *, char *); +file_protected void cdf_swap_dir(cdf_directory_t *); +file_protected void cdf_unpack_dir(cdf_directory_t *, char *); +file_protected void cdf_swap_class(cdf_classid_t *); +file_protected ssize_t cdf_read_sector(const cdf_info_t *, void *, size_t, + size_t, const cdf_header_t *, cdf_secid_t); +file_protected ssize_t cdf_read_short_sector(const cdf_stream_t *, void *, + size_t, size_t, const cdf_header_t *, cdf_secid_t); +file_protected int cdf_read_sat(const cdf_info_t *, cdf_header_t *, cdf_sat_t *); -int cdf_read_short_stream(const cdf_info_t *, const cdf_header_t *, - const cdf_sat_t *, const cdf_dir_t *, cdf_stream_t *, - const cdf_directory_t **); -int cdf_read_property_info(const cdf_stream_t *, const cdf_header_t *, uint32_t, - cdf_property_info_t **, size_t *, size_t *); -int cdf_read_user_stream(const cdf_info_t *, const cdf_header_t *, - const cdf_sat_t *, const cdf_sat_t *, const cdf_stream_t *, - const cdf_dir_t *, const char *, cdf_stream_t *); -int cdf_find_stream(const cdf_dir_t *, const char *, int); -int cdf_zero_stream(cdf_stream_t *); -int cdf_read_doc_summary_info(const cdf_info_t *, const cdf_header_t *, - const cdf_sat_t *, const cdf_sat_t *, const cdf_stream_t *, - const cdf_dir_t *, cdf_stream_t *); -int cdf_read_summary_info(const cdf_info_t *, const cdf_header_t *, - const cdf_sat_t *, const cdf_sat_t *, const cdf_stream_t *, - const cdf_dir_t *, cdf_stream_t *); -int cdf_unpack_summary_info(const cdf_stream_t *, const cdf_header_t *, - cdf_summary_info_header_t *, cdf_property_info_t **, size_t *); -int cdf_unpack_catalog(const cdf_header_t *, const cdf_stream_t *, - cdf_catalog_t **); -int cdf_print_classid(char *, size_t, const cdf_classid_t *); -int cdf_print_property_name(char *, size_t, uint32_t); -int cdf_print_elapsed_time(char *, size_t, cdf_timestamp_t); -uint16_t cdf_tole2(uint16_t); -uint32_t cdf_tole4(uint32_t); -uint64_t cdf_tole8(uint64_t); -char *cdf_ctime(const time_t *, char *); -char *cdf_u16tos8(char *, size_t, const uint16_t *); +file_protected size_t cdf_count_chain(const cdf_sat_t *, cdf_secid_t, size_t); +file_protected int cdf_read_long_sector_chain(const cdf_info_t *, + const cdf_header_t *, const cdf_sat_t *, cdf_secid_t, size_t, + cdf_stream_t *); +file_protected int cdf_read_short_sector_chain(const cdf_header_t *, + const cdf_sat_t *, const cdf_stream_t *, cdf_secid_t, size_t, + cdf_stream_t *); +file_protected int cdf_read_sector_chain(const cdf_info_t *, + const cdf_header_t *, const cdf_sat_t *, const cdf_sat_t *, + const cdf_stream_t *, cdf_secid_t, size_t, cdf_stream_t *); +file_protected int cdf_read_dir(const cdf_info_t *, const cdf_header_t *, + const cdf_sat_t *, cdf_dir_t *); +file_protected int cdf_read_ssat(const cdf_info_t *, const cdf_header_t *, + const cdf_sat_t *, cdf_sat_t *); +file_protected int cdf_read_short_stream(const cdf_info_t *, + const cdf_header_t *, const cdf_sat_t *, const cdf_dir_t *, + cdf_stream_t *, const cdf_directory_t **); +file_protected int cdf_read_property_info(const cdf_stream_t *, + const cdf_header_t *, uint32_t, cdf_property_info_t **, size_t *, size_t *); +file_protected int cdf_read_user_stream(const cdf_info_t *, + const cdf_header_t *, const cdf_sat_t *, const cdf_sat_t *, + const cdf_stream_t *, const cdf_dir_t *, const char *, cdf_stream_t *); +file_protected int cdf_find_stream(const cdf_dir_t *, const char *, int); +file_protected int cdf_zero_stream(cdf_stream_t *); +file_protected int cdf_read_doc_summary_info(const cdf_info_t *, + const cdf_header_t *, const cdf_sat_t *, const cdf_sat_t *, + const cdf_stream_t *, const cdf_dir_t *, cdf_stream_t *); +file_protected int cdf_read_summary_info(const cdf_info_t *, + const cdf_header_t *, const cdf_sat_t *, const cdf_sat_t *, + const cdf_stream_t *, const cdf_dir_t *, cdf_stream_t *); +file_protected int cdf_unpack_summary_info(const cdf_stream_t *, + const cdf_header_t *, cdf_summary_info_header_t *, cdf_property_info_t **, + size_t *); +file_protected int cdf_unpack_catalog(const cdf_header_t *, + const cdf_stream_t *, cdf_catalog_t **); +file_protected int cdf_print_classid(char *, size_t, const cdf_classid_t *); +file_protected int cdf_print_property_name(char *, size_t, uint32_t); +file_protected int cdf_print_elapsed_time(char *, size_t, cdf_timestamp_t); +file_protected uint16_t cdf_tole2(uint16_t); +file_protected uint32_t cdf_tole4(uint32_t); +file_protected uint64_t cdf_tole8(uint64_t); +file_protected char *cdf_ctime(const time_t *, char *); +file_protected char *cdf_u16tos8(char *, size_t, const uint16_t *); #ifdef CDF_DEBUG -void cdf_dump_header(const cdf_header_t *); -void cdf_dump_sat(const char *, const cdf_sat_t *, size_t); -void cdf_dump(const void *, size_t); -void cdf_dump_stream(const cdf_stream_t *); -void cdf_dump_dir(const cdf_info_t *, const cdf_header_t *, const cdf_sat_t *, - const cdf_sat_t *, const cdf_stream_t *, const cdf_dir_t *); -void cdf_dump_property_info(const cdf_property_info_t *, size_t); -void cdf_dump_summary_info(const cdf_header_t *, const cdf_stream_t *); -void cdf_dump_catalog(const cdf_header_t *, const cdf_stream_t *); +file_protected void cdf_dump_header(const cdf_header_t *); +file_protected void cdf_dump_sat(const char *, const cdf_sat_t *, size_t); +file_protected void cdf_dump(const void *, size_t); +file_protected void cdf_dump_stream(const cdf_stream_t *); +file_protected void cdf_dump_dir(const cdf_info_t *, const cdf_header_t *, + const cdf_sat_t *, const cdf_sat_t *, const cdf_stream_t *, + const cdf_dir_t *); +file_protected void cdf_dump_property_info(const cdf_property_info_t *, size_t); +file_protected void cdf_dump_summary_info(const cdf_header_t *, + const cdf_stream_t *); +file_protected void cdf_dump_catalog(const cdf_header_t *, + const cdf_stream_t *); #endif diff --git a/src/cdf_time.c b/src/cdf_time.c index 56eda5ecda30..fc9b57bc1f3f 100644 --- a/src/cdf_time.c +++ b/src/cdf_time.c @@ -27,7 +27,7 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: cdf_time.c,v 1.24 2023/07/17 15:54:44 christos Exp $") +FILE_RCSID("@(#)$File: cdf_time.c,v 1.25 2024/11/25 21:24:59 christos Exp $") #endif #include <time.h> @@ -41,14 +41,14 @@ FILE_RCSID("@(#)$File: cdf_time.c,v 1.24 2023/07/17 15:54:44 christos Exp $") #define isleap(y) ((((y) % 4) == 0) && \ ((((y) % 100) != 0) || (((y) % 400) == 0))) -static const int mdays[] = { +file_private const int mdays[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; /* * Return the number of days between jan 01 1601 and jan 01 of year. */ -static int +file_private int cdf_getdays(int year) { int days = 0; @@ -63,7 +63,7 @@ cdf_getdays(int year) /* * Return the day within the month */ -static int +file_private int cdf_getday(int year, int days) { size_t m; @@ -80,7 +80,7 @@ cdf_getday(int year, int days) /* * Return the 0...11 month number. */ -static int +file_private int cdf_getmonth(int year, int days) { size_t m; @@ -95,12 +95,12 @@ cdf_getmonth(int year, int days) return CAST(int, m); } -int +file_protected int cdf_timestamp_to_timespec(struct timespec *ts, cdf_timestamp_t t) { struct tm tm; #ifdef HAVE_STRUCT_TM_TM_ZONE - static char UTC[] = "UTC"; + file_private char UTC[] = "UTC"; #endif int rdays; @@ -142,7 +142,7 @@ cdf_timestamp_to_timespec(struct timespec *ts, cdf_timestamp_t t) return 0; } -int +file_protected int /*ARGSUSED*/ cdf_timespec_to_timestamp(cdf_timestamp_t *t, const struct timespec *ts) { @@ -165,7 +165,7 @@ cdf_timespec_to_timestamp(cdf_timestamp_t *t, const struct timespec *ts) return 0; } -char * +file_protected char * cdf_ctime(const time_t *sec, char *buf) { char *ptr = *sec > MAX_CTIME ? NULL : ctime_r(sec, buf); @@ -188,8 +188,8 @@ main(int argc, char *argv[]) { struct timespec ts; char buf[25]; - static const cdf_timestamp_t tst = 0x01A5E403C2D59C00ULL; - static const char *ref = "Sat Apr 23 01:30:00 1977"; + file_private const cdf_timestamp_t tst = 0x01A5E403C2D59C00ULL; + file_private const char *ref = "Sat Apr 23 01:30:00 1977"; char *p, *q; cdf_timestamp_to_timespec(&ts, tst); diff --git a/src/compress.c b/src/compress.c index 70e90eb5f107..7144fe7ba828 100644 --- a/src/compress.c +++ b/src/compress.c @@ -35,7 +35,7 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: compress.c,v 1.157 2023/05/21 15:59:58 christos Exp $") +FILE_RCSID("@(#)$File: compress.c,v 1.158 2024/11/10 16:52:27 christos Exp $") #endif #include "magic.h" @@ -46,6 +46,7 @@ FILE_RCSID("@(#)$File: compress.c,v 1.157 2023/05/21 15:59:58 christos Exp $") #ifdef HAVE_SPAWN_H #include <spawn.h> #endif +#include <stdio.h> #include <string.h> #include <errno.h> #include <ctype.h> @@ -90,6 +91,13 @@ typedef void (*sig_t)(int); #include <lzlib.h> #endif +#ifdef notyet +#if defined(HAVE_LRZIP_H) && defined(LRZIPLIBSUPPORT) +#define BUILTIN_LRZIP +#include <Lrzip.h> +#endif +#endif + #ifdef DEBUG int tty = -1; #define DPRINTF(...) do { \ @@ -186,6 +194,7 @@ file_private const struct { #define METH_BZIP 7 #define METH_XZ 9 #define METH_LZIP 8 +#define METH_LRZIP 10 #define METH_ZSTD 12 #define METH_LZMA 13 #define METH_ZLIB 14 @@ -243,6 +252,11 @@ file_private int uncompresszstd(const unsigned char *, unsigned char **, size_t, file_private int uncompresslzlib(const unsigned char *, unsigned char **, size_t, size_t *, int); #endif +#ifdef BUILTIN_LRZIP +file_private int uncompresslrzip(const unsigned char *, unsigned char **, size_t, + size_t *, int); +#endif + static int makeerror(unsigned char **, size_t *, const char *, ...) __attribute__((__format__(__printf__, 3, 4))); @@ -829,6 +843,59 @@ err: } #endif +#ifdef BUILTIN_LRZIP +file_private int +uncompresslrzip(const unsigned char *old, unsigned char **newch, + size_t bytes_max, size_t *n, int extra __attribute__((__unused__))) +{ + Lrzip *lr; + FILE *in, *out; + int res = OKDATA; + + DPRINTF("builtin rlzip decompression\n"); + lr = lrzip_new(LRZIP_MODE_DECOMPRESS); + if (lr == NULL) { + res = makeerror(newch, n, "unable to create an lrzip decoder"); + goto out0; + } + lrzip_config_env(lr); + in = fmemopen(RCAST(void *, old), bytes_max, "r"); + if (in == NULL) { + res = makeerror(newch, n, "unable to construct input file"); + goto out1; + } + if (!lrzip_file_add(lr, in)) { + res = makeerror(newch, n, "unable to add input file"); + goto out2; + } + *newch = calloc(*n = 2 * bytes_max, 1); + if (*newch == NULL) { + res = makeerror(newch, n, "unable to allocate output buffer"); + goto out2; + } + out = fmemopen(*newch, *n, "w"); + if (out == NULL) { + free(*newch); + res = makeerror(newch, n, "unable to allocate output file"); + goto out2; + } + lrzip_outfile_set(lr, out); + if (lrzip_run(lr)) { + free(*newch); + res = makeerror(newch, n, "unable to decompress file"); + goto out3; + } + *n = (size_t)ftell(out); +out3: + fclose(out); +out2: + fclose(in); +out1: + lrzip_free(lr); +out0: + return res; +} +#endif static int makeerror(unsigned char **buf, size_t *len, const char *fmt, ...) @@ -1007,6 +1074,10 @@ methodname(size_t method) case METH_LZIP: return "lzlib"; #endif +#ifdef BUILTIN_LRZIP + case METH_LRZIP: + return "lrzip"; +#endif default: return compr[method].argv[0]; } @@ -1040,6 +1111,10 @@ getdecompressor(size_t method))(const unsigned char *, unsigned char **, size_t, case METH_LZIP: return uncompresslzlib; #endif +#ifdef BUILTIN_LRZIP + case METH_LRZIP: + return uncompresslrzip; +#endif default: return NULL; } diff --git a/src/der.c b/src/der.c index 3a036517d019..a18446d63523 100644 --- a/src/der.c +++ b/src/der.c @@ -35,7 +35,7 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: der.c,v 1.27 2022/09/24 20:30:13 christos Exp $") +FILE_RCSID("@(#)$File: der.c,v 1.28 2024/11/25 22:31:53 christos Exp $") #endif #else #define SIZE_T_FORMAT "z" @@ -132,20 +132,20 @@ static const char *der__tag[] = { #endif #ifdef TEST_DER -static uint8_t +file_private uint8_t getclass(uint8_t c) { return c >> 6; } -static uint8_t +file_private uint8_t gettype(uint8_t c) { return (c >> 5) & 1; } #endif -static uint32_t +file_private uint32_t gettag(const uint8_t *c, size_t *p, size_t l) { uint32_t tag; @@ -178,7 +178,7 @@ gettag(const uint8_t *c, size_t *p, size_t l) * Returns the length, or DER_BAD if the end of the input is reached or the * length exceeds the remaining input. */ -static uint32_t +file_private uint32_t getlength(const uint8_t *c, size_t *p, size_t l) { uint8_t digits, i; @@ -221,7 +221,7 @@ getlength(const uint8_t *c, size_t *p, size_t l) return CAST(uint32_t, len); } -static const char * +file_private const char * der_tag(char *buf, size_t len, uint32_t tag) { if (tag < DER_TAG_LAST) @@ -232,7 +232,7 @@ der_tag(char *buf, size_t len, uint32_t tag) } #ifndef TEST_DER -static int +file_private int der_data(char *buf, size_t blen, uint32_t tag, const void *q, uint32_t len) { uint32_t i; @@ -260,7 +260,7 @@ der_data(char *buf, size_t blen, uint32_t tag, const void *q, uint32_t len) return len * 2; } -int32_t +file_protected int32_t der_offs(struct magic_set *ms, struct magic *m, size_t nbytes) { const uint8_t *b = RCAST(const uint8_t *, ms->search.s); @@ -299,7 +299,7 @@ der_offs(struct magic_set *ms, struct magic *m, size_t nbytes) return CAST(int32_t, offs); } -int +file_protected int der_cmp(struct magic_set *ms, struct magic *m) { const uint8_t *b = RCAST(const uint8_t *, ms->search.s); @@ -382,7 +382,7 @@ val: #endif #ifdef TEST_DER -static void +file_private void printtag(uint32_t tag, const void *q, uint32_t len) { const uint8_t *d = q; @@ -402,7 +402,7 @@ printtag(uint32_t tag, const void *q, uint32_t len) printf("\n"); } -static void +file_private void printdata(size_t level, const void *v, size_t x, size_t l) { const uint8_t *p = v, *ep = p + l; diff --git a/src/der.h b/src/der.h index 3333239201f5..1ffc6f8c28fc 100644 --- a/src/der.h +++ b/src/der.h @@ -24,5 +24,5 @@ * POSSIBILITY OF SUCH DAMAGE. */ -extern int der_offs(struct magic_set *, struct magic *, size_t); -extern int der_cmp(struct magic_set *, struct magic *); +file_protected int der_offs(struct magic_set *, struct magic *, size_t); +file_protected int der_cmp(struct magic_set *, struct magic *); diff --git a/src/encoding.c b/src/encoding.c index 9dbb9dd93ebf..4b0d45e29db1 100644 --- a/src/encoding.c +++ b/src/encoding.c @@ -35,7 +35,7 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: encoding.c,v 1.42 2022/12/26 17:31:14 christos Exp $") +FILE_RCSID("@(#)$File: encoding.c,v 1.43 2024/10/29 20:56:48 christos Exp $") #endif /* lint */ #include "magic.h" @@ -334,7 +334,7 @@ static const uint8_t first[] = { // acceptRange gives the range of valid values for the second byte in a UTF-8 // sequence. -struct accept_range { +static struct accept_range { uint8_t lo; // lowest value for second byte. uint8_t hi; // highest value for second byte. } accept_ranges[16] = { diff --git a/src/file.c b/src/file.c index 31c1035ca0e4..947fb763541b 100644 --- a/src/file.c +++ b/src/file.c @@ -32,7 +32,7 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: file.c,v 1.215 2023/05/21 17:08:34 christos Exp $") +FILE_RCSID("@(#)$File: file.c,v 1.217 2024/09/29 16:49:25 christos Exp $") #endif /* lint */ #include "magic.h" @@ -166,6 +166,8 @@ file_private struct { MAGIC_PARAM_NAME_MAX, 0 }, { "regex", 0, FILE_REGEX_MAX, "length limit for REGEX searches", MAGIC_PARAM_REGEX_MAX, 0 }, + { "magwarn", 0, FILE_MAGWARN_MAX, "maximum number of magic warnings", + MAGIC_PARAM_MAGWARN_MAX, 0 }, }; file_private int posixly; @@ -363,11 +365,7 @@ main(int argc, char *argv[]) return e; #ifdef HAVE_LIBSECCOMP -#if 0 - if (sandbox && enable_sandbox_basic() == -1) -#else - if (sandbox && enable_sandbox_full() == -1) -#endif + if (sandbox && enable_sandbox() == -1) file_err(EXIT_FAILURE, "SECCOMP initialisation failed"); if (sandbox) flags |= MAGIC_NO_COMPRESS_FORK; diff --git a/src/file.h b/src/file.h index 2e0494d2fd14..99226327d7e3 100644 --- a/src/file.h +++ b/src/file.h @@ -27,7 +27,7 @@ */ /* * file.h - definitions for file(1) program - * @(#)$File: file.h,v 1.247 2023/07/27 19:40:22 christos Exp $ + * @(#)$File: file.h,v 1.258 2024/11/27 15:37:00 christos Exp $ */ #ifndef __file_h__ @@ -107,16 +107,23 @@ #define file_private static -#if HAVE_VISIBILITY && !defined(WIN32) -#define file_public __attribute__ ((__visibility__("default"))) -#ifndef file_protected -#define file_protected __attribute__ ((__visibility__("hidden"))) -#endif +#if HAVE_VISIBILITY +# if defined(WIN32) +# define file_public __declspec(dllexport) +# ifndef file_protected +# define file_protected +# endif +# else +# define file_public __attribute__((__visibility__("default"))) +# ifndef file_protected +# define file_protected __attribute__((__visibility__("hidden"))) +# endif +# endif #else -#define file_public -#ifndef file_protected -#define file_protected -#endif +# define file_public +# ifndef file_protected +# define file_protected +# endif #endif #ifndef __arraycount @@ -159,18 +166,21 @@ /* * Dec 31, 23:59:59 9999 * we need to make sure that we don't exceed 9999 because some libc - * implementations like muslc crash otherwise + * implementations like muslc crash otherwise. If you are unlucky + * to be running on a system with a 32 bit time_t, then it is even less. */ -#define MAX_CTIME CAST(time_t, 0x3afff487cfULL) +#define MAX_CTIME \ + CAST(time_t, sizeof(time_t) > 4 ? 0x3afff487cfULL : 0x7fffffffULL) #define FILE_BADSIZE CAST(size_t, ~0ul) #define MAXDESC 64 /* max len of text description/MIME type */ #define MAXMIME 80 /* max len of text MIME type */ +#define MAXEXT 120 /* max len of text extensions */ #define MAXstring 128 /* max len of "string" types */ #define MAGICNO 0xF11E041C -#define VERSIONNO 18 -#define FILE_MAGICSIZE 376 +#define VERSIONNO 20 +#define FILE_MAGICSIZE 432 #define FILE_GUID_SIZE sizeof("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX") @@ -208,8 +218,7 @@ union VALUETYPE { struct magic { /* Word 1 */ - uint16_t cont_level; /* level of ">" */ - uint8_t flag; + uint16_t flag; #define INDIR 0x01 /* if '(...)' appears */ #define OFFADD 0x02 /* if '>&' or '>...(&' appears */ #define INDIROFFADD 0x04 /* if '>&(' appears */ @@ -219,7 +228,9 @@ struct magic { for top-level tests) */ #define TEXTTEST 0x40 /* for passing to file_softmagic */ #define OFFNEGATIVE 0x80 /* relative to the end of file */ +#define OFFPOSITIVE 0x100 /* relative to the beginning of file */ + uint8_t cont_level; /* level of ">" */ uint8_t factor; /* Word 2 */ @@ -372,7 +383,7 @@ struct magic { /* Words 61-62 */ char apple[8]; /* APPLE CREATOR/TYPE */ /* Words 63-78 */ - char ext[64]; /* Popular extensions */ + char ext[MAXEXT]; /* Popular extensions from old 64 raised by 56 for sqlite/sqlite3/... */ }; #define BIT(A) (1 << (A)) @@ -467,9 +478,11 @@ struct magic_set { int flags; /* Control magic tests. */ int event_flags; /* Note things that happened. */ #define EVENT_HAD_ERR 0x01 + char *fnamebuf; /* holding the full path/buffer */ const char *file; size_t line; /* current magic line number */ mode_t mode; /* copy of current stat mode */ + uint16_t magwarn; /* current number of warnings */ /* data for searches */ struct { @@ -488,9 +501,10 @@ struct magic_set { uint16_t elf_phnum_max; uint16_t elf_notes_max; uint16_t regex_max; + uint16_t magwarn_max; size_t bytes_max; /* number of bytes to read from file */ size_t encoding_max; /* bytes to look for encoding */ - size_t elf_shsize_max; + size_t elf_shsize_max; #ifndef FILE_BYTES_MAX # define FILE_BYTES_MAX (7 * 1024 * 1024)/* how much of the file to look at */ #endif /* above 0x6ab0f4 map offset for HelveticaNeue.dfont */ @@ -499,9 +513,10 @@ struct magic_set { #define FILE_ELF_SHNUM_MAX 32768 #define FILE_ELF_SHSIZE_MAX (128 * 1024 * 1024) #define FILE_INDIR_MAX 50 -#define FILE_NAME_MAX 50 +#define FILE_NAME_MAX 100 #define FILE_REGEX_MAX 8192 #define FILE_ENCODING_MAX (64 * 1024) +#define FILE_MAGWARN_MAX 64 #if defined(HAVE_NEWLOCALE) && defined(HAVE_USELOCALE) && defined(HAVE_FREELOCALE) #define USE_C_LOCALE locale_t c_lc_ctype; @@ -583,6 +598,8 @@ file_protected void file_magerror(struct magic_set *, const char *, ...) __attribute__((__format__(__printf__, 2, 3))); file_protected void file_magwarn(struct magic_set *, const char *, ...) __attribute__((__format__(__printf__, 2, 3))); +file_protected void file_magwarn1(const char *, ...) + __attribute__((__format__(__printf__, 1, 2))); file_protected void file_mdump(struct magic *); file_protected void file_showstr(FILE *, const char *, size_t); file_protected size_t file_mbswidth(struct magic_set *, const char *); @@ -628,8 +645,8 @@ file_protected file_pushbuf_t *file_push_buffer(struct magic_set *); file_protected char *file_pop_buffer(struct magic_set *, file_pushbuf_t *); #ifndef COMPILE_ONLY -extern const char *file_names[]; -extern const size_t file_nnames; +extern file_protected const char *file_names[]; +extern file_protected const size_t file_nnames; #endif #ifndef HAVE_PREAD @@ -676,15 +693,7 @@ const char *fmtcheck(const char *, const char *) #endif #ifdef HAVE_LIBSECCOMP -// basic filter -// this mode should not interfere with normal operations -// only some dangerous syscalls are blacklisted -int enable_sandbox_basic(void); - -// enhanced filter -// this mode allows only the necessary syscalls used during normal operation -// extensive testing required !!! -int enable_sandbox_full(void); +int enable_sandbox(void); #endif file_protected const char *file_getprogname(void); diff --git a/src/funcs.c b/src/funcs.c index af15d6988635..e7e8cb0fc184 100644 --- a/src/funcs.c +++ b/src/funcs.c @@ -27,7 +27,7 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: funcs.c,v 1.140 2023/05/21 17:08:34 christos Exp $") +FILE_RCSID("@(#)$File: funcs.c,v 1.142 2023/07/30 14:41:14 christos Exp $") #endif /* lint */ #include "magic.h" @@ -673,6 +673,7 @@ check_regex(struct magic_set *ms, const char *pat) char sbuf[512]; unsigned char oc = '\0'; const char *p; + unsigned long l; for (p = pat; *p; p++) { unsigned char c = *p; @@ -685,6 +686,19 @@ check_regex(struct magic_set *ms, const char *pat) file_printable(ms, sbuf, sizeof(sbuf), pat, len)); return -1; } + if (c == '{') { + char *ep, *eep; + errno = 0; + l = strtoul(p + 1, &ep, 10); + if (ep != p + 1 && l > 1000) + goto bounds; + + if (*ep == ',') { + l = strtoul(ep + 1, &eep, 10); + if (eep != ep + 1 && l > 1000) + goto bounds; + } + } oc = c; if (isprint(c) || isspace(c) || c == '\b' || c == 0x8a) // XXX: apple magic fixme @@ -696,6 +710,9 @@ check_regex(struct magic_set *ms, const char *pat) return -1; } return 0; +bounds: + file_magwarn(ms, "bounds too large %ld in regex `%s'", l, pat); + return -1; } file_protected int diff --git a/src/is_csv.c b/src/is_csv.c index 7b95e3b85164..6107a250b6e1 100644 --- a/src/is_csv.c +++ b/src/is_csv.c @@ -32,12 +32,13 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: is_csv.c,v 1.13 2023/07/17 16:08:17 christos Exp $") +FILE_RCSID("@(#)$File: is_csv.c,v 1.15 2024/05/18 15:16:13 christos Exp $") #endif #include <string.h> #include "magic.h" #else +#define CAST(a, b) ((a)(b)) #include <sys/types.h> #endif @@ -107,7 +108,7 @@ csv_parse(const unsigned char *uc, const unsigned char *ue) nl++; #if CSV_LINES if (nl == CSV_LINES) - return tf != 0 && tf == nf; + return tf > 1 && tf == nf; #endif if (tf == 0) { // First time and no fields, give up @@ -125,7 +126,7 @@ csv_parse(const unsigned char *uc, const unsigned char *ue) break; } } - return tf && nl >= 2; + return tf > 1 && nl >= 2; } #ifndef TEST @@ -186,7 +187,7 @@ main(int argc, char *argv[]) if (fstat(fd, &st) == -1) err(EXIT_FAILURE, "Can't stat `%s'", argv[1]); - if ((p = CAST(char *, malloc(st.st_size))) == NULL) + if ((p = CAST(unsigned char *, malloc(st.st_size))) == NULL) err(EXIT_FAILURE, "Can't allocate %jd bytes", (intmax_t)st.st_size); if (read(fd, p, st.st_size) != st.st_size) diff --git a/src/magic.c b/src/magic.c index 052f99752c58..def46fa39f89 100644 --- a/src/magic.c +++ b/src/magic.c @@ -33,7 +33,7 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: magic.c,v 1.121 2023/02/09 17:45:19 christos Exp $") +FILE_RCSID("@(#)$File: magic.c,v 1.123 2023/12/29 18:04:48 christos Exp $") #endif /* lint */ #include "magic.h" @@ -612,33 +612,37 @@ magic_setparam(struct magic_set *ms, int param, const void *val) { if (ms == NULL) return -1; + const size_t v = *CAST(const size_t *, val); switch (param) { case MAGIC_PARAM_INDIR_MAX: - ms->indir_max = CAST(uint16_t, *CAST(const size_t *, val)); + ms->indir_max = CAST(uint16_t, v); return 0; case MAGIC_PARAM_NAME_MAX: - ms->name_max = CAST(uint16_t, *CAST(const size_t *, val)); + ms->name_max = CAST(uint16_t, v); return 0; case MAGIC_PARAM_ELF_PHNUM_MAX: - ms->elf_phnum_max = CAST(uint16_t, *CAST(const size_t *, val)); + ms->elf_phnum_max = CAST(uint16_t, v); return 0; case MAGIC_PARAM_ELF_SHNUM_MAX: - ms->elf_shnum_max = CAST(uint16_t, *CAST(const size_t *, val)); + ms->elf_shnum_max = CAST(uint16_t, v); return 0; case MAGIC_PARAM_ELF_SHSIZE_MAX: - ms->elf_shsize_max = *CAST(const size_t *, val); + ms->elf_shsize_max = v; return 0; case MAGIC_PARAM_ELF_NOTES_MAX: - ms->elf_notes_max = CAST(uint16_t, *CAST(const size_t *, val)); + ms->elf_notes_max = CAST(uint16_t, v); return 0; case MAGIC_PARAM_REGEX_MAX: - ms->regex_max = CAST(uint16_t, *CAST(const size_t *, val)); + ms->regex_max = CAST(uint16_t, v); return 0; case MAGIC_PARAM_BYTES_MAX: - ms->bytes_max = *CAST(const size_t *, val); + ms->bytes_max = v; return 0; case MAGIC_PARAM_ENCODING_MAX: - ms->encoding_max = *CAST(const size_t *, val); + ms->encoding_max = v; + return 0; + case MAGIC_PARAM_MAGWARN_MAX: + ms->magwarn_max = v; return 0; default: errno = EINVAL; @@ -679,6 +683,9 @@ magic_getparam(struct magic_set *ms, int param, void *val) case MAGIC_PARAM_ENCODING_MAX: *CAST(size_t *, val) = ms->encoding_max; return 0; + case MAGIC_PARAM_MAGWARN_MAX: + *CAST(size_t *, val) = ms->magwarn_max; + return 0; default: errno = EINVAL; return -1; diff --git a/src/magic.h.in b/src/magic.h.in index 01886026b886..142d7e0d4b4d 100644 --- a/src/magic.h.in +++ b/src/magic.h.in @@ -97,7 +97,7 @@ b\13apple\0\ b\14no_check_compress\0\ b\15no_check_tar\0\ b\16no_check_soft\0\ -b\17no_check_sapptype\0\ +b\17no_check_apptype\0\ b\20no_check_elf\0\ b\21no_check_text\0\ b\22no_check_cdf\0\ @@ -154,7 +154,8 @@ int magic_errno(magic_t); #define MAGIC_PARAM_REGEX_MAX 5 #define MAGIC_PARAM_BYTES_MAX 6 #define MAGIC_PARAM_ENCODING_MAX 7 -#define MAGIC_PARAM_ELF_SHSIZE_MAX 8 +#define MAGIC_PARAM_ELF_SHSIZE_MAX 8 +#define MAGIC_PARAM_MAGWARN_MAX 9 int magic_setparam(magic_t, int, const void *); int magic_getparam(magic_t, int, void *); diff --git a/src/mygetopt.h b/src/mygetopt.h index d766762631d1..ccc363ec699e 100644 --- a/src/mygetopt.h +++ b/src/mygetopt.h @@ -1,4 +1,4 @@ -/* $NetBSD: getopt.h,v 1.8 2007/11/06 19:21:18 christos Exp $ */ +/* $NetBSD: getopt.h,v 1.11 2008/04/28 20:22:54 martin Exp $ */ /*- * Copyright (c) 2000 The NetBSD Foundation, Inc. @@ -15,13 +15,6 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the NetBSD - * Foundation, Inc. and its contributors. - * 4. Neither the name of The NetBSD Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED diff --git a/src/print.c b/src/print.c index 9ab383aad079..361e73be7740 100644 --- a/src/print.c +++ b/src/print.c @@ -32,7 +32,7 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: print.c,v 1.99 2023/07/17 16:40:57 christos Exp $") +FILE_RCSID("@(#)$File: print.c,v 1.106 2024/09/01 13:50:01 christos Exp $") #endif /* lint */ #include <string.h> @@ -52,7 +52,8 @@ file_mdump(struct magic *m) static const char optyp[] = { FILE_OPS }; char tbuf[256]; - (void) fprintf(stderr, "%u: %.*s %d", m->lineno, + (void) fprintf(stderr, "%s, %u: %.*s %d", + m->desc[0] == '\0' ? m->desc + 1 : "*unknown*", m->lineno, (m->cont_level & 7) + 1, ">>>>>>>>", m->offset); if (m->flag & INDIR) { @@ -241,23 +242,55 @@ file_mdump(struct magic *m) } #endif +static void __attribute__((__format__(__printf__, 1, 0))) +file_vmagwarn(const char *f, va_list va) +{ + /* cuz we use stdout for most, stderr here */ + (void) fflush(stdout); + + (void) fprintf(stderr, "Warning: "); + (void) vfprintf(stderr, f, va); + (void) fputc('\n', stderr); +} + +/*VARARGS*/ +file_protected void +file_magwarn1(const char *f, ...) +{ + va_list va; + + va_start(va, f); + file_vmagwarn(f, va); + va_end(va); +} + + /*VARARGS*/ file_protected void file_magwarn(struct magic_set *ms, const char *f, ...) { va_list va; - /* cuz we use stdout for most, stderr here */ - (void) fflush(stdout); + if (++ms->magwarn == ms->magwarn_max) { + (void) fprintf(stderr, + "%s, %lu: Maximum number of warnings (%u) exceeded.\n", + ms->file, CAST(unsigned long, ms->line), + ms->magwarn_max); + (void) fprintf(stderr, + "%s, %lu: Additional warnings are suppressed.\n", + ms->file, CAST(unsigned long, ms->line)); + } + if (ms->magwarn >= ms->magwarn_max) { + return; + } - if (ms && ms->file) + if (ms->file) (void) fprintf(stderr, "%s, %lu: ", ms->file, CAST(unsigned long, ms->line)); - (void) fprintf(stderr, "Warning: "); + va_start(va, f); - (void) vfprintf(stderr, f, va); + file_vmagwarn(f, va); va_end(va); - (void) fputc('\n', stderr); } file_protected const char * @@ -289,6 +322,7 @@ file_fmtdatetime(char *buf, size_t bsize, uint64_t v, int flags) goto out; if (flags & FILE_T_LOCAL) { + tzset(); tm = localtime_r(&t, &tmz); } else { tm = gmtime_r(&t, &tmz); diff --git a/src/readelf.c b/src/readelf.c index a2a66ddd7278..fe4cf5413895 100644 --- a/src/readelf.c +++ b/src/readelf.c @@ -27,7 +27,7 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: readelf.c,v 1.190 2023/07/27 19:39:06 christos Exp $") +FILE_RCSID("@(#)$File: readelf.c,v 1.196 2024/11/11 15:49:11 christos Exp $") #endif #ifdef BUILTIN_ELF @@ -60,7 +60,10 @@ file_private uint16_t getu16(int, uint16_t); file_private uint32_t getu32(int, uint32_t); file_private uint64_t getu64(int, uint64_t); +#define NBUFSIZE 2024 #define SIZE_UNKNOWN CAST(off_t, -1) +#define NAMEEQUALS(n, v) \ + (namesz == sizeof(v) && memcmp(n, v, namesz) == 0) file_private int toomany(struct magic_set *ms, const char *name, uint16_t num) @@ -340,8 +343,9 @@ file_private const char os_style_names[][8] = { #define FLAGS_DID_NETBSD_CMODEL 0x0100 #define FLAGS_DID_NETBSD_EMULATION 0x0200 #define FLAGS_DID_NETBSD_UNKNOWN 0x0400 -#define FLAGS_IS_CORE 0x0800 -#define FLAGS_DID_AUXV 0x1000 +#define FLAGS_DID_ANDROID_MEMTAG 0x0800 +#define FLAGS_IS_CORE 0x1000 +#define FLAGS_DID_AUXV 0x2000 file_private int dophn_core(struct magic_set *ms, int clazz, int swap, int fd, off_t off, @@ -350,7 +354,7 @@ dophn_core(struct magic_set *ms, int clazz, int swap, int fd, off_t off, Elf32_Phdr ph32; Elf64_Phdr ph64; size_t offset, len; - unsigned char nbuf[BUFSIZ]; + unsigned char nbuf[NBUFSIZE]; ssize_t bufsize; off_t ph_off = off, offs; int ph_num = num; @@ -550,7 +554,7 @@ do_bid_note(struct magic_set *ms, unsigned char *nbuf, uint32_t type, int swap __attribute__((__unused__)), uint32_t namesz, uint32_t descsz, size_t noff, size_t doff, int *flags) { - if (namesz == 4 && strcmp(RCAST(char *, &nbuf[noff]), "GNU") == 0 && + if (NAMEEQUALS(RCAST(char *, &nbuf[noff]), "GNU") && type == NT_GNU_BUILD_ID && (descsz >= 4 && descsz <= 20)) { uint8_t desc[20]; const char *btype; @@ -578,7 +582,7 @@ do_bid_note(struct magic_set *ms, unsigned char *nbuf, uint32_t type, return -1; return 1; } - if (namesz == 4 && strcmp(RCAST(char *, &nbuf[noff]), "Go") == 0 && + if (namesz == 4 && memcmp(RCAST(char *, &nbuf[noff]), "Go", 3) == 0 && type == NT_GO_BUILD_ID && descsz < 128) { char buf[256]; if (file_printf(ms, ", Go BuildID=%s", @@ -597,8 +601,7 @@ do_os_note(struct magic_set *ms, unsigned char *nbuf, uint32_t type, { const char *name = RCAST(const char *, &nbuf[noff]); - if (namesz == 5 && strcmp(name, "SuSE") == 0 && - type == NT_GNU_VERSION && descsz == 2) { + if (NAMEEQUALS(name, "SuSE") && type == NT_GNU_VERSION && descsz == 2) { *flags |= FLAGS_DID_OS_NOTE; if (file_printf(ms, ", for SuSE %d.%d", nbuf[doff], nbuf[doff + 1]) == -1) @@ -606,8 +609,7 @@ do_os_note(struct magic_set *ms, unsigned char *nbuf, uint32_t type, return 1; } - if (namesz == 4 && strcmp(name, "GNU") == 0 && - type == NT_GNU_VERSION && descsz == 16) { + if (NAMEEQUALS(name, "GNU") && type == NT_GNU_VERSION && descsz == 16) { uint32_t desc[4]; memcpy(desc, &nbuf[doff], sizeof(desc)); @@ -645,26 +647,24 @@ do_os_note(struct magic_set *ms, unsigned char *nbuf, uint32_t type, return 1; } - if (namesz == 7 && strcmp(name, "NetBSD") == 0) { - if (type == NT_NETBSD_VERSION && descsz == 4) { - *flags |= FLAGS_DID_OS_NOTE; - if (do_note_netbsd_version(ms, swap, &nbuf[doff]) == -1) - return -1; - return 1; - } + if (NAMEEQUALS(name, "NetBSD") && + type == NT_NETBSD_VERSION && descsz == 4) { + *flags |= FLAGS_DID_OS_NOTE; + if (do_note_netbsd_version(ms, swap, &nbuf[doff]) == -1) + return -1; + return 1; } - if (namesz == 8 && strcmp(name, "FreeBSD") == 0) { - if (type == NT_FREEBSD_VERSION && descsz == 4) { - *flags |= FLAGS_DID_OS_NOTE; - if (do_note_freebsd_version(ms, swap, &nbuf[doff]) - == -1) - return -1; - return 1; - } + if (NAMEEQUALS(name, "FreeBSD") && + type == NT_FREEBSD_VERSION && descsz == 4) { + *flags |= FLAGS_DID_OS_NOTE; + if (do_note_freebsd_version(ms, swap, &nbuf[doff]) + == -1) + return -1; + return 1; } - if (namesz == 8 && strcmp(name, "OpenBSD") == 0 && + if (NAMEEQUALS(name, "OpenBSD") && type == NT_OPENBSD_VERSION && descsz == 4) { *flags |= FLAGS_DID_OS_NOTE; if (file_printf(ms, ", for OpenBSD") == -1) @@ -673,7 +673,7 @@ do_os_note(struct magic_set *ms, unsigned char *nbuf, uint32_t type, return 1; } - if (namesz == 10 && strcmp(name, "DragonFly") == 0 && + if (NAMEEQUALS(name, "DragonFly") && type == NT_DRAGONFLY_VERSION && descsz == 4) { uint32_t desc; *flags |= FLAGS_DID_OS_NOTE; @@ -686,6 +686,28 @@ do_os_note(struct magic_set *ms, unsigned char *nbuf, uint32_t type, return -1; return 1; } + + if (NAMEEQUALS(name, "Android") && + type == NT_ANDROID_VERSION && descsz >= 4) { + uint32_t api_level; + *flags |= FLAGS_DID_OS_NOTE; + memcpy(&api_level, &nbuf[doff], sizeof(api_level)); + api_level = elf_getu32(swap, api_level); + if (file_printf(ms, ", for Android %d", api_level) == -1) + return -1; + /* + * NDK r14 and later also include details of the NDK that + * built the binary. OS binaries (or binaries built by older + * NDKs) don't have this. The NDK release and build number + * are both 64-byte strings. + */ + if (descsz >= 4 + 64 + 64) { + if (file_printf(ms, ", built by NDK %.64s (%.64s)", + &nbuf[doff + 4], &nbuf[doff + 4 + 64]) == -1) + return -1; + } + } + return 0; } @@ -696,8 +718,7 @@ do_pax_note(struct magic_set *ms, unsigned char *nbuf, uint32_t type, { const char *name = RCAST(const char *, &nbuf[noff]); - if (namesz == 4 && strcmp(name, "PaX") == 0 && - type == NT_NETBSD_PAX && descsz == 4) { + if (NAMEEQUALS(name, "PaX") && type == NT_NETBSD_PAX && descsz == 4) { static const char *pax[] = { "+mprotect", "-mprotect", @@ -730,6 +751,45 @@ do_pax_note(struct magic_set *ms, unsigned char *nbuf, uint32_t type, } file_private int +do_memtag_note(struct magic_set *ms, unsigned char *nbuf, uint32_t type, + int swap, uint32_t namesz, uint32_t descsz, + size_t noff, size_t doff, int *flags) +{ + const char *name = RCAST(const char *, &nbuf[noff]); + + if (NAMEEQUALS(name, "Android") && + type == NT_ANDROID_MEMTAG && descsz == 4) { + static const char *memtag[] = { + "none", + "async", + "sync", + "heap", + "stack", + }; + uint32_t desc; + size_t i; + int did = 0; + + *flags |= FLAGS_DID_ANDROID_MEMTAG; + memcpy(&desc, &nbuf[doff], sizeof(desc)); + desc = elf_getu32(swap, desc); + + if (desc && file_printf(ms, ", Android Memtag: ") == -1) + return -1; + + for (i = 0; i < __arraycount(memtag); i++) { + if (((1 << CAST(int, i)) & desc) == 0) + continue; + if (file_printf(ms, "%s%s", did++ ? "," : "", + memtag[i]) == -1) + return -1; + } + return 1; + } + return 0; +} + +file_private int do_core_note(struct magic_set *ms, unsigned char *nbuf, uint32_t type, int swap, uint32_t namesz, uint32_t descsz, size_t noff, size_t doff, int *flags, size_t size, int clazz) @@ -753,17 +813,16 @@ do_core_note(struct magic_set *ms, unsigned char *nbuf, uint32_t type, * doesn't include the terminating null in the * name.... */ - if ((namesz == 4 && strncmp(name, "CORE", 4) == 0) || - (namesz == 5 && strcmp(name, "CORE") == 0)) { + if ((namesz == 4 && memcmp(name, "CORE", 4) == 0) || + NAMEEQUALS(name, "CORE")) { os_style = OS_STYLE_SVR4; } - if ((namesz == 8 && strcmp(name, "FreeBSD") == 0)) { + if (NAMEEQUALS(name, "FreeBSD")) { os_style = OS_STYLE_FREEBSD; } - if ((namesz >= 11 && strncmp(name, "NetBSD-CORE", 11) - == 0)) { + if ((namesz >= 11 && memcmp(name, "NetBSD-CORE", 11) == 0)) { os_style = OS_STYLE_NETBSD; } @@ -1136,10 +1195,10 @@ dodynamic(struct magic_set *ms, void *vbuf, size_t offset, size_t size, switch (xdh_tag) { case DT_FLAGS_1: - *pie = 1; - if (xdh_val & DF_1_PIE) + if (xdh_val & DF_1_PIE) { + *pie = 1; ms->mode |= 0111; - else + } else ms->mode &= ~0111; break; case DT_NEEDED: @@ -1239,6 +1298,11 @@ donote(struct magic_set *ms, void *vbuf, size_t offset, size_t size, namesz, descsz, noff, doff, flags)) return offset; } + if ((*flags & FLAGS_DID_ANDROID_MEMTAG) == 0) { + if (do_memtag_note(ms, nbuf, xnh_type, swap, + namesz, descsz, noff, doff, flags)) + return offset; + } if ((*flags & FLAGS_DID_CORE) == 0) { if (do_core_note(ms, nbuf, xnh_type, swap, @@ -1253,7 +1317,7 @@ donote(struct magic_set *ms, void *vbuf, size_t offset, size_t size, return offset; } - if (namesz == 7 && strcmp(RCAST(char *, &nbuf[noff]), "NetBSD") == 0) { + if (NAMEEQUALS(RCAST(char *, &nbuf[noff]), "NetBSD")) { int descw, flag; const char *str, *tag; if (descsz > 100) @@ -1507,6 +1571,8 @@ doshn(struct magic_set *ms, int clazz, int swap, int fd, off_t off, int num, for (;;) { Elf32_Cap cap32; Elf64_Cap cap64; + cap32.c_un.c_val = 0; + cap64.c_un.c_val = 0; char cbuf[/*CONSTCOND*/ MAX(sizeof(cap32), sizeof(cap64))]; if ((coff += xcap_sizeof) > @@ -1659,9 +1725,8 @@ dophn_exec(struct magic_set *ms, int clazz, int swap, int fd, off_t off, Elf32_Phdr ph32; Elf64_Phdr ph64; const char *linking_style; - unsigned char nbuf[BUFSIZ]; - char ibuf[BUFSIZ]; - char interp[BUFSIZ]; + unsigned char nbuf[NBUFSIZE]; + char interp[128]; ssize_t bufsize; size_t offset, align, need = 0; int pie = 0, dynamic = 0; @@ -1804,7 +1869,8 @@ dophn_exec(struct magic_set *ms, int clazz, int swap, int fd, off_t off, return -1; if (interp[0]) if (file_printf(ms, ", interpreter %s", file_printable(ms, - ibuf, sizeof(ibuf), interp, sizeof(interp))) == -1) + CAST(char *, nbuf), sizeof(nbuf), + interp, sizeof(interp))) == -1) return -1; return 0; } diff --git a/src/readelf.h b/src/readelf.h index 809d3f7573bd..53b9c0cc78a9 100644 --- a/src/readelf.h +++ b/src/readelf.h @@ -365,6 +365,37 @@ typedef struct { #define NT_GO_BUILD_ID 4 /* + * Android-specific note type: ident + * name: Android\0 + * namesz: 8 + * desc: + * uint32_t: api_version + * string[64]: NDK Version + * string[64]: version detail + * descsz: < 4+64+64 (4 for < r14) + */ +#define NT_ANDROID_VERSION 1 + +#define NT_ANDROID_KUSER 3 + +/* + * Android-specific note type: memory tag + * name: Android\0 + * namesz: 8 + * desc: + * uint32_t: bitmask + * descsz: 4 + */ +#define NT_ANDROID_MEMTAG 4 + +#define NT_ANDROID_MEMTAG_LEVEL_NONE 0 +#define NT_ANDROID_MEMTAG_LEVEL_ASYNC 1 +#define NT_ANDROID_MEMTAG_LEVEL_SYNC 2 +#define NT_ANDROID_MEMTAG_LEVEL_MASK 3 +#define NT_ANDROID_MEMTAG_HEAP 4 +#define NT_ANDROID_MEMTAG_STACK 8 + +/* * FreeBSD specific notes */ #define NT_FREEBSD_PROCSTAT_AUXV 16 diff --git a/src/seccomp.c b/src/seccomp.c index 87d4c49e7944..ce8243300095 100644 --- a/src/seccomp.c +++ b/src/seccomp.c @@ -27,7 +27,7 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: seccomp.c,v 1.25 2022/12/26 18:57:29 christos Exp $") +FILE_RCSID("@(#)$File: seccomp.c,v 1.29 2024/09/29 16:49:25 christos Exp $") #endif /* lint */ #if HAVE_LIBSECCOMP @@ -62,95 +62,7 @@ FILE_RCSID("@(#)$File: seccomp.c,v 1.25 2022/12/26 18:57:29 christos Exp $") static scmp_filter_ctx ctx; int -enable_sandbox_basic(void) -{ - - if (prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0) == -1) - return -1; - - if (prctl(PR_SET_DUMPABLE, 0, 0, 0, 0) == -1) - return -1; - - // initialize the filter - ctx = seccomp_init(SCMP_ACT_ALLOW); - if (ctx == NULL) - return 1; - - DENY_RULE(_sysctl); - DENY_RULE(acct); - DENY_RULE(add_key); - DENY_RULE(adjtimex); - DENY_RULE(chroot); - DENY_RULE(clock_adjtime); - DENY_RULE(create_module); - DENY_RULE(delete_module); - DENY_RULE(fanotify_init); - DENY_RULE(finit_module); - DENY_RULE(get_kernel_syms); - DENY_RULE(get_mempolicy); - DENY_RULE(init_module); - DENY_RULE(io_cancel); - DENY_RULE(io_destroy); - DENY_RULE(io_getevents); - DENY_RULE(io_setup); - DENY_RULE(io_submit); - DENY_RULE(ioperm); - DENY_RULE(iopl); - DENY_RULE(ioprio_set); - DENY_RULE(kcmp); -#ifdef __NR_kexec_file_load - DENY_RULE(kexec_file_load); -#endif - DENY_RULE(kexec_load); - DENY_RULE(keyctl); - DENY_RULE(lookup_dcookie); - DENY_RULE(mbind); - DENY_RULE(nfsservctl); - DENY_RULE(migrate_pages); - DENY_RULE(modify_ldt); - DENY_RULE(mount); - DENY_RULE(move_pages); - DENY_RULE(name_to_handle_at); - DENY_RULE(open_by_handle_at); - DENY_RULE(perf_event_open); - DENY_RULE(pivot_root); - DENY_RULE(process_vm_readv); - DENY_RULE(process_vm_writev); - DENY_RULE(ptrace); - DENY_RULE(reboot); - DENY_RULE(remap_file_pages); - DENY_RULE(request_key); - DENY_RULE(set_mempolicy); - DENY_RULE(swapoff); - DENY_RULE(swapon); - DENY_RULE(sysfs); - DENY_RULE(syslog); - DENY_RULE(tuxcall); - DENY_RULE(umount2); - DENY_RULE(uselib); - DENY_RULE(vmsplice); - - // blocking dangerous syscalls that file should not need - DENY_RULE (execve); - DENY_RULE (socket); - // ... - - - // applying filter... - if (seccomp_load (ctx) == -1) - goto out; - // free ctx after the filter has been loaded into the kernel - seccomp_release(ctx); - return 0; - -out: - seccomp_release(ctx); - return -1; -} - - -int -enable_sandbox_full(void) +enable_sandbox(void) { // prevent child processes from getting more priv e.g. via setuid, @@ -158,8 +70,10 @@ enable_sandbox_full(void) if (prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0) == -1) return -1; +#if 0 if (prctl(PR_SET_DUMPABLE, 0, 0, 0, 0) == -1) return -1; +#endif // initialize the filter ctx = seccomp_init(SCMP_ACT_KILL); @@ -232,6 +146,7 @@ enable_sandbox_full(void) ALLOW_RULE(sysinfo); ALLOW_RULE(umask); // Used in file_pipe2file() ALLOW_RULE(getpid); // Used by glibc in file_pipe2file() + ALLOW_RULE(getrandom); // Used by glibc in file_pipe2file() ALLOW_RULE(unlink); ALLOW_RULE(utimes); ALLOW_RULE(write); @@ -275,6 +190,14 @@ enable_sandbox_full(void) goto out; #endif +#if defined(PR_SET_VMA) && defined(PR_SET_VMA_ANON_NAME) + /* allow glibc to name malloc areas */ + if (seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(prctl), 2, + SCMP_CMP32(0, SCMP_CMP_EQ, PR_SET_VMA), + SCMP_CMP64(1, SCMP_CMP_EQ, PR_SET_VMA_ANON_NAME)) == -1) + goto out; +#endif + // applying filter... if (seccomp_load(ctx) == -1) goto out; diff --git a/src/softmagic.c b/src/softmagic.c index ea466ecd004b..59300a699140 100644 --- a/src/softmagic.c +++ b/src/softmagic.c @@ -32,7 +32,7 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: softmagic.c,v 1.345 2023/07/02 12:48:39 christos Exp $") +FILE_RCSID("@(#)$File: softmagic.c,v 1.350 2024/11/27 15:37:00 christos Exp $") #endif /* lint */ #include "magic.h" @@ -56,8 +56,8 @@ file_private int msetoffset(struct magic_set *, struct magic *, struct buffer *, const struct buffer *, size_t, unsigned int); file_private int magiccheck(struct magic_set *, struct magic *, file_regex_t **); file_private int mprint(struct magic_set *, struct magic *); -file_private int moffset(struct magic_set *, struct magic *, const struct buffer *, - int32_t *); +file_private int moffset(struct magic_set *, struct magic *, + const struct buffer *, size_t, int32_t *); file_private void mdebug(uint32_t, const char *, size_t); file_private int mcopy(struct magic_set *, union VALUETYPE *, int, int, const unsigned char *, uint32_t, size_t, struct magic *); @@ -71,41 +71,41 @@ file_private int cvt_64(union VALUETYPE *, const struct magic *); #define OFFSET_OOB(n, o, i) ((n) < CAST(uint32_t, (o)) || (i) > ((n) - (o))) #define BE64(p) ( \ - (CAST(uint64_t, (p)->hq[0])<<56)| \ - (CAST(uint64_t, (p)->hq[1])<<48)| \ - (CAST(uint64_t, (p)->hq[2])<<40)| \ - (CAST(uint64_t, (p)->hq[3])<<32)| \ - (CAST(uint64_t, (p)->hq[4])<<24)| \ - (CAST(uint64_t, (p)->hq[5])<<16)| \ - (CAST(uint64_t, (p)->hq[6])<<8)| \ - (CAST(uint64_t, (p)->hq[7]))) + (CAST(uint64_t, (p)[0])<<56)| \ + (CAST(uint64_t, (p)[1])<<48)| \ + (CAST(uint64_t, (p)[2])<<40)| \ + (CAST(uint64_t, (p)[3])<<32)| \ + (CAST(uint64_t, (p)[4])<<24)| \ + (CAST(uint64_t, (p)[5])<<16)| \ + (CAST(uint64_t, (p)[6])<<8)| \ + (CAST(uint64_t, (p)[7]))) #define LE64(p) ( \ - (CAST(uint64_t, (p)->hq[7])<<56)| \ - (CAST(uint64_t, (p)->hq[6])<<48)| \ - (CAST(uint64_t, (p)->hq[5])<<40)| \ - (CAST(uint64_t, (p)->hq[4])<<32)| \ - (CAST(uint64_t, (p)->hq[3])<<24)| \ - (CAST(uint64_t, (p)->hq[2])<<16)| \ - (CAST(uint64_t, (p)->hq[1])<<8)| \ - (CAST(uint64_t, (p)->hq[0]))) + (CAST(uint64_t, (p)[7])<<56)| \ + (CAST(uint64_t, (p)[6])<<48)| \ + (CAST(uint64_t, (p)[5])<<40)| \ + (CAST(uint64_t, (p)[4])<<32)| \ + (CAST(uint64_t, (p)[3])<<24)| \ + (CAST(uint64_t, (p)[2])<<16)| \ + (CAST(uint64_t, (p)[1])<<8)| \ + (CAST(uint64_t, (p)[0]))) #define LE32(p) ( \ - (CAST(uint32_t, (p)->hl[3])<<24)| \ - (CAST(uint32_t, (p)->hl[2])<<16)| \ - (CAST(uint32_t, (p)->hl[1])<<8)| \ - (CAST(uint32_t, (p)->hl[0]))) + (CAST(uint32_t, (p)[3])<<24)| \ + (CAST(uint32_t, (p)[2])<<16)| \ + (CAST(uint32_t, (p)[1])<<8)| \ + (CAST(uint32_t, (p)[0]))) #define BE32(p) ( \ - (CAST(uint32_t, (p)->hl[0])<<24)| \ - (CAST(uint32_t, (p)->hl[1])<<16)| \ - (CAST(uint32_t, (p)->hl[2])<<8)| \ - (CAST(uint32_t, (p)->hl[3]))) + (CAST(uint32_t, (p)[0])<<24)| \ + (CAST(uint32_t, (p)[1])<<16)| \ + (CAST(uint32_t, (p)[2])<<8)| \ + (CAST(uint32_t, (p)[3]))) #define ME32(p) ( \ - (CAST(uint32_t, (p)->hl[1])<<24)| \ - (CAST(uint32_t, (p)->hl[0])<<16)| \ - (CAST(uint32_t, (p)->hl[3])<<8)| \ - (CAST(uint32_t, (p)->hl[2]))) + (CAST(uint32_t, (p)[1])<<24)| \ + (CAST(uint32_t, (p)[0])<<16)| \ + (CAST(uint32_t, (p)[3])<<8)| \ + (CAST(uint32_t, (p)[2]))) -#define BE16(p) ((CAST(uint16_t, (p)->hs[0])<<8)|(CAST(uint16_t, (p)->hs[1]))) -#define LE16(p) ((CAST(uint16_t, (p)->hs[1])<<8)|(CAST(uint16_t, (p)->hs[0]))) +#define BE16(p) ((CAST(uint16_t, (p)[0])<<8)|(CAST(uint16_t, (p)[1]))) +#define LE16(p) ((CAST(uint16_t, (p)[1])<<8)|(CAST(uint16_t, (p)[0]))) #define SEXT(s,v,p) ((s) ? \ CAST(intmax_t, CAST(int##v##_t, p)) : \ CAST(intmax_t, CAST(uint##v##_t, p))) @@ -319,7 +319,7 @@ flush: } } - switch (moffset(ms, m, &bb, &ms->c.li[cont_level].off)) { + switch (moffset(ms, m, &bb, offset, &ms->c.li[cont_level].off)) { case -1: case 0: goto flush; @@ -449,7 +449,7 @@ flush: *need_separator = 1; } - switch (moffset(ms, m, &bb, + switch (moffset(ms, m, &bb, offset, &ms->c.li[cont_level].off)) { case -1: case 0: @@ -833,7 +833,7 @@ mprint(struct magic_set *ms, struct magic *m) file_private int moffset(struct magic_set *ms, struct magic *m, const struct buffer *b, - int32_t *op) + size_t offset, int32_t *op) { size_t nbytes = b->flen; int32_t o; @@ -930,17 +930,17 @@ moffset(struct magic_set *ms, struct magic *m, const struct buffer *b, case FILE_REGEX: if ((m->str_flags & REGEX_OFFSET_START) != 0) - o = CAST(int32_t, ms->search.offset); + o = CAST(int32_t, ms->search.offset - offset); else o = CAST(int32_t, - (ms->search.offset + ms->search.rm_len)); + (ms->search.offset + ms->search.rm_len - offset)); break; case FILE_SEARCH: if ((m->str_flags & REGEX_OFFSET_START) != 0) - o = CAST(int32_t, ms->search.offset); + o = CAST(int32_t, ms->search.offset - offset); else - o = CAST(int32_t, (ms->search.offset + m->vallen)); + o = CAST(int32_t, (ms->search.offset + m->vallen - offset)); break; case FILE_CLEAR: @@ -1217,14 +1217,14 @@ mconvert(struct magic_set *ms, struct magic *m, int flip) return 1; } case FILE_BESHORT: - p->h = CAST(short, BE16(p)); + p->h = CAST(short, BE16(p->hs)); if (cvt_16(p, m) == -1) goto out; return 1; case FILE_BELONG: case FILE_BEDATE: case FILE_BELDATE: - p->l = CAST(int32_t, BE32(p)); + p->l = CAST(int32_t, BE32(p->hl)); if (cvt_32(p, m) == -1) goto out; return 1; @@ -1232,19 +1232,19 @@ mconvert(struct magic_set *ms, struct magic *m, int flip) case FILE_BEQDATE: case FILE_BEQLDATE: case FILE_BEQWDATE: - p->q = CAST(uint64_t, BE64(p)); + p->q = CAST(uint64_t, BE64(p->hq)); if (cvt_64(p, m) == -1) goto out; return 1; case FILE_LESHORT: - p->h = CAST(short, LE16(p)); + p->h = CAST(short, LE16(p->hs)); if (cvt_16(p, m) == -1) goto out; return 1; case FILE_LELONG: case FILE_LEDATE: case FILE_LELDATE: - p->l = CAST(int32_t, LE32(p)); + p->l = CAST(int32_t, LE32(p->hl)); if (cvt_32(p, m) == -1) goto out; return 1; @@ -1252,14 +1252,14 @@ mconvert(struct magic_set *ms, struct magic *m, int flip) case FILE_LEQDATE: case FILE_LEQLDATE: case FILE_LEQWDATE: - p->q = CAST(uint64_t, LE64(p)); + p->q = CAST(uint64_t, LE64(p->hq)); if (cvt_64(p, m) == -1) goto out; return 1; case FILE_MELONG: case FILE_MEDATE: case FILE_MELDATE: - p->l = CAST(int32_t, ME32(p)); + p->l = CAST(int32_t, ME32(p->hl)); if (cvt_32(p, m) == -1) goto out; return 1; @@ -1268,12 +1268,12 @@ mconvert(struct magic_set *ms, struct magic *m, int flip) goto out; return 1; case FILE_BEFLOAT: - p->l = BE32(p); + p->l = BE32(p->hl); if (cvt_float(p, m) == -1) goto out; return 1; case FILE_LEFLOAT: - p->l = LE32(p); + p->l = LE32(p->hl); if (cvt_float(p, m) == -1) goto out; return 1; @@ -1282,12 +1282,12 @@ mconvert(struct magic_set *ms, struct magic *m, int flip) goto out; return 1; case FILE_BEDOUBLE: - p->q = BE64(p); + p->q = BE64(p->hq); if (cvt_double(p, m) == -1) goto out; return 1; case FILE_LEDOUBLE: - p->q = LE64(p); + p->q = LE64(p->hq); if (cvt_double(p, m) == -1) goto out; return 1; @@ -1417,6 +1417,7 @@ mcopy(struct magic_set *ms, union VALUETYPE *p, int type, int indir, } } *edst = '\0'; + *dst = '\0'; return 0; } case FILE_STRING: /* XXX - these two should not need */ @@ -1539,7 +1540,7 @@ msetoffset(struct magic_set *ms, struct magic *m, struct buffer *bb, ms->eoffset = ms->offset = CAST(int32_t, b->elen - m->offset); } else { offset = m->offset; - if (cont_level == 0) { + if ((m->flag & OFFPOSITIVE) || cont_level == 0) { normal: // XXX: Pass real fd, then who frees bb? buffer_init(bb, -1, NULL, b->fbuf, b->flen); @@ -1611,7 +1612,6 @@ mget(struct magic_set *ms, struct magic *m, const struct buffer *b, } - if (mcopy(ms, p, m->type, m->flag & INDIR, s, CAST(uint32_t, offset + o), CAST(uint32_t, nbytes), m) == -1) return -1; @@ -1633,61 +1633,65 @@ mget(struct magic_set *ms, struct magic *m, const struct buffer *b, intmax_t off = m->in_offset; const int sgn = m->in_op & FILE_OPSIGNED; if (m->in_op & FILE_OPINDIRECT) { - const union VALUETYPE *q = CAST(const union VALUETYPE *, - RCAST(const void *, s + offset + off)); + + uint8_t *hb = CCAST(uint8_t *, s + offset + off); + uint16_t hs; + uint32_t hl; int op; switch (op = cvt_flip(m->in_type, flip)) { case FILE_BYTE: if (OFFSET_OOB(nbytes, offset + off, 1)) return 0; - off = SEXT(sgn,8,q->b); + off = SEXT(sgn,8,hb[0]); break; case FILE_SHORT: if (OFFSET_OOB(nbytes, offset + off, 2)) return 0; - off = SEXT(sgn,16,q->h); + memcpy(&hs, hb, sizeof(hs)); + off = SEXT(sgn,16,hs); break; case FILE_BESHORT: if (OFFSET_OOB(nbytes, offset + off, 2)) return 0; - off = SEXT(sgn,16,BE16(q)); + off = SEXT(sgn,16,BE16(hb)); break; case FILE_LESHORT: if (OFFSET_OOB(nbytes, offset + off, 2)) return 0; - off = SEXT(sgn,16,LE16(q)); + off = SEXT(sgn,16,LE16(hb)); break; case FILE_LONG: if (OFFSET_OOB(nbytes, offset + off, 4)) return 0; - off = SEXT(sgn,32,q->l); + memcpy(&hl, hb, sizeof(hl)); + off = SEXT(sgn,32,hl); break; case FILE_BELONG: case FILE_BEID3: if (OFFSET_OOB(nbytes, offset + off, 4)) return 0; - off = SEXT(sgn,32,BE32(q)); + off = SEXT(sgn,32,BE32(hb)); break; case FILE_LEID3: case FILE_LELONG: if (OFFSET_OOB(nbytes, offset + off, 4)) return 0; - off = SEXT(sgn,32,LE32(q)); + off = SEXT(sgn,32,LE32(hb)); break; case FILE_MELONG: if (OFFSET_OOB(nbytes, offset + off, 4)) return 0; - off = SEXT(sgn,32,ME32(q)); + off = SEXT(sgn,32,ME32(hb)); break; case FILE_BEQUAD: if (OFFSET_OOB(nbytes, offset + off, 8)) return 0; - off = SEXT(sgn,64,BE64(q)); + off = SEXT(sgn,64,BE64(hb)); break; case FILE_LEQUAD: if (OFFSET_OOB(nbytes, offset + off, 8)) return 0; - off = SEXT(sgn,64,LE64(q)); + off = SEXT(sgn,64,LE64(hb)); break; case FILE_OCTAL: if (OFFSET_OOB(nbytes, offset, m->vallen)) @@ -1712,13 +1716,13 @@ mget(struct magic_set *ms, struct magic *m, const struct buffer *b, case FILE_BESHORT: if (OFFSET_OOB(nbytes, offset, 2)) return 0; - if (do_ops(ms, m, &offset, SEXT(sgn,16,BE16(p)), off)) + if (do_ops(ms, m, &offset, SEXT(sgn,16,BE16(p->hs)), off)) return 0; break; case FILE_LESHORT: if (OFFSET_OOB(nbytes, offset, 2)) return 0; - if (do_ops(ms, m, &offset, SEXT(sgn,16,LE16(p)), off)) + if (do_ops(ms, m, &offset, SEXT(sgn,16,LE16(p->hs)), off)) return 0; break; case FILE_SHORT: @@ -1731,7 +1735,7 @@ mget(struct magic_set *ms, struct magic *m, const struct buffer *b, case FILE_BEID3: if (OFFSET_OOB(nbytes, offset, 4)) return 0; - lhs = BE32(p); + lhs = BE32(p->hl); if (in_type == FILE_BEID3) lhs = cvt_id3(ms, CAST(uint32_t, lhs)); if (do_ops(ms, m, &offset, SEXT(sgn,32,lhs), off)) @@ -1741,7 +1745,7 @@ mget(struct magic_set *ms, struct magic *m, const struct buffer *b, case FILE_LEID3: if (OFFSET_OOB(nbytes, offset, 4)) return 0; - lhs = LE32(p); + lhs = LE32(p->hl); if (in_type == FILE_LEID3) lhs = cvt_id3(ms, CAST(uint32_t, lhs)); if (do_ops(ms, m, &offset, SEXT(sgn,32,lhs), off)) @@ -1750,7 +1754,7 @@ mget(struct magic_set *ms, struct magic *m, const struct buffer *b, case FILE_MELONG: if (OFFSET_OOB(nbytes, offset, 4)) return 0; - if (do_ops(ms, m, &offset, SEXT(sgn,32,ME32(p)), off)) + if (do_ops(ms, m, &offset, SEXT(sgn,32,ME32(p->hl)), off)) return 0; break; case FILE_LONG: @@ -1762,13 +1766,13 @@ mget(struct magic_set *ms, struct magic *m, const struct buffer *b, case FILE_LEQUAD: if (OFFSET_OOB(nbytes, offset, 8)) return 0; - if (do_ops(ms, m, &offset, SEXT(sgn,64,LE64(p)), off)) + if (do_ops(ms, m, &offset, SEXT(sgn,64,LE64(p->hq)), off)) return 0; break; case FILE_BEQUAD: if (OFFSET_OOB(nbytes, offset, 8)) return 0; - if (do_ops(ms, m, &offset, SEXT(sgn,64,BE64(p)), off)) + if (do_ops(ms, m, &offset, SEXT(sgn,64,BE64(p->hq)), off)) return 0; break; case FILE_OCTAL: diff --git a/tests/Makefile.am b/tests/Makefile.am index 36b4ff206c2a..6e45949af223 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -75,6 +75,12 @@ jsonlines1.result \ jsonlines1.testfile \ JW07022A.mp3.result \ JW07022A.mp3.testfile \ +keyman-0.result \ +keyman-0.testfile \ +keyman-1.result \ +keyman-1.testfile \ +keyman-2.result \ +keyman-2.testfile \ matilde.arm.result \ matilde.arm.testfile \ multiple-A.magic \ @@ -111,8 +117,23 @@ regex-eol.result \ regex-eol.testfile \ registry-pol.result \ registry-pol.testfile \ +rpm-v3.0-bin-aarch64.result \ +rpm-v3.0-bin-aarch64.testfile \ +rpm-v3.0-bin-powerpc64.result \ +rpm-v3.0-bin-powerpc64.testfile \ +rpm-v3.0-bin-s390x.result \ +rpm-v3.0-bin-s390x.testfile \ +rpm-v3.0-bin-x86_64.result \ +rpm-v3.0-bin-x86_64.testfile \ +rpm-v3.0-src.result \ +rpm-v3.0-src.testfile \ +searchbug.magic \ +searchbug.result \ +searchbug.testfile \ uf2.result \ uf2.testfile \ +utf16xmlsvg.testfile \ +utf16xmlsvg.result \ xclbin.result \ xclbin.testfile \ zstd-3-skippable-frames.result \ diff --git a/tests/Makefile.in b/tests/Makefile.in index 28033eeaa0a1..4f583bf540a7 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -198,6 +198,7 @@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ +FILECMD = @FILECMD@ GREP = @GREP@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ INSTALL = @INSTALL@ @@ -368,6 +369,12 @@ jsonlines1.result \ jsonlines1.testfile \ JW07022A.mp3.result \ JW07022A.mp3.testfile \ +keyman-0.result \ +keyman-0.testfile \ +keyman-1.result \ +keyman-1.testfile \ +keyman-2.result \ +keyman-2.testfile \ matilde.arm.result \ matilde.arm.testfile \ multiple-A.magic \ @@ -404,8 +411,23 @@ regex-eol.result \ regex-eol.testfile \ registry-pol.result \ registry-pol.testfile \ +rpm-v3.0-bin-aarch64.result \ +rpm-v3.0-bin-aarch64.testfile \ +rpm-v3.0-bin-powerpc64.result \ +rpm-v3.0-bin-powerpc64.testfile \ +rpm-v3.0-bin-s390x.result \ +rpm-v3.0-bin-s390x.testfile \ +rpm-v3.0-bin-x86_64.result \ +rpm-v3.0-bin-x86_64.testfile \ +rpm-v3.0-src.result \ +rpm-v3.0-src.testfile \ +searchbug.magic \ +searchbug.result \ +searchbug.testfile \ uf2.result \ uf2.testfile \ +utf16xmlsvg.testfile \ +utf16xmlsvg.result \ xclbin.result \ xclbin.testfile \ zstd-3-skippable-frames.result \ diff --git a/tests/bcachefs2.result b/tests/bcachefs2.result index 9ebf64bb55bc..30fe8e8910d2 100644 --- a/tests/bcachefs2.result +++ b/tests/bcachefs2.result @@ -1 +1 @@ -bcachefs, UUID=4fa11b1e-75e6-4210-9167-34e1769c0fe1, label "Label", version 26, min version 26, device 0/UUID=0a3643b7-c515-47f8-a0ea-91fc38d043d1, 1 devices (unclean)
\ No newline at end of file +bcachefs, UUID=4fa11b1e-75e6-4210-9167-34e1769c0fe1, label "Label", version 26, min version 26, device 0/UUID=0a3643b7-c515-47f8-a0ea-91fc38d043d1, 1 devices (unclean) diff --git a/tests/keyman-0.result b/tests/keyman-0.result new file mode 100644 index 000000000000..b092464b82b9 --- /dev/null +++ b/tests/keyman-0.result @@ -0,0 +1 @@ +Keyman Compiled Keyboard File version 0x1100 KMX+ Data diff --git a/tests/keyman-0.testfile b/tests/keyman-0.testfile Binary files differnew file mode 100644 index 000000000000..558a7b2d464c --- /dev/null +++ b/tests/keyman-0.testfile diff --git a/tests/keyman-1.result b/tests/keyman-1.result new file mode 100644 index 000000000000..aa270a128ae5 --- /dev/null +++ b/tests/keyman-1.result @@ -0,0 +1 @@ +Keyman Compiled Keyboard File version 0x600 diff --git a/tests/keyman-1.testfile b/tests/keyman-1.testfile Binary files differnew file mode 100644 index 000000000000..9a5e835e04af --- /dev/null +++ b/tests/keyman-1.testfile diff --git a/tests/keyman-2.result b/tests/keyman-2.result new file mode 100644 index 000000000000..a32b7f388edc --- /dev/null +++ b/tests/keyman-2.result @@ -0,0 +1 @@ +Keyman Compiled Package File diff --git a/tests/keyman-2.testfile b/tests/keyman-2.testfile Binary files differnew file mode 100644 index 000000000000..9f4f8a691d67 --- /dev/null +++ b/tests/keyman-2.testfile diff --git a/tests/multiple.result b/tests/multiple.result index 8a8c5dfad20f..51639a0576bd 100644 --- a/tests/multiple.result +++ b/tests/multiple.result @@ -1 +1 @@ -RTF1.0\012- Viva File 2.0\012- ABCD File\012- Test File 1.0, ASCII text, with no line terminators +Viva File 2.0\012- RTF1.0\012- Test File 1.0\012- ABCD File, ASCII text, with no line terminators diff --git a/tests/rpm-v3.0-bin-aarch64.result b/tests/rpm-v3.0-bin-aarch64.result new file mode 100644 index 000000000000..b173034cb8f8 --- /dev/null +++ b/tests/rpm-v3.0-bin-aarch64.result @@ -0,0 +1 @@ +RPM v3.0 bin AArch64 diff --git a/tests/rpm-v3.0-bin-aarch64.testfile b/tests/rpm-v3.0-bin-aarch64.testfile Binary files differnew file mode 100644 index 000000000000..125fffa8f79b --- /dev/null +++ b/tests/rpm-v3.0-bin-aarch64.testfile diff --git a/tests/rpm-v3.0-bin-powerpc64.result b/tests/rpm-v3.0-bin-powerpc64.result new file mode 100644 index 000000000000..c4526e29b558 --- /dev/null +++ b/tests/rpm-v3.0-bin-powerpc64.result @@ -0,0 +1 @@ +RPM v3.0 bin PowerPC64 diff --git a/tests/rpm-v3.0-bin-powerpc64.testfile b/tests/rpm-v3.0-bin-powerpc64.testfile Binary files differnew file mode 100644 index 000000000000..8d8ded32ad7f --- /dev/null +++ b/tests/rpm-v3.0-bin-powerpc64.testfile diff --git a/tests/rpm-v3.0-bin-s390x.result b/tests/rpm-v3.0-bin-s390x.result new file mode 100644 index 000000000000..0008d7e82da1 --- /dev/null +++ b/tests/rpm-v3.0-bin-s390x.result @@ -0,0 +1 @@ +RPM v3.0 bin S/390x diff --git a/tests/rpm-v3.0-bin-s390x.testfile b/tests/rpm-v3.0-bin-s390x.testfile Binary files differnew file mode 100644 index 000000000000..cb459adf5198 --- /dev/null +++ b/tests/rpm-v3.0-bin-s390x.testfile diff --git a/tests/rpm-v3.0-bin-x86_64.result b/tests/rpm-v3.0-bin-x86_64.result new file mode 100644 index 000000000000..e3fcc7d9d40b --- /dev/null +++ b/tests/rpm-v3.0-bin-x86_64.result @@ -0,0 +1 @@ +RPM v3.0 bin i386/x86_64 diff --git a/tests/rpm-v3.0-bin-x86_64.testfile b/tests/rpm-v3.0-bin-x86_64.testfile Binary files differnew file mode 100644 index 000000000000..9f1ecb3fea2f --- /dev/null +++ b/tests/rpm-v3.0-bin-x86_64.testfile diff --git a/tests/rpm-v3.0-src.result b/tests/rpm-v3.0-src.result new file mode 100644 index 000000000000..d21ce34cbe1c --- /dev/null +++ b/tests/rpm-v3.0-src.result @@ -0,0 +1 @@ +RPM v3.0 src diff --git a/tests/rpm-v3.0-src.testfile b/tests/rpm-v3.0-src.testfile Binary files differnew file mode 100644 index 000000000000..f6bdce32771d --- /dev/null +++ b/tests/rpm-v3.0-src.testfile diff --git a/tests/searchbug.magic b/tests/searchbug.magic new file mode 100644 index 000000000000..ec892aaef803 --- /dev/null +++ b/tests/searchbug.magic @@ -0,0 +1,12 @@ + +0 string TEST Testfmt +>0 byte x (0) +>>0 use part2 +>0 byte x (64) +>>64 use part2 + +0 name part2 +>0 search/12 ABC found_ABC +>>&0 ubyte x followed_by 0x%02x +>>&0 offset x at_offset %lld + diff --git a/tests/searchbug.result b/tests/searchbug.result new file mode 100644 index 000000000000..9110ff092dfd --- /dev/null +++ b/tests/searchbug.result @@ -0,0 +1 @@ +Testfmt (0) found_ABC followed_by 0x31 at_offset 11 (64) found_ABC followed_by 0x32 at_offset 75 diff --git a/tests/searchbug.testfile b/tests/searchbug.testfile new file mode 100644 index 000000000000..eca7c592a9d7 --- /dev/null +++ b/tests/searchbug.testfile @@ -0,0 +1 @@ +TESTxxxxABC1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxABC2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
\ No newline at end of file diff --git a/tests/uf2.result b/tests/uf2.result index d93dca954a75..1e5651467fc4 100644 --- a/tests/uf2.result +++ b/tests/uf2.result @@ -1 +1 @@ -UF2 firmware image, family ESP32-S2, address 00000000, 4829 total blocks +UF2 firmware image, family ESP32-S2, base address 00000000, 4829 total blocks diff --git a/tests/utf16xmlsvg.result b/tests/utf16xmlsvg.result new file mode 100644 index 000000000000..280377488e7c --- /dev/null +++ b/tests/utf16xmlsvg.result @@ -0,0 +1 @@ +SVG Scalable Vector Graphics image, Unicode text, UTF-16, little-endian text diff --git a/tests/utf16xmlsvg.testfile b/tests/utf16xmlsvg.testfile Binary files differnew file mode 100644 index 000000000000..a92267299b98 --- /dev/null +++ b/tests/utf16xmlsvg.testfile |