From 1f10f4afec6ca2360c006254a58582c1614efdba Mon Sep 17 00:00:00 2001 From: Daniel Drake Date: Mon, 16 Dec 2019 13:48:56 +0800 Subject: [PATCH] isosize: move ISO size functions into a shared header Move the helper functions that parse ISO data & sector size info into a separate, shared header. These will addtionally be used by libblkid's iso9660 parser. Signed-off-by: Daniel Drake --- disk-utils/isosize.c | 51 +------------------------------------ include/Makemodule.am | 1 + include/iso9660.h | 58 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+), 50 deletions(-) create mode 100644 include/iso9660.h diff --git a/disk-utils/isosize.c b/disk-utils/isosize.c index 3c8d40f3ca..9299663568 100644 --- a/disk-utils/isosize.c +++ b/disk-utils/isosize.c @@ -29,6 +29,7 @@ #include "c.h" #include "strutils.h" #include "closestream.h" +#include "iso9660.h" #define ISOSIZE_EXIT_ALLFAILED 32 #define ISOSIZE_EXIT_SOMEOK 64 @@ -42,56 +43,6 @@ static int is_iso(int fd) return memcmp(&label, &"\1CD001\1", 8); } -static int isonum_721(unsigned char *p) -{ - return ((p[0] & 0xff) - | ((p[1] & 0xff) << 8)); -} - -static int isonum_722(unsigned char *p) -{ - return ((p[1] & 0xff) - | ((p[0] & 0xff) << 8)); -} - -static int isonum_723(unsigned char *p, int xflag) -{ - int le = isonum_721(p); - int be = isonum_722(p + 2); - - if (xflag && le != be) - /* translation is useless */ - warnx("723error: le=%d be=%d", le, be); - return (le); -} - -static int isonum_731(unsigned char *p) -{ - return ((p[0] & 0xff) - | ((p[1] & 0xff) << 8) - | ((p[2] & 0xff) << 16) - | ((p[3] & 0xff) << 24)); -} - -static int isonum_732(unsigned char *p) -{ - return ((p[3] & 0xff) - | ((p[2] & 0xff) << 8) - | ((p[1] & 0xff) << 16) - | ((p[0] & 0xff) << 24)); -} - -static int isonum_733(unsigned char *p, int xflag) -{ - int le = isonum_731(p); - int be = isonum_732(p + 4); - - if (xflag && le != be) - /* translation is useless */ - warnx("733error: le=%d be=%d", le, be); - return (le); -} - static int isosize(int argc, char *filenamep, int xflag, long divisor) { int fd, nsecs, ssize, rc = -1; diff --git a/include/Makemodule.am b/include/Makemodule.am index 92d1c30588..c55c262c9b 100644 --- a/include/Makemodule.am +++ b/include/Makemodule.am @@ -22,6 +22,7 @@ dist_noinst_HEADERS += \ include/fileutils.h \ include/idcache.h \ include/ismounted.h \ + include/iso9660.h \ include/pwdutils.h \ include/linux_version.h \ include/list.h \ diff --git a/include/iso9660.h b/include/iso9660.h new file mode 100644 index 0000000000..73decd9986 --- /dev/null +++ b/include/iso9660.h @@ -0,0 +1,58 @@ +#ifndef UTIL_LINUX_ISO_H +#define UTIL_LINUX_ISO_H + +#include + +#include "c.h" + +static inline int isonum_721(unsigned char *p) +{ + return ((p[0] & 0xff) + | ((p[1] & 0xff) << 8)); +} + +static inline int isonum_722(unsigned char *p) +{ + return ((p[1] & 0xff) + | ((p[0] & 0xff) << 8)); +} + +static inline int isonum_723(unsigned char *p, bool check_match) +{ + int le = isonum_721(p); + int be = isonum_722(p + 2); + + if (check_match && le != be) + /* translation is useless */ + warnx("723error: le=%d be=%d", le, be); + return (le); +} + +static inline int isonum_731(unsigned char *p) +{ + return ((p[0] & 0xff) + | ((p[1] & 0xff) << 8) + | ((p[2] & 0xff) << 16) + | ((p[3] & 0xff) << 24)); +} + +static inline int isonum_732(unsigned char *p) +{ + return ((p[3] & 0xff) + | ((p[2] & 0xff) << 8) + | ((p[1] & 0xff) << 16) + | ((p[0] & 0xff) << 24)); +} + +static inline int isonum_733(unsigned char *p, bool check_match) +{ + int le = isonum_731(p); + int be = isonum_732(p + 4); + + if (check_match && le != be) + /* translation is useless */ + warnx("733error: le=%d be=%d", le, be); + return(le); +} + +#endif -- 2.47.2