]> err.no Git - dpkg/commitdiff
Use offsetof() instead of ad-hoc calculations
authorGuillem Jover <guillem@debian.org>
Tue, 22 Jan 2008 08:31:32 +0000 (10:31 +0200)
committerGuillem Jover <guillem@debian.org>
Tue, 22 Jan 2008 08:31:32 +0000 (10:31 +0200)
ChangeLog
lib/dpkg.h
lib/parsedump.h
lib/tarfn.c

index d8d5f2e83dda8fe9831c65ae567f6acd49469f4c..527cb67ee6ceef5b5e3ba5f42253486fdf28497f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2008-01-22  Guillem Jover  <guillem@debian.org>
+
+       * lib/dpkg.h [!offsetof] (offsetof): New compatibilty macro.
+       * lib/parsedump.h (PKGIFPOFF): Use offsetof instead of ad-hoc
+       calculation.
+       (FILEFOFF): Likewise.
+       (struct fieldinfo): Change integer member type to size_t.
+       * lib/tarfn.c (TarChecksumOffset): Use offsetof instead of ad-hoc
+       calculation.
+
 2008-01-22  Guillem Jover  <guillem@debian.org>
 
        * configure.ac (AC_CHECK_HEADERS): Check for 'stddef.h'.
index 8d36fc88cbb2b8062743527f9115a13ed0a41452..d0e15fe989f58d63ff9b1b754df4bb7d4a3e9021 100644 (file)
@@ -414,6 +414,10 @@ void unsetenv(const char *x);
 
 /*** other compatibility functions ***/
 
+#ifndef offsetof
+#define offsetof(st, m) ((size_t)&((st *)NULL)->m)
+#endif
+
 #ifndef HAVE_STRTOUL
 #define strtoul strtol
 #endif
index f767b29962e2234791e4bb0aa71b17972aeafbde..2f7bb769a93097803d0b892af8b631fcd42489c5 100644 (file)
 
 struct fieldinfo;
 
-#define PKGIFPOFF(f) ((char*)(&(((struct pkginfoperfile *)0x1000)->f)) - \
-                      (char*)(struct pkginfoperfile *)0x1000)
+#define PKGIFPOFF(f) (offsetof(struct pkginfoperfile, f))
 #define PKGPFIELD(pifp,of,type) (*(type*)((char*)(pifp)+(of)))
 
-#define FILEFOFF(f) ((char*)(&(((struct filedetails *)0x1000)->f)) - \
-                     (char*)(struct filedetails *)0x1000)
+#define FILEFOFF(f) (offsetof(struct filedetails, f))
 #define FILEFFIELD(filedetail,of,type) (*(type*)((char*)(filedetail)+(of)))
 
 typedef void freadfunction(struct pkginfo *pigp, struct pkginfoperfile *pifp,
@@ -56,7 +54,7 @@ struct fieldinfo {
   const char *name;
   freadfunction *rcall;
   fwritefunction *wcall;
-  unsigned int integer;
+  size_t integer;
 };
 
 void parseerr(FILE *file, const char *filename, int lno, FILE *warnto, int *warncount,
index 0a96e75f7fddc0630a9521924778fdc6a22d9b80..397fedc4126543b480c6aaca8ce1c024e6f03666 100644 (file)
@@ -34,8 +34,7 @@ struct TarHeader {
 };
 typedef struct TarHeader       TarHeader;
 
-static const unsigned int      TarChecksumOffset
-       = (unsigned int)&(((TarHeader *)NULL)->Checksum);
+static const size_t TarChecksumOffset = offsetof(TarHeader, Checksum);
 
 /* Octal-ASCII-to-long */
 static long