summaryrefslogtreecommitdiff
path: root/usr/src/cmd/sgs/libconv/common/cap.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/cmd/sgs/libconv/common/cap.c')
-rw-r--r--usr/src/cmd/sgs/libconv/common/cap.c40
1 files changed, 27 insertions, 13 deletions
diff --git a/usr/src/cmd/sgs/libconv/common/cap.c b/usr/src/cmd/sgs/libconv/common/cap.c
index eae6bd9f4e..0b4a91e0be 100644
--- a/usr/src/cmd/sgs/libconv/common/cap.c
+++ b/usr/src/cmd/sgs/libconv/common/cap.c
@@ -37,46 +37,60 @@
static int
conv_cap_1(Xword val, char *str, size_t len, Half mach,
+ Conv_fmt_flags_t fmt_flags,
int (*fptr)(uint64_t, char *, size_t, int, ushort_t))
{
size_t _len;
+ int do_bkt = (fmt_flags & CONV_FMT_NOBKT) == 0;
- _len = sprintf(str, MSG_ORIG(MSG_GBL_OSQBRKT), EC_XWORD(val));
+ /*
+ * Note that for the purposes of this routine, I consider
+ * CONV_FMT_NOBKT to mean no brackets, or anything that
+ * is placed outside of them. We also drop the hex version
+ * of the flags that are put in front of the opening bracket.
+ */
+ if (do_bkt) {
+ _len = sprintf(str, MSG_ORIG(MSG_GBL_OSQBRKT), EC_XWORD(val));
- len -= _len;
- str += _len;
+ len -= _len;
+ str += _len;
+ }
if ((*fptr)(val, str, len, CAP_FMT_SNGSPACE, mach) != 0)
return (0);
- _len = strlen(str);
- if ((len - _len) >= MSG_GBL_CSQBRKT_SIZE) {
- str += _len;
- (void) strcpy(str, MSG_ORIG(MSG_GBL_CSQBRKT));
+ if (do_bkt) {
+ _len = strlen(str);
+ if ((len - _len) >= MSG_GBL_CSQBRKT_SIZE) {
+ str += _len;
+ (void) strcpy(str, MSG_ORIG(MSG_GBL_CSQBRKT));
+ }
}
return (1);
}
const char *
-conv_cap_val_hw1(Xword val, Half mach, Conv_cap_val_hw1_buf_t *cap_val_hw1_buf)
+conv_cap_val_hw1(Xword val, Half mach, Conv_fmt_flags_t fmt_flags,
+ Conv_cap_val_hw1_buf_t *cap_val_hw1_buf)
{
if (val == 0)
return (MSG_ORIG(MSG_GBL_ZERO));
if (conv_cap_1(val, cap_val_hw1_buf->buf, sizeof (cap_val_hw1_buf->buf),
- mach, hwcap_1_val2str) == 0)
+ mach, fmt_flags, hwcap_1_val2str) == 0)
return (conv_invalid_val(&cap_val_hw1_buf->inv_buf, val, 0));
return ((const char *)cap_val_hw1_buf->buf);
}
const char *
-conv_cap_val_sf1(Xword val, Half mach, Conv_cap_val_sf1_buf_t *cap_val_sf1_buf)
+conv_cap_val_sf1(Xword val, Half mach, Conv_fmt_flags_t fmt_flags,
+ Conv_cap_val_sf1_buf_t *cap_val_sf1_buf)
{
if (val == 0)
return (MSG_ORIG(MSG_GBL_ZERO));
if (conv_cap_1(val, cap_val_sf1_buf->buf, sizeof (cap_val_sf1_buf->buf),
- mach, sfcap_1_val2str) == 0)
+ mach, fmt_flags, sfcap_1_val2str) == 0)
return (conv_invalid_val(&cap_val_sf1_buf->inv_buf, val, 0));
return ((const char *)cap_val_sf1_buf->buf);
}
@@ -99,10 +113,10 @@ const char *
conv_cap_val(Xword tag, Xword val, Half mach, Conv_cap_val_buf_t *cap_val_buf)
{
if (tag == CA_SUNW_HW_1)
- return (conv_cap_val_hw1(val, mach,
+ return (conv_cap_val_hw1(val, mach, 0,
&cap_val_buf->cap_val_hw1_buf));
else if (tag == CA_SUNW_SF_1)
- return (conv_cap_val_sf1(val, mach,
+ return (conv_cap_val_sf1(val, mach, 0,
&cap_val_buf->cap_val_sf1_buf));
else
return (conv_invalid_val(&cap_val_buf->inv_buf, val, 0));