diff options
| -rw-r--r-- | include/vsprintf.h | 123 | ||||
| -rw-r--r-- | lib/vsprintf.c | 100 | 
2 files changed, 123 insertions, 100 deletions
| diff --git a/include/vsprintf.h b/include/vsprintf.h index 5195598f973..651077ca4da 100644 --- a/include/vsprintf.h +++ b/include/vsprintf.h @@ -25,23 +25,146 @@  #define __VSPRINTF_H  ulong simple_strtoul(const char *cp, char **endp, unsigned int base); + +/** + * strict_strtoul - convert a string to an unsigned long strictly + * @param cp	The string to be converted + * @param base	The number base to use + * @param res	The converted result value + * @return 0 if conversion is successful and *res is set to the converted + * value, otherwise it returns -EINVAL and *res is set to 0. + * + * strict_strtoul converts a string to an unsigned long only if the + * string is really an unsigned long string, any string containing + * any invalid char at the tail will be rejected and -EINVAL is returned, + * only a newline char at the tail is acceptible because people generally + * change a module parameter in the following way: + * + *      echo 1024 > /sys/module/e1000/parameters/copybreak + * + * echo will append a newline to the tail. + * + * simple_strtoul just ignores the successive invalid characters and + * return the converted value of prefix part of the string. + * + * Copied this function from Linux 2.6.38 commit ID: + * 521cb40b0c44418a4fd36dc633f575813d59a43d + * + */  int strict_strtoul(const char *cp, unsigned int base, unsigned long *res);  unsigned long long simple_strtoull(const char *cp, char **endp,  					unsigned int base);  long simple_strtol(const char *cp, char **endp, unsigned int base);  void panic(const char *fmt, ...)  		__attribute__ ((format (__printf__, 1, 2), noreturn)); + +/** + * Format a string and place it in a buffer + * + * @param buf	The buffer to place the result into + * @param fmt	The format string to use + * @param ...	Arguments for the format string + * + * The function returns the number of characters written + * into @buf. + * + * See the vsprintf() documentation for format string extensions over C99. + */  int sprintf(char *buf, const char *fmt, ...)  		__attribute__ ((format (__printf__, 2, 3))); + +/** + * Format a string and place it in a buffer (va_list version) + * + * @param buf	The buffer to place the result into + * @param size	The size of the buffer, including the trailing null space + * @param fmt	The format string to use + * @param args	Arguments for the format string + * @return the number of characters which have been written into + * the @buf not including the trailing '\0'. If @size is == 0 the function + * returns 0. + * + * If you're not already dealing with a va_list consider using scnprintf(). + * + * See the vsprintf() documentation for format string extensions over C99. + */  int vsprintf(char *buf, const char *fmt, va_list args);  char *simple_itoa(ulong i);  #ifdef CONFIG_SYS_VSNPRINTF +/** + * Format a string and place it in a buffer + * + * @param buf	The buffer to place the result into + * @param size	The size of the buffer, including the trailing null space + * @param fmt	The format string to use + * @param ...	Arguments for the format string + * @return the number of characters which would be + * generated for the given input, excluding the trailing null, + * as per ISO C99.  If the return is greater than or equal to + * @size, the resulting string is truncated. + * + * See the vsprintf() documentation for format string extensions over C99. + */  int snprintf(char *buf, size_t size, const char *fmt, ...)  		__attribute__ ((format (__printf__, 3, 4))); + +/** + * Format a string and place it in a buffer + * + * @param buf	The buffer to place the result into + * @param size	The size of the buffer, including the trailing null space + * @param fmt	The format string to use + * @param ...	Arguments for the format string + * + * The return value is the number of characters written into @buf not including + * the trailing '\0'. If @size is == 0 the function returns 0. + * + * See the vsprintf() documentation for format string extensions over C99. + */  int scnprintf(char *buf, size_t size, const char *fmt, ...)  		__attribute__ ((format (__printf__, 3, 4))); + +/** + * Format a string and place it in a buffer (base function) + * + * @param buf	The buffer to place the result into + * @param size	The size of the buffer, including the trailing null space + * @param fmt	The format string to use + * @param args	Arguments for the format string + * @return The number characters which would be generated for the given + * input, excluding the trailing '\0', as per ISO C99. Note that fewer + * characters may be written if this number of characters is >= size. + * + * This function follows C99 vsnprintf, but has some extensions: + * %pS output the name of a text symbol + * %pF output the name of a function pointer + * %pR output the address range in a struct resource + * + * The function returns the number of characters which would be + * generated for the given input, excluding the trailing '\0', + * as per ISO C99. + * + * Call this function if you are already dealing with a va_list. + * You probably want snprintf() instead. + */  int vsnprintf(char *buf, size_t size, const char *fmt, va_list args); + +/** + * Format a string and place it in a buffer (va_list version) + * + * @param buf	The buffer to place the result into + * @param size	The size of the buffer, including the trailing null space + * @param fmt	The format string to use + * @param args	Arguments for the format string + * @return the number of characters which have been written into + * the @buf not including the trailing '\0'. If @size is == 0 the function + * returns 0. + * + * If you're not already dealing with a va_list consider using scnprintf(). + * + * See the vsprintf() documentation for format string extensions over C99. + */  int vscnprintf(char *buf, size_t size, const char *fmt, va_list args);  #else  /* diff --git a/lib/vsprintf.c b/lib/vsprintf.c index 7a145ea92ba..e38a4b70f88 100644 --- a/lib/vsprintf.c +++ b/lib/vsprintf.c @@ -67,32 +67,6 @@ unsigned long simple_strtoul(const char *cp,char **endp,unsigned int base)  	return result;  } -/** - * strict_strtoul - convert a string to an unsigned long strictly - * @cp: The string to be converted - * @base: The number base to use - * @res: The converted result value - * - * strict_strtoul converts a string to an unsigned long only if the - * string is really an unsigned long string, any string containing - * any invalid char at the tail will be rejected and -EINVAL is returned, - * only a newline char at the tail is acceptible because people generally - * change a module parameter in the following way: - * - *      echo 1024 > /sys/module/e1000/parameters/copybreak - * - * echo will append a newline to the tail. - * - * It returns 0 if conversion is successful and *res is set to the converted - * value, otherwise it returns -EINVAL and *res is set to 0. - * - * simple_strtoul just ignores the successive invalid characters and - * return the converted value of prefix part of the string. - * - * Copied this function from Linux 2.6.38 commit ID: - * 521cb40b0c44418a4fd36dc633f575813d59a43d - * - */  int strict_strtoul(const char *cp, unsigned int base, unsigned long *res)  {  	char *tail; @@ -540,25 +514,6 @@ static char *pointer(const char *fmt, char *buf, char *end, void *ptr,  		      precision, flags);  } -/** - * Format a string and place it in a buffer (base function) - * - * @param buf	The buffer to place the result into - * @param size	The size of the buffer, including the trailing null space - * @param fmt	The format string to use - * @param args	Arguments for the format string - * @return The number characters which would be generated for the given - * input, excluding the trailing '\0', as per ISO C99. Note that fewer - * characters may be written if this number of characters is >= size. - * - * This function follows C99 vsnprintf, but has some extensions: - * %pS output the name of a text symbol - * %pF output the name of a function pointer - * %pR output the address range in a struct resource - * - * Call this function if you are already dealing with a va_list. - * You probably want snprintf() instead. - */  static int vsnprintf_internal(char *buf, size_t size, const char *fmt,  			      va_list args)  { @@ -755,21 +710,6 @@ int vsnprintf(char *buf, size_t size, const char *fmt,  	return vsnprintf_internal(buf, size, fmt, args);  } -/** - * Format a string and place it in a buffer (va_list version) - * - * @param buf	The buffer to place the result into - * @param size	The size of the buffer, including the trailing null space - * @param fmt	The format string to use - * @param args	Arguments for the format string - * @return the number of characters which have been written into - * the @buf not including the trailing '\0'. If @size is == 0 the function - * returns 0. - * - * If you're not already dealing with a va_list consider using scnprintf(). - * - * See the vsprintf() documentation for format string extensions over C99. - */  int vscnprintf(char *buf, size_t size, const char *fmt, va_list args)  {  	int i; @@ -783,20 +723,6 @@ int vscnprintf(char *buf, size_t size, const char *fmt, va_list args)  	return 0;  } -/** - * Format a string and place it in a buffer - * - * @param buf	The buffer to place the result into - * @param size	The size of the buffer, including the trailing null space - * @param fmt	The format string to use - * @param ...	Arguments for the format string - * @return the number of characters which would be - * generated for the given input, excluding the trailing null, - * as per ISO C99.  If the return is greater than or equal to - * @size, the resulting string is truncated. - * - * See the vsprintf() documentation for format string extensions over C99. - */  int snprintf(char *buf, size_t size, const char *fmt, ...)  {  	va_list args; @@ -809,20 +735,6 @@ int snprintf(char *buf, size_t size, const char *fmt, ...)  	return i;  } -/** - * Format a string and place it in a buffer - * - * @param buf	The buffer to place the result into - * @param size	The size of the buffer, including the trailing null space - * @param fmt	The format string to use - * @param ...	Arguments for the format string - * - * The return value is the number of characters written into @buf not including - * the trailing '\0'. If @size is == 0 the function returns 0. - * - * See the vsprintf() documentation for format string extensions over C99. - */ -  int scnprintf(char *buf, size_t size, const char *fmt, ...)  {  	va_list args; @@ -854,18 +766,6 @@ int vsprintf(char *buf, const char *fmt, va_list args)  	return vsnprintf_internal(buf, INT_MAX, fmt, args);  } -/** - * Format a string and place it in a buffer - * - * @param buf	The buffer to place the result into - * @param fmt	The format string to use - * @param ...	Arguments for the format string - * - * The function returns the number of characters written - * into @buf. - * - * See the vsprintf() documentation for format string extensions over C99. - */  int sprintf(char * buf, const char *fmt, ...)  {  	va_list args; | 
