Hello, Cong WANG wrote: > 2007/3/14, Cong WANG wrote: >> I am sorry. I forgot to CC to the list. >> >> 2007/3/14, Nicolas Boichat wrote: >> > Hello, >> > >> >> <snip> >> >> > +static ssize_t applesmc_show_fan_manual(struct device *dev, char *buf, >> > + int >> offset) >> > +{ >> > + int ret; >> > + u16 manual = 0; >> > + u8 buffer[2]; >> > + >> > + down(&applesmc_sem); >> > + >> > + ret = applesmc_read_key(FANS_MANUAL, buffer, 2); >> > + manual = ((buffer[0] << 8 | buffer[1]) >> offset) & 0x01; >> > + >> > + up(&applesmc_sem); >> > + if (ret) >> > + return ret; >> > + else >> > + return sprintf(buf, "%d\n", manual); >> > +} >> > + >> >> I doubt about your last 'sprintf'. Your 'buf' just has only two 'u8's, >> which maybe only has two bytes, and '\n' already consumes one. So only >> one byte is left for the decimal vaule of 'manual'. Even it is just >> less than 10, just as what you want, the final '\0' is omitted! >> >> What's more, you can't get such information from the return value of >> 'sprintf'. So I suggest you to choose 'snprintf' instead. >> > > Sorry. I thought his 'buffer' as 'buf'. But my suggestion is still > worthy your thinking.
I'm quite sure using sprintf is ok. At least it's the way sysfs helper functions are coded in other parts of the kernel too. I agree that the variable names (buf and buffer) used are quite confusing though... I'll fix that. Best regards, Nicolas - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/