Hi, it looks fine by me. One thing though. Since it returns pointer to static char, should it be:
static char * ipmi_sdr_get_unit_string(uint8_t pct, uint8_t type, uint8_t base, uint8_t modifier) { ... } as well? Regards, Z. On Thu, Feb 9, 2012 at 10:01 PM, Jim Mank <jm...@hp.com> wrote: [...] > Any/All comments and questions would be much appreciated. > > /* ipmi_sdr_get_unit_string - return units for base/modifier > * > * @pct: units are a percentage > * @type: unit type > * @base: base > * @modifier: modifier > * > * returns pointer to static string > */ > char * > ipmi_sdr_get_unit_string(uint8_t pct, uint8_t type, uint8_t base, > uint8_t modifier) > { > static char unitstr[16]; > /* > * By default, if units are supposed to be percent, we will > pre-pend > * the percent string to the textual representation of the units. > */ > char *pctstr = pct ? "% " : ""; > memset(unitstr, 0, sizeof (unitstr)); > switch (type) { > case 2: > snprintf(unitstr, sizeof (unitstr), "%s%s * %s", > pctstr, unit_desc[base], unit_desc[modifier]); > break; > case 1: > snprintf(unitstr, sizeof (unitstr), "%s%s/%s", > pctstr, unit_desc[base], unit_desc[modifier]); > break; > case 0: > default: > /* > * Display the text "percent" only when the Base unit is > * "unspecified" and the caller specified to print percent. > */ > if (base == 0 && pct) { > snprintf(unitstr, sizeof(unitstr), "percent"); > } else { > snprintf(unitstr, sizeof (unitstr), "%s%s", > pctstr, unit_desc[base]); > } > break; > } > > return unitstr; > } > > -- Jim Mankovich | jm...@hp.com -- > > On 2/8/2012 12:04 PM, Jim Mank wrote: >> Al, >> >> It does appear from the spec that percent can be applied to any validly >> specified Unit given that is an independent bit that can be specified in >> addition to the Base/Modifier units. I could not find any other text >> about the percent interpretation. >> >> If this is the spec intent, then when the percent bit is a one and the >> Base Unit is "unspecified", a textural string of "percent" or "%" could >> be used as the display string for the units. This would directly >> address what was reported as the bug, but would not address what you >> pointed out. This is the only case I took into account with I have >> done because the interpretation of the pct bit was not clearly >> articulated in the spec. >> >> When the percent bit is a one and the Base Unit has a value != 0, then >> pre-pending the string "percent" or "%" to the Base Unit makes sense to >> me. I specifically avoided talking about applying percent to the >> Modifier Unit since it only seems to make sense to apply percent to the >> entire entity when both Base and Modifier are specified. >> >> I do have some concern that decoding the percent bit as being applied >> to any valid Base Unit specification could cause problems if platform >> IPMI implementations were done that did not interpret the percent bit in >> exactly the way we are talking about it. >> >> -- Jim Mankovich | jm...@hp.com -- >> >> >> On 2/8/2012 11:01 AM, Albert Chu wrote: >>> Hi Jim, >>> >>> On Wed, 2012-02-08 at 08:37 -0800, Jim Mank wrote: >>>> All, >>>> >>>> I would like to start contributing to the ipmitool project and as a >>>> initial task I thought I would resolve the open bug associated with >>>> ipmitool's inability to display percentage units correctly >>>> (https://sourceforge.net/tracker/?func=detail&aid=3014014&group_id=95200&atid=610550). >>>> I'm currently working for Hewlett Packard in their Proliant server >>>> organization and I and others are starting to look at how we can better >>>> serve our customers by helping make ipmitool more robust. I only have >>>> access to HP Proliant servers, so I'll be doing my testing on various HP >>>> Proliant servers. I'm not very familiar with IPMI so I'll be learning >>>> as I work though problems, any and all help with IPMI would much >>>> appreciated. >>>> >>>> In investigating this problem, I found in the IPMI v2.0 spec that the >>>> percentage units are identified by bit 0 == 1 in byte 21 of the Full and >>>> Compact Sensor Records. In looking at the ipmitool code, the >>>> sdr_record_full_sensor and sdr_record_compact_sensor both properly >>>> declare the percentage bit (pct), but no code looks at this. So, >>>> display of percentage units correctly in the ipmitool requires correct >>>> interpretation of this bit in the sensor records. As I understand the >>>> spec, if the pct bit is set to one, then the units are a percentage and >>>> the Base Unit would be unspecified. >>> While this is the 99.9% case, I believe it is legal for the base unit to >>> be specified. Looking through the units list "% hit" and "% miss" seem >>> like reasonable base units to go with "%". There might be other >>> possibilities when you add the rate unit and modifier units (i.e. "% X / >>> Y" or "% X per Y"). >>> >>> My code here is probably not perfect, but perhaps this can give you >>> hints on some of the corner cases that can be expected: >>> >>> http://svn.savannah.gnu.org/viewvc/trunk/libfreeipmi/util/ipmi-sensor-units-util.c?revision=8165&root=freeipmi&view=markup >>> >>> Al >>> >>>> The code for displaying units in the sensor records is replicated in >>>> multiple places in the code, each doing pretty much the exact same >>>> decoding. There does exist one function for decoding the units, >>>> ipmi_sdr_get_unit_string, so I've changed the code so this routine will >>>> be used for all units decoding and I updated this function to display a >>>> new unit named "percent". >>>> >>>> In doing these modifications, I'm wondering if it would be ok for me to >>>> to do some local variable cleanup in ipmi_sdr_print_sensor_full. I >>>> noticed that the local variable do_unit is set to one, but never >>>> changed, so could this code be removed? >>>> >>>> When I have these changes available, should I just send a patch to this >>>> email alias? >>>> >> ------------------------------------------------------------------------------ >> Keep Your Developer Skills Current with LearnDevNow! >> The most comprehensive online learning library for Microsoft developers >> is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3, >> Metro Style Apps, more. Free future releases when you subscribe now! >> http://p.sf.net/sfu/learndevnow-d2d >> _______________________________________________ >> Ipmitool-devel mailing list >> Ipmitool-devel@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/ipmitool-devel >> > > ------------------------------------------------------------------------------ > Virtualization & Cloud Management Using Capacity Planning > Cloud computing makes use of virtualization - but cloud computing > also focuses on allowing computing to be delivered as a service. > http://www.accelacomm.com/jaw/sfnl/114/51521223/ > _______________________________________________ > Ipmitool-devel mailing list > Ipmitool-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/ipmitool-devel ------------------------------------------------------------------------------ Virtualization & Cloud Management Using Capacity Planning Cloud computing makes use of virtualization - but cloud computing also focuses on allowing computing to be delivered as a service. http://www.accelacomm.com/jaw/sfnl/114/51521223/ _______________________________________________ Ipmitool-devel mailing list Ipmitool-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ipmitool-devel