Jim, I'm sorry for delayed reply, but I didn't feel well yesterday(not like it is better today).
Line 210 in patch file seems to have indentations off resp. there are tabs and then spaces which doesn't align to above. I can't think of anything else looking at the diff. Perhaps indentations here and there, but I don't know(nit picking). Regards, Z. On Mon, Feb 13, 2012 at 3:36 PM, Jim Mank <jm...@hp.com> wrote: > Z, > > Here is the external include file declaration, and the new function > declaration in the source file to cover the fact that the function returns a > pointer to a static character array. > > I have attached a patch file with my complete set of changes. Let me know > if there is anything else I missed. > > const char *ipmi_sdr_get_unit_string(uint8_t pct, uint8_t type, > uint8_t base, uint8_t modifier); > > const 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/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 >> >> > ------------------------------------------------------------------------------ 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