Upstream-Status: Pending Author: H.J. Lu Date: Tue Dec 6 10:34:53 2011 -0800 Fix pax-3.4 build for x32 off_t is 8byte for x32. We need to check both _FILE_OFFSET_BITS and size of off_t to see if file offset is 64bit. This patch adds AC_CHECK_SIZEOF(off_t) and checks SIZEOF_OFF_T == 8. Signed-Off-By: Nitin A Kamble 2011/12/06 Index: pax-3.4/configure.in =================================================================== --- pax-3.4.orig/configure.in +++ pax-3.4/configure.in @@ -33,4 +33,7 @@ dnl Checks for header files. dnl Checks for typedefs, structures, and compiler characteristics. AC_C_CONST +AC_CHECK_SIZEOF(off_t) +AC_CHECK_SIZEOF(long) + AC_OUTPUT([Makefile lib/Makefile src/Makefile]) Index: pax-3.4/src/ar_io.c =================================================================== --- pax-3.4.orig/src/ar_io.c +++ pax-3.4/src/ar_io.c @@ -378,7 +378,8 @@ ar_close(void) * could have written anything yet. */ if (frmt == NULL) { -#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64 +#if (SIZEOF_LONG == 4 && SIZEOF_OFF_T == 8) \ + || (defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64) (void)fprintf(listf, "%s: unknown format, %qu bytes skipped.\n", #else (void)fprintf(listf, "%s: unknown format, %lu bytes skipped.\n", @@ -391,7 +392,8 @@ ar_close(void) if (strcmp(NM_CPIO, argv0) == 0) (void)fprintf(listf, -#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64 +#if (SIZEOF_LONG == 4 && SIZEOF_OFF_T == 8) \ + || (defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64) "%qu blocks\n", #else "%lu blocks\n", @@ -399,7 +401,8 @@ ar_close(void) (rdcnt ? rdcnt : wrcnt) / 5120); else if (strcmp(NM_TAR, argv0) != 0) (void)fprintf(listf, -#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64 +#if (SIZEOF_LONG == 4 && SIZEOF_OFF_T == 8) \ + || (defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64) "%s: %s vol %d, %lu files, %qu bytes read, %qu bytes written.\n", #else "%s: %s vol %d, %lu files, %lu bytes read, %lu bytes written.\n", Index: pax-3.4/src/cpio.c =================================================================== --- pax-3.4.orig/src/cpio.c +++ pax-3.4/src/cpio.c @@ -218,7 +218,8 @@ rd_ln_nm (ARCHD *arcn) */ if ((arcn->sb.st_size == 0) || (arcn->sb.st_size >= (off_t) sizeof(arcn->ln_name))) { -#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64 +#if (SIZEOF_LONG == 4 && SIZEOF_OFF_T == 8) \ + || (defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64) paxwarn (1, "Cpio link name length is invalid: %qu", arcn->sb.st_size); #else Index: pax-3.4/src/gen_subs.c =================================================================== --- pax-3.4.orig/src/gen_subs.c +++ pax-3.4/src/gen_subs.c @@ -133,7 +133,8 @@ ls_list (ARCHD *arcn, time_t now, FILE * * print device id's for devices, or sizes for other nodes */ if ((arcn->type == PAX_CHR) || (arcn->type == PAX_BLK)) -#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64 +#if (SIZEOF_LONG == 4 && SIZEOF_OFF_T == 8) \ + || (defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64) (void) fprintf (fp, "%4lu,%4lu ", (unsigned long) MAJOR (sbp->st_rdev), (unsigned long) MINOR (sbp->st_rdev)); #else @@ -142,7 +143,8 @@ ls_list (ARCHD *arcn, time_t now, FILE * #endif else { -#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64 +#if (SIZEOF_LONG == 4 && SIZEOF_OFF_T == 8) \ + || (defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64) (void) fprintf (fp, "%9qu ", sbp->st_size); #else (void) fprintf (fp, "%9lu ", sbp->st_size); @@ -334,7 +336,8 @@ ul_asc (u_long val, char *str, int len, return (0); } -#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64 +#if (SIZEOF_LONG == 4 && SIZEOF_OFF_T == 8) \ + || (defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64) /* * asc_uqd() * convert hex/octal character string into a u_quad_t. We do not have to Index: pax-3.4/src/options.c =================================================================== --- pax-3.4.orig/src/options.c +++ pax-3.4/src/options.c @@ -1545,7 +1545,8 @@ str_offt (char *val) char *expr; off_t num, t; -#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64 +#if (SIZEOF_LONG == 4 && SIZEOF_OFF_T == 8) \ + || (defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64) num = strtoq (val, &expr, 0); if ((num == LONG_LONG_MAX) || (num <= 0) || (expr == val)) #else Index: pax-3.4/src/tar.c =================================================================== --- pax-3.4.orig/src/tar.c +++ pax-3.4/src/tar.c @@ -58,7 +58,8 @@ static unsigned long tar_chksm (char *, int); static char *name_split (char *, int); static int ul_oct (u_long, char *, int, int); -#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64 +#if (SIZEOF_LONG == 4 && SIZEOF_OFF_T == 8) \ + || (defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64) static int uqd_oct (u_quad_t, char *, int, int); #endif @@ -196,7 +197,8 @@ ul_oct (u_long val, register char *str, return (0); } -#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64 +#if (SIZEOF_LONG == 4 && SIZEOF_OFF_T == 8) \ + || (defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64) /* * uqd_oct() * convert an u_quad_t to an octal string. one of many oddball field @@ -427,7 +429,8 @@ tar_rd (ARCHD *arcn, char *buf) 0xfff); arcn->sb.st_uid = (uid_t) asc_ul (hd->uid, sizeof (hd->uid), OCT); arcn->sb.st_gid = (gid_t) asc_ul (hd->gid, sizeof (hd->gid), OCT); -#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64 +#if (SIZEOF_LONG == 4 && SIZEOF_OFF_T == 8) \ + || (defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64) arcn->sb.st_size = (off_t) asc_uqd (hd->size, sizeof (hd->size), OCT); #else arcn->sb.st_size = (off_t) asc_ul (hd->size, sizeof (hd->size), OCT); @@ -659,7 +662,8 @@ tar_wr (register ARCHD * arcn) * data follows this file, so set the pad */ hd->linkflag = AREGTYPE; -#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64 +#if (SIZEOF_LONG == 4 && SIZEOF_OFF_T == 8) \ + || (defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64) if (uqd_oct ((u_quad_t) arcn->sb.st_size, hd->size, sizeof (hd->size), 1)) #else @@ -834,7 +838,8 @@ ustar_rd (ARCHD *arcn, char *buf) */ arcn->sb.st_mode = (mode_t) (asc_ul (hd->mode, sizeof (hd->mode), OCT) & 0xfff); -#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64 +#if (SIZEOF_LONG == 4 && SIZEOF_OFF_T == 8) \ + || (defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64) arcn->sb.st_size = (off_t) asc_uqd (hd->size, sizeof (hd->size), OCT); #else arcn->sb.st_size = (off_t) asc_ul (hd->size, sizeof (hd->size), OCT); @@ -1081,7 +1086,8 @@ ustar_wr (register ARCHD * arcn) else hd->typeflag = REGTYPE; arcn->pad = TAR_PAD (arcn->sb.st_size); -#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64 +#if (SIZEOF_LONG == 4 && SIZEOF_OFF_T == 8) \ + || (defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64) if (uqd_oct ((u_quad_t) arcn->sb.st_size, hd->size, sizeof (hd->size), 3)) {