Merge branch 'master' into for-next
Fast-forwarded to current state of Linus' tree as there are patches to be applied for files that didn't exist on the old branch.
This commit is contained in:
164
lib/vsprintf.c
164
lib/vsprintf.c
@@ -120,147 +120,6 @@ long long simple_strtoll(const char *cp, char **endp, unsigned int base)
|
||||
}
|
||||
EXPORT_SYMBOL(simple_strtoll);
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
int strict_strtoul(const char *cp, unsigned int base, unsigned long *res)
|
||||
{
|
||||
char *tail;
|
||||
unsigned long val;
|
||||
|
||||
*res = 0;
|
||||
if (!*cp)
|
||||
return -EINVAL;
|
||||
|
||||
val = simple_strtoul(cp, &tail, base);
|
||||
if (tail == cp)
|
||||
return -EINVAL;
|
||||
|
||||
if ((tail[0] == '\0') || (tail[0] == '\n' && tail[1] == '\0')) {
|
||||
*res = val;
|
||||
return 0;
|
||||
}
|
||||
|
||||
return -EINVAL;
|
||||
}
|
||||
EXPORT_SYMBOL(strict_strtoul);
|
||||
|
||||
/**
|
||||
* strict_strtol - convert a string to a long strictly
|
||||
* @cp: The string to be converted
|
||||
* @base: The number base to use
|
||||
* @res: The converted result value
|
||||
*
|
||||
* strict_strtol is similiar to strict_strtoul, but it allows the first
|
||||
* character of a string is '-'.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
int strict_strtol(const char *cp, unsigned int base, long *res)
|
||||
{
|
||||
int ret;
|
||||
if (*cp == '-') {
|
||||
ret = strict_strtoul(cp + 1, base, (unsigned long *)res);
|
||||
if (!ret)
|
||||
*res = -(*res);
|
||||
} else {
|
||||
ret = strict_strtoul(cp, base, (unsigned long *)res);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(strict_strtol);
|
||||
|
||||
/**
|
||||
* strict_strtoull - convert a string to an unsigned long long strictly
|
||||
* @cp: The string to be converted
|
||||
* @base: The number base to use
|
||||
* @res: The converted result value
|
||||
*
|
||||
* strict_strtoull converts a string to an unsigned long long only if the
|
||||
* string is really an unsigned long 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 of the string.
|
||||
*
|
||||
* 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_strtoull just ignores the successive invalid characters and
|
||||
* return the converted value of prefix part of the string.
|
||||
*/
|
||||
int strict_strtoull(const char *cp, unsigned int base, unsigned long long *res)
|
||||
{
|
||||
char *tail;
|
||||
unsigned long long val;
|
||||
|
||||
*res = 0;
|
||||
if (!*cp)
|
||||
return -EINVAL;
|
||||
|
||||
val = simple_strtoull(cp, &tail, base);
|
||||
if (tail == cp)
|
||||
return -EINVAL;
|
||||
if ((tail[0] == '\0') || (tail[0] == '\n' && tail[1] == '\0')) {
|
||||
*res = val;
|
||||
return 0;
|
||||
}
|
||||
|
||||
return -EINVAL;
|
||||
}
|
||||
EXPORT_SYMBOL(strict_strtoull);
|
||||
|
||||
/**
|
||||
* strict_strtoll - convert a string to a long long strictly
|
||||
* @cp: The string to be converted
|
||||
* @base: The number base to use
|
||||
* @res: The converted result value
|
||||
*
|
||||
* strict_strtoll is similiar to strict_strtoull, but it allows the first
|
||||
* character of a string is '-'.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
int strict_strtoll(const char *cp, unsigned int base, long long *res)
|
||||
{
|
||||
int ret;
|
||||
if (*cp == '-') {
|
||||
ret = strict_strtoull(cp + 1, base, (unsigned long long *)res);
|
||||
if (!ret)
|
||||
*res = -(*res);
|
||||
} else {
|
||||
ret = strict_strtoull(cp, base, (unsigned long long *)res);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(strict_strtoll);
|
||||
|
||||
static noinline_for_stack
|
||||
int skip_atoi(const char **s)
|
||||
{
|
||||
@@ -574,7 +433,9 @@ char *symbol_string(char *buf, char *end, void *ptr,
|
||||
unsigned long value = (unsigned long) ptr;
|
||||
#ifdef CONFIG_KALLSYMS
|
||||
char sym[KSYM_SYMBOL_LEN];
|
||||
if (ext != 'f' && ext != 's')
|
||||
if (ext == 'B')
|
||||
sprint_backtrace(sym, value);
|
||||
else if (ext != 'f' && ext != 's')
|
||||
sprint_symbol(sym, value);
|
||||
else
|
||||
kallsyms_lookup(value, NULL, NULL, NULL, sym);
|
||||
@@ -949,6 +810,7 @@ int kptr_restrict = 1;
|
||||
* - 'f' For simple symbolic function names without offset
|
||||
* - 'S' For symbolic direct pointers with offset
|
||||
* - 's' For symbolic direct pointers without offset
|
||||
* - 'B' For backtraced symbolic direct pointers with offset
|
||||
* - 'R' For decoded struct resource, e.g., [mem 0x0-0x1f 64bit pref]
|
||||
* - 'r' For raw struct resource, e.g., [mem 0x0-0x1f flags 0x201]
|
||||
* - 'M' For a 6-byte MAC address, it prints the address in the
|
||||
@@ -991,7 +853,7 @@ static noinline_for_stack
|
||||
char *pointer(const char *fmt, char *buf, char *end, void *ptr,
|
||||
struct printf_spec spec)
|
||||
{
|
||||
if (!ptr) {
|
||||
if (!ptr && *fmt != 'K') {
|
||||
/*
|
||||
* Print (null) with the same width as a pointer so it makes
|
||||
* tabular output look nice.
|
||||
@@ -1008,6 +870,7 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
|
||||
/* Fallthrough */
|
||||
case 'S':
|
||||
case 's':
|
||||
case 'B':
|
||||
return symbol_string(buf, end, ptr, spec, *fmt);
|
||||
case 'R':
|
||||
case 'r':
|
||||
@@ -1047,16 +910,12 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
|
||||
if (spec.field_width == -1)
|
||||
spec.field_width = 2 * sizeof(void *);
|
||||
return string(buf, end, "pK-error", spec);
|
||||
} else if ((kptr_restrict == 0) ||
|
||||
(kptr_restrict == 1 &&
|
||||
has_capability_noaudit(current, CAP_SYSLOG)))
|
||||
break;
|
||||
|
||||
if (spec.field_width == -1) {
|
||||
spec.field_width = 2 * sizeof(void *);
|
||||
spec.flags |= ZEROPAD;
|
||||
}
|
||||
return number(buf, end, 0, spec);
|
||||
if (!((kptr_restrict == 0) ||
|
||||
(kptr_restrict == 1 &&
|
||||
has_capability_noaudit(current, CAP_SYSLOG))))
|
||||
ptr = NULL;
|
||||
break;
|
||||
}
|
||||
spec.flags |= SMALL;
|
||||
if (spec.field_width == -1) {
|
||||
@@ -1279,6 +1138,7 @@ qualifier:
|
||||
* %ps output the name of a text symbol without offset
|
||||
* %pF output the name of a function pointer with its offset
|
||||
* %pf output the name of a function pointer without its offset
|
||||
* %pB output the name of a backtrace symbol with its offset
|
||||
* %pR output the address range in a struct resource with decoded flags
|
||||
* %pr output the address range in a struct resource with raw flags
|
||||
* %pM output a 6-byte MAC address with colons
|
||||
|
Reference in New Issue
Block a user