From 2d9fa77979916f7e3a1c7bed5274b32a6555bcfa Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Wed, 10 Feb 2010 16:29:59 +0000 Subject: [PATCH] Abstract writing unsigned attribute values into NYTP_write_attribute_unsigned(). --- FileHandle.h | 2 ++ FileHandle.xs | 11 +++++++++++ NYTProf.xs | 8 ++++---- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/FileHandle.h b/FileHandle.h index 0bde089..d4ae20d 100644 --- a/FileHandle.h +++ b/FileHandle.h @@ -51,3 +51,5 @@ size_t NYTP_write_attribute_string(NYTP_file ofile, const char *value, size_t value_len); size_t NYTP_write_attribute_signed(NYTP_file ofile, const char *key, size_t key_len, long value); +size_t NYTP_write_attribute_unsigned(NYTP_file ofile, const char *key, + size_t key_len, unsigned long value); diff --git a/FileHandle.xs b/FileHandle.xs index 47d4989..cea833f 100644 --- a/FileHandle.xs +++ b/FileHandle.xs @@ -688,6 +688,17 @@ NYTP_write_attribute_string(NYTP_file ofile, #define LOG_2_OVER_LOG_10 0.30103 size_t +NYTP_write_attribute_unsigned(NYTP_file ofile, const char *key, + size_t key_len, unsigned long value) +{ + /* 3: 1 for rounding errors, 1 for the '\0' */ + char buffer[(int)(sizeof (unsigned long) * CHAR_BIT * LOG_2_OVER_LOG_10 + 3)]; + const size_t len = my_snprintf(buffer, sizeof(buffer), "%lu", value); + + return NYTP_write_attribute_string(ofile, key, key_len, buffer, len); +} + +size_t NYTP_write_attribute_signed(NYTP_file ofile, const char *key, size_t key_len, long value) { diff --git a/NYTProf.xs b/NYTProf.xs index bcf4802..139d909 100644 --- a/NYTProf.xs +++ b/NYTProf.xs @@ -455,13 +455,13 @@ output_header(pTHX) /* XXX add options, $0, etc, but beware of embedded newlines */ /* XXX would be good to adopt a proper charset & escaping for these */ /* $^T */ - NYTP_printf(out, ":%s=%lu\n", "basetime", (unsigned long)PL_basetime); + NYTP_write_attribute_unsigned(out, STR_WITH_LEN("basetime"), PL_basetime); NYTP_write_attribute_string(out, STR_WITH_LEN("xs_version"), STR_WITH_LEN(XS_VERSION)); NYTP_write_attribute_string(out, STR_WITH_LEN("perl_version"), version, sizeof(version) - 1); NYTP_write_attribute_signed(out, STR_WITH_LEN("clock_id"), profile_clock); - NYTP_printf(out, ":%s=%u\n", "ticks_per_sec", ticks_per_sec); - NYTP_printf(out, ":%s=%d\n", "nv_size", (int)sizeof(NV)); - NYTP_printf(out, ":%s=%lu\n", "PL_perldb", (long unsigned int)PL_perldb); + NYTP_write_attribute_unsigned(out, STR_WITH_LEN("ticks_per_sec"), ticks_per_sec); + NYTP_write_attribute_unsigned(out, STR_WITH_LEN("nv_size"), sizeof(NV)); + NYTP_write_attribute_unsigned(out, STR_WITH_LEN("PL_perldb"), PL_perldb); NYTP_write_attribute_string(out, STR_WITH_LEN("application"), argv0, len); /* %Config values */ NYTP_write_attribute_string(out, STR_WITH_LEN("PRIVLIB_EXP"), STR_WITH_LEN(PRIVLIB_EXP)); -- 1.6.0