From dev-return-9648-apmail-apr-dev-archive=apr.apache.org@apr.apache.org Tue Apr 15 17:57:25 2003 Return-Path: Delivered-To: apmail-apr-dev-archive@apr.apache.org Received: (qmail 97114 invoked by uid 500); 15 Apr 2003 17:57:24 -0000 Mailing-List: contact dev-help@apr.apache.org; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: Delivered-To: mailing list dev@apr.apache.org Received: (qmail 97096 invoked from network); 15 Apr 2003 17:57:24 -0000 Message-ID: <3E9C483F.2060804@attglobal.net> Date: Tue, 15 Apr 2003 13:58:23 -0400 From: Jeff Trawick Reply-To: trawick@attglobal.net User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.3) Gecko/20030312 X-Accept-Language: en-us, en MIME-Version: 1.0 To: dev@apr.apache.org Subject: [PATCH] hex format string for apr_uint64_t Content-Type: multipart/mixed; boundary="------------080909080204030801060302" X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N This is a multi-part message in MIME format. --------------080909080204030801060302 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Hopefully there isn't a reason why this can't be implemented portably. Speak up quickly if you know of one :) Apache needs to format a 64-bit quantity in hex in a few places. Since hex formatting is typically supported for unsigned values only, the best compromise seems to be to have a format string for APR_UINT64_T and cast the argument to apr_uint64_t (if it is known to be safe in that context, of course). An unfortunately ugly example: apr_time_t now; apr_snprintf(..., "microsecs in hex: %" APR_UINT64_T_HEX_FMT, (apr_uint64_t)) APR_TIME_T_HEX_FMT wouldn't be pretty since apr_time_t is signed but hex formats take unsigned arguments. At least APR_UINT64_T_HEX_FMT is good clean fun by itself. --------------080909080204030801060302 Content-Type: text/plain; name="hex_patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="hex_patch" Index: configure.in =================================================================== RCS file: /home/cvs/apr/configure.in,v retrieving revision 1.524 diff -u -r1.524 configure.in --- configure.in 4 Apr 2003 04:15:59 -0000 1.524 +++ configure.in 15 Apr 2003 17:42:36 -0000 @@ -1079,6 +1079,8 @@ int64_t_fmt_len='#define APR_INT64_T_FMT_LEN 1' uint64_t_fmt='#define APR_UINT64_T_FMT "u"' uint64_t_fmt_len='#define APR_UINT64_T_FMT_LEN 1' + uint64_t_hex_fmt='#define APR_UINT64_T_HEX_FMT "x"' + uint64_t_hex_fmt_len='#define APR_UINT64_T_HEX_FMT_LEN 1' int64_value="int" long_value=int int64_strfn="strtoi" @@ -1088,6 +1090,8 @@ int64_t_fmt_len='#define APR_INT64_T_FMT_LEN 2' uint64_t_fmt='#define APR_UINT64_T_FMT "lu"' uint64_t_fmt_len='#define APR_UINT64_T_FMT_LEN 2' + uint64_t_hex_fmt='#define APR_UINT64_T_HEX_FMT "lx"' + uint64_t_hex_fmt_len='#define APR_UINT64_T_HEX_FMT_LEN 2' int64_value="long" long_value=long int64_strfn="strtol" @@ -1101,6 +1105,8 @@ int64_t_fmt_len='#define APR_INT64_T_FMT_LEN 3' uint64_t_fmt='#define APR_UINT64_T_FMT "llu"' uint64_t_fmt_len='#define APR_UINT64_T_FMT_LEN 3' + uint64_t_hex_fmt='#define APR_UINT64_T_HEX_FMT "llx"' + uint64_t_hex_fmt_len='#define APR_UINT64_T_HEX_FMT_LEN 3' int64_value="long long" long_value="long long" int64_strfn="strtoll" @@ -1110,6 +1116,8 @@ int64_t_fmt_len='#define APR_INT64_T_FMT_LEN 2' uint64_t_fmt='#define APR_UINT64_T_FMT "Lu"' uint64_t_fmt_len='#define APR_UINT64_T_FMT_LEN 2' + uint64_t_hex_fmt='#define APR_UINT64_T_HEX_FMT "Lx"' + uint64_t_hex_fmt_len='#define APR_UINT64_T_HEX_FMT_LEN 2' int64_value="long double" long_value="long double" int64_strfn="strtoll" @@ -1119,6 +1127,8 @@ int64_t_fmt_len='#define APR_INT64_T_FMT_LEN 2' uint64_t_fmt='#define APR_UINT64_T_FMT "qu"' uint64_t_fmt_len='#define APR_UINT64_T_FMT_LEN 2' + uint64_t_hex_fmt='#define APR_UINT64_T_HEX_FMT "qx"' + uint64_t_hex_fmt_len='#define APR_UINT64_T_HEX_FMT_LEN 2' int64_value="__int64" long_value="__int64" int64_strfn="strtoll" @@ -1130,6 +1140,8 @@ int64_t_fmt_len='#error Can not determine the proper size for apr_int64_t' uint64_t_fmt='#error Can not determine the proper size for apr_int64_t' uint64_t_fmt_len='#error Can not determine the proper size for apr_int64_t' + uint64_t_hex_fmt='#error Can not determine the proper size for apr_uint64_t' + uint64_t_hex_fmt_len='#define Can not determine the proper size for apr_uint64_t' fi # If present, allow the C99 macro INT64_C to override our conversion. @@ -1270,6 +1282,8 @@ AC_SUBST(int64_t_fmt_len) AC_SUBST(uint64_t_fmt) AC_SUBST(uint64_t_fmt_len) +AC_SUBST(uint64_t_hex_fmt) +AC_SUBST(uint64_t_hex_fmt_len) AC_SUBST(ssize_t_fmt) AC_SUBST(size_t_fmt) AC_SUBST(off_t_fmt) Index: include/apr.h.in =================================================================== RCS file: /home/cvs/apr/include/apr.h.in,v retrieving revision 1.122 diff -u -r1.122 apr.h.in --- include/apr.h.in 23 Mar 2003 02:25:02 -0000 1.122 +++ include/apr.h.in 15 Apr 2003 17:42:36 -0000 @@ -396,6 +396,10 @@ @uint64_t_fmt@ @uint64_t_fmt_len@ +/* And APR_UINT64_T_HEX_FMT */ +@uint64_t_hex_fmt@ +@uint64_t_hex_fmt_len@ + /* Deal with atoi64 variables ... these should move to apr_private.h */ #define APR_HAVE_INT64_STRFN @have_int64_strfn@ #define APR_INT64_STRFN @int64_strfn@ Index: include/apr.hnw =================================================================== RCS file: /home/cvs/apr/include/apr.hnw,v retrieving revision 1.33 diff -u -r1.33 apr.hnw --- include/apr.hnw 23 Mar 2003 02:25:02 -0000 1.33 +++ include/apr.hnw 15 Apr 2003 17:42:36 -0000 @@ -362,6 +362,8 @@ #define APR_INT64_T_FMT_LEN 3 #define APR_UINT64_T_FMT "llu" #define APR_UINT64_T_FMT_LEN 3 +#define APR_UINT64_T_HEX_FMT "llx" +#define APR_UINT64_T_HEX_FMT_LEN 3 #define APR_TIME_T_FMT APR_INT64_T_FMT /* Deal with atoi64 variables ... these should move to apr_private.h */ Index: include/apr.hw =================================================================== RCS file: /home/cvs/apr/include/apr.hw,v retrieving revision 1.113 diff -u -r1.113 apr.hw --- include/apr.hw 23 Mar 2003 02:25:02 -0000 1.113 +++ include/apr.hw 15 Apr 2003 17:42:37 -0000 @@ -495,6 +495,8 @@ #define APR_INT64_T_FMT_LEN 4 #define APR_UINT64_T_FMT "I64u" #define APR_UINT64_T_FMT_LEN 4 +#define APR_UINT64_T_HEX_FMT "I64x" +#define APR_UINT64_T_HEX_FMT_LEN 4 /* Deal with atoi64 variables ... these should move to apr_private.h */ /* MSVC 7.0 introduced _strtoui64 */ --------------080909080204030801060302--