From f38e4ada0187010019d1aed483c04e831d20307ca5b88437a6efee82a9c17ab1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cristian=20Rodr=C3=ADguez?= Date: Thu, 16 Aug 2012 17:40:37 +0000 Subject: [PATCH] Accepting request 130753 from home:elvigia:branches:Base:System - Use the OS's byteswapping routines. OBS-URL: https://build.opensuse.org/request/show/130753 OBS-URL: https://build.opensuse.org/package/show/Base:System/file?expand=0&rev=48 --- file-endian.patch | 172 ++++++++++++++++++++++++++++++++++++++++++++++ file.changes | 5 ++ file.spec | 4 +- 3 files changed, 179 insertions(+), 2 deletions(-) create mode 100644 file-endian.patch diff --git a/file-endian.patch b/file-endian.patch new file mode 100644 index 0000000..9cbab23 --- /dev/null +++ b/file-endian.patch @@ -0,0 +1,172 @@ +--- src/apprentice.c.orig ++++ src/apprentice.c +@@ -48,6 +48,7 @@ FILE_RCSID("@(#)$File: apprentice.c,v 1. + #include + #endif + #include ++#include + + #define EATAB {while (isascii((unsigned char) *l) && \ + isspace((unsigned char) *l)) ++l;} +@@ -97,9 +98,11 @@ private int apprentice_load(struct magic + const char *, int); + private void byteswap(struct magic *, uint32_t); + private void bs1(struct magic *); +-private uint16_t swap2(uint16_t); +-private uint32_t swap4(uint32_t); +-private uint64_t swap8(uint64_t); ++ ++#define swap2(x) bswap_16(x) ++#define swap4(x) bswap_32(x) ++#define swap8(x) bswap_64(x) ++ + private char *mkdbname(struct magic_set *, const char *, int); + private int apprentice_map(struct magic_set *, struct magic **, uint32_t *, + const char *); +@@ -662,7 +665,7 @@ set_test_type(struct magic *mstart, stru + /* invalid search type, but no need to complain here */ + break; + } +- return 0; ++ //return 0; + } + + /* +@@ -2412,67 +2415,6 @@ byteswap(struct magic *magic, uint32_t n + } + + /* +- * swap a short +- */ +-private uint16_t +-swap2(uint16_t sv) +-{ +- uint16_t rv; +- uint8_t *s = (uint8_t *)(void *)&sv; +- uint8_t *d = (uint8_t *)(void *)&rv; +- d[0] = s[1]; +- d[1] = s[0]; +- return rv; +-} +- +-/* +- * swap an int +- */ +-private uint32_t +-swap4(uint32_t sv) +-{ +- uint32_t rv; +- uint8_t *s = (uint8_t *)(void *)&sv; +- uint8_t *d = (uint8_t *)(void *)&rv; +- d[0] = s[3]; +- d[1] = s[2]; +- d[2] = s[1]; +- d[3] = s[0]; +- return rv; +-} +- +-/* +- * swap a quad +- */ +-private uint64_t +-swap8(uint64_t sv) +-{ +- uint64_t rv; +- uint8_t *s = (uint8_t *)(void *)&sv; +- uint8_t *d = (uint8_t *)(void *)&rv; +-#if 0 +- d[0] = s[3]; +- d[1] = s[2]; +- d[2] = s[1]; +- d[3] = s[0]; +- d[4] = s[7]; +- d[5] = s[6]; +- d[6] = s[5]; +- d[7] = s[4]; +-#else +- d[0] = s[7]; +- d[1] = s[6]; +- d[2] = s[5]; +- d[3] = s[4]; +- d[4] = s[3]; +- d[5] = s[2]; +- d[6] = s[1]; +- d[7] = s[0]; +-#endif +- return rv; +-} +- +-/* + * byteswap a single magic entry + */ + private void +--- src/cdf.c.orig ++++ src/cdf.c +@@ -50,6 +50,7 @@ FILE_RCSID("@(#)$File: cdf.c,v 1.50 2012 + #ifdef HAVE_LIMITS_H + #include + #endif ++#include + + #ifndef EFTYPE + #define EFTYPE EINVAL +@@ -75,56 +76,9 @@ static union { + #define CDF_TOLE2(x) ((uint16_t)(NEED_SWAP ? _cdf_tole2(x) : (uint16_t)(x))) + #define CDF_GETUINT32(x, y) cdf_getuint32(x, y) + +- +-/* +- * swap a short +- */ +-static uint16_t +-_cdf_tole2(uint16_t sv) +-{ +- uint16_t rv; +- uint8_t *s = (uint8_t *)(void *)&sv; +- uint8_t *d = (uint8_t *)(void *)&rv; +- d[0] = s[1]; +- d[1] = s[0]; +- return rv; +-} +- +-/* +- * swap an int +- */ +-static uint32_t +-_cdf_tole4(uint32_t sv) +-{ +- uint32_t rv; +- uint8_t *s = (uint8_t *)(void *)&sv; +- uint8_t *d = (uint8_t *)(void *)&rv; +- d[0] = s[3]; +- d[1] = s[2]; +- d[2] = s[1]; +- d[3] = s[0]; +- return rv; +-} +- +-/* +- * swap a quad +- */ +-static uint64_t +-_cdf_tole8(uint64_t sv) +-{ +- uint64_t rv; +- uint8_t *s = (uint8_t *)(void *)&sv; +- uint8_t *d = (uint8_t *)(void *)&rv; +- d[0] = s[7]; +- d[1] = s[6]; +- d[2] = s[5]; +- d[3] = s[4]; +- d[4] = s[3]; +- d[5] = s[2]; +- d[6] = s[1]; +- d[7] = s[0]; +- return rv; +-} ++#define _cdf_tole2(x) bswap_16(x) ++#define _cdf_tole4(x) bswap_32(x) ++#define _cdf_tole8(x) bswap_64(x) + + /* + * grab a uint32_t from a possibly unaligned address, and return it in diff --git a/file.changes b/file.changes index ed900c6..597e966 100644 --- a/file.changes +++ b/file.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Tue Aug 14 04:06:35 UTC 2012 - crrodriguez@opensuse.org + +- Use the OS's byteswapping routines. + ------------------------------------------------------------------- Tue Jun 26 07:45:16 UTC 2012 - cfarrell@suse.com diff --git a/file.spec b/file.spec index 0f0c614..9acd4b9 100644 --- a/file.spec +++ b/file.spec @@ -58,6 +58,7 @@ Patch30: file-5.10-visibility.patch Patch31: file-5.07-biorad.dif Patch32: file-5.07-clicfs.dif Patch33: file-ocloexec.patch +Patch34: file-endian.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build %global _sysconfdir /etc %global _miscdir %{_datadir}/misc @@ -70,7 +71,6 @@ used by apsfilter to permit automatic printing of different file types. %package -n file-devel Summary: Include Files and Libraries mandatory for Development -License: BSD-2-Clause Group: Development/Libraries/Other Provides: file:/usr/include/magic.h Requires: file = %{version} @@ -108,7 +108,7 @@ to develop applications that require the magic "file" interface. %patch32 -p0 -b .clicfs %patch33 -p0 -b .clexe %patch -b .0 - +%patch34 %build export LANG=POSIX export LC_ALL=POSIX