Z, Yes it should return be returning a static char. I'll fix this. -- Jim Mankovich | jm...@hp.com --
On 2/9/2012 10:18 PM, Zdenek Styblik wrote: > 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 > ------------------------------------------------------------------------------ Try before you buy = See our experts in action! 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-dev2 _______________________________________________ Ipmitool-devel mailing list Ipmitool-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ipmitool-devel