19785c905SSimon Glass /* 29785c905SSimon Glass * (C) Copyright 2000-2009 39785c905SSimon Glass * Wolfgang Denk, DENX Software Engineering, wd@denx.de. 49785c905SSimon Glass * 5*1a459660SWolfgang Denk * SPDX-License-Identifier: GPL-2.0+ 69785c905SSimon Glass */ 79785c905SSimon Glass 89785c905SSimon Glass #ifndef __VSPRINTF_H 99785c905SSimon Glass #define __VSPRINTF_H 109785c905SSimon Glass 119785c905SSimon Glass ulong simple_strtoul(const char *cp, char **endp, unsigned int base); 1271ec92b6SSimon Glass 1371ec92b6SSimon Glass /** 1471ec92b6SSimon Glass * strict_strtoul - convert a string to an unsigned long strictly 1571ec92b6SSimon Glass * @param cp The string to be converted 1671ec92b6SSimon Glass * @param base The number base to use 1771ec92b6SSimon Glass * @param res The converted result value 1871ec92b6SSimon Glass * @return 0 if conversion is successful and *res is set to the converted 1971ec92b6SSimon Glass * value, otherwise it returns -EINVAL and *res is set to 0. 2071ec92b6SSimon Glass * 2171ec92b6SSimon Glass * strict_strtoul converts a string to an unsigned long only if the 2271ec92b6SSimon Glass * string is really an unsigned long string, any string containing 2371ec92b6SSimon Glass * any invalid char at the tail will be rejected and -EINVAL is returned, 2471ec92b6SSimon Glass * only a newline char at the tail is acceptible because people generally 2571ec92b6SSimon Glass * change a module parameter in the following way: 2671ec92b6SSimon Glass * 2771ec92b6SSimon Glass * echo 1024 > /sys/module/e1000/parameters/copybreak 2871ec92b6SSimon Glass * 2971ec92b6SSimon Glass * echo will append a newline to the tail. 3071ec92b6SSimon Glass * 3171ec92b6SSimon Glass * simple_strtoul just ignores the successive invalid characters and 3271ec92b6SSimon Glass * return the converted value of prefix part of the string. 3371ec92b6SSimon Glass * 3471ec92b6SSimon Glass * Copied this function from Linux 2.6.38 commit ID: 3571ec92b6SSimon Glass * 521cb40b0c44418a4fd36dc633f575813d59a43d 3671ec92b6SSimon Glass * 3771ec92b6SSimon Glass */ 389785c905SSimon Glass int strict_strtoul(const char *cp, unsigned int base, unsigned long *res); 399785c905SSimon Glass unsigned long long simple_strtoull(const char *cp, char **endp, 409785c905SSimon Glass unsigned int base); 419785c905SSimon Glass long simple_strtol(const char *cp, char **endp, unsigned int base); 429785c905SSimon Glass void panic(const char *fmt, ...) 439785c905SSimon Glass __attribute__ ((format (__printf__, 1, 2), noreturn)); 4471ec92b6SSimon Glass 4571ec92b6SSimon Glass /** 4671ec92b6SSimon Glass * Format a string and place it in a buffer 4771ec92b6SSimon Glass * 4871ec92b6SSimon Glass * @param buf The buffer to place the result into 4971ec92b6SSimon Glass * @param fmt The format string to use 5071ec92b6SSimon Glass * @param ... Arguments for the format string 5171ec92b6SSimon Glass * 5271ec92b6SSimon Glass * The function returns the number of characters written 5371ec92b6SSimon Glass * into @buf. 5471ec92b6SSimon Glass * 5571ec92b6SSimon Glass * See the vsprintf() documentation for format string extensions over C99. 5671ec92b6SSimon Glass */ 579785c905SSimon Glass int sprintf(char *buf, const char *fmt, ...) 589785c905SSimon Glass __attribute__ ((format (__printf__, 2, 3))); 5971ec92b6SSimon Glass 6071ec92b6SSimon Glass /** 6171ec92b6SSimon Glass * Format a string and place it in a buffer (va_list version) 6271ec92b6SSimon Glass * 6371ec92b6SSimon Glass * @param buf The buffer to place the result into 6471ec92b6SSimon Glass * @param size The size of the buffer, including the trailing null space 6571ec92b6SSimon Glass * @param fmt The format string to use 6671ec92b6SSimon Glass * @param args Arguments for the format string 6771ec92b6SSimon Glass * @return the number of characters which have been written into 6871ec92b6SSimon Glass * the @buf not including the trailing '\0'. If @size is == 0 the function 6971ec92b6SSimon Glass * returns 0. 7071ec92b6SSimon Glass * 7171ec92b6SSimon Glass * If you're not already dealing with a va_list consider using scnprintf(). 7271ec92b6SSimon Glass * 7371ec92b6SSimon Glass * See the vsprintf() documentation for format string extensions over C99. 7471ec92b6SSimon Glass */ 759785c905SSimon Glass int vsprintf(char *buf, const char *fmt, va_list args); 769785c905SSimon Glass char *simple_itoa(ulong i); 779785c905SSimon Glass 78046a37bdSSonny Rao #ifdef CONFIG_SYS_VSNPRINTF 7971ec92b6SSimon Glass /** 8071ec92b6SSimon Glass * Format a string and place it in a buffer 8171ec92b6SSimon Glass * 8271ec92b6SSimon Glass * @param buf The buffer to place the result into 8371ec92b6SSimon Glass * @param size The size of the buffer, including the trailing null space 8471ec92b6SSimon Glass * @param fmt The format string to use 8571ec92b6SSimon Glass * @param ... Arguments for the format string 8671ec92b6SSimon Glass * @return the number of characters which would be 8771ec92b6SSimon Glass * generated for the given input, excluding the trailing null, 8871ec92b6SSimon Glass * as per ISO C99. If the return is greater than or equal to 8971ec92b6SSimon Glass * @size, the resulting string is truncated. 9071ec92b6SSimon Glass * 9171ec92b6SSimon Glass * See the vsprintf() documentation for format string extensions over C99. 9271ec92b6SSimon Glass */ 93046a37bdSSonny Rao int snprintf(char *buf, size_t size, const char *fmt, ...) 94046a37bdSSonny Rao __attribute__ ((format (__printf__, 3, 4))); 9571ec92b6SSimon Glass 9671ec92b6SSimon Glass /** 9771ec92b6SSimon Glass * Format a string and place it in a buffer 9871ec92b6SSimon Glass * 9971ec92b6SSimon Glass * @param buf The buffer to place the result into 10071ec92b6SSimon Glass * @param size The size of the buffer, including the trailing null space 10171ec92b6SSimon Glass * @param fmt The format string to use 10271ec92b6SSimon Glass * @param ... Arguments for the format string 10371ec92b6SSimon Glass * 10471ec92b6SSimon Glass * The return value is the number of characters written into @buf not including 10571ec92b6SSimon Glass * the trailing '\0'. If @size is == 0 the function returns 0. 10671ec92b6SSimon Glass * 10771ec92b6SSimon Glass * See the vsprintf() documentation for format string extensions over C99. 10871ec92b6SSimon Glass */ 109046a37bdSSonny Rao int scnprintf(char *buf, size_t size, const char *fmt, ...) 110046a37bdSSonny Rao __attribute__ ((format (__printf__, 3, 4))); 11171ec92b6SSimon Glass 11271ec92b6SSimon Glass /** 11371ec92b6SSimon Glass * Format a string and place it in a buffer (base function) 11471ec92b6SSimon Glass * 11571ec92b6SSimon Glass * @param buf The buffer to place the result into 11671ec92b6SSimon Glass * @param size The size of the buffer, including the trailing null space 11771ec92b6SSimon Glass * @param fmt The format string to use 11871ec92b6SSimon Glass * @param args Arguments for the format string 11971ec92b6SSimon Glass * @return The number characters which would be generated for the given 12071ec92b6SSimon Glass * input, excluding the trailing '\0', as per ISO C99. Note that fewer 12171ec92b6SSimon Glass * characters may be written if this number of characters is >= size. 12271ec92b6SSimon Glass * 12371ec92b6SSimon Glass * This function follows C99 vsnprintf, but has some extensions: 12471ec92b6SSimon Glass * %pS output the name of a text symbol 12571ec92b6SSimon Glass * %pF output the name of a function pointer 12671ec92b6SSimon Glass * %pR output the address range in a struct resource 12771ec92b6SSimon Glass * 12871ec92b6SSimon Glass * The function returns the number of characters which would be 12971ec92b6SSimon Glass * generated for the given input, excluding the trailing '\0', 13071ec92b6SSimon Glass * as per ISO C99. 13171ec92b6SSimon Glass * 13271ec92b6SSimon Glass * Call this function if you are already dealing with a va_list. 13371ec92b6SSimon Glass * You probably want snprintf() instead. 13471ec92b6SSimon Glass */ 135046a37bdSSonny Rao int vsnprintf(char *buf, size_t size, const char *fmt, va_list args); 13671ec92b6SSimon Glass 13771ec92b6SSimon Glass /** 13871ec92b6SSimon Glass * Format a string and place it in a buffer (va_list version) 13971ec92b6SSimon Glass * 14071ec92b6SSimon Glass * @param buf The buffer to place the result into 14171ec92b6SSimon Glass * @param size The size of the buffer, including the trailing null space 14271ec92b6SSimon Glass * @param fmt The format string to use 14371ec92b6SSimon Glass * @param args Arguments for the format string 14471ec92b6SSimon Glass * @return the number of characters which have been written into 14571ec92b6SSimon Glass * the @buf not including the trailing '\0'. If @size is == 0 the function 14671ec92b6SSimon Glass * returns 0. 14771ec92b6SSimon Glass * 14871ec92b6SSimon Glass * If you're not already dealing with a va_list consider using scnprintf(). 14971ec92b6SSimon Glass * 15071ec92b6SSimon Glass * See the vsprintf() documentation for format string extensions over C99. 15171ec92b6SSimon Glass */ 152046a37bdSSonny Rao int vscnprintf(char *buf, size_t size, const char *fmt, va_list args); 153046a37bdSSonny Rao #else 154046a37bdSSonny Rao /* 155046a37bdSSonny Rao * Use macros to silently drop the size parameter. Note that the 'cn' 156046a37bdSSonny Rao * versions are the same as the 'n' versions since the functions assume 157046a37bdSSonny Rao * there is always enough buffer space when !CONFIG_SYS_VSNPRINTF 158046a37bdSSonny Rao */ 159046a37bdSSonny Rao #define snprintf(buf, size, fmt, args...) sprintf(buf, fmt, ##args) 160046a37bdSSonny Rao #define scnprintf(buf, size, fmt, args...) sprintf(buf, fmt, ##args) 161046a37bdSSonny Rao #define vsnprintf(buf, size, fmt, args...) vsprintf(buf, fmt, ##args) 162046a37bdSSonny Rao #define vscnprintf(buf, size, fmt, args...) vsprintf(buf, fmt, ##args) 163046a37bdSSonny Rao #endif /* CONFIG_SYS_VSNPRINTF */ 164046a37bdSSonny Rao 165b8bcaa3aSSimon Glass /** 166b8bcaa3aSSimon Glass * print_grouped_ull() - print a value with digits grouped by ',' 167b8bcaa3aSSimon Glass * 168b8bcaa3aSSimon Glass * This prints a value with grouped digits, like 12,345,678 to make it easier 169b8bcaa3aSSimon Glass * to read. 170b8bcaa3aSSimon Glass * 171b8bcaa3aSSimon Glass * @val: Value to print 172b8bcaa3aSSimon Glass * @digits: Number of digiits to print 173b8bcaa3aSSimon Glass */ 174b8bcaa3aSSimon Glass void print_grouped_ull(unsigned long long int_val, int digits); 175b8bcaa3aSSimon Glass 1769785c905SSimon Glass #endif 177