|
@@ -482,6 +482,35 @@ static char *number(char *buf, char *end, unsigned long long num, int base, int
|
|
|
return buf;
|
|
|
}
|
|
|
|
|
|
+static char *string(char *buf, char *end, char *s, int field_width, int precision, int flags)
|
|
|
+{
|
|
|
+ int len, i;
|
|
|
+
|
|
|
+ if ((unsigned long)s < PAGE_SIZE)
|
|
|
+ s = "<NULL>";
|
|
|
+
|
|
|
+ len = strnlen(s, precision);
|
|
|
+
|
|
|
+ if (!(flags & LEFT)) {
|
|
|
+ while (len < field_width--) {
|
|
|
+ if (buf < end)
|
|
|
+ *buf = ' ';
|
|
|
+ ++buf;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for (i = 0; i < len; ++i) {
|
|
|
+ if (buf < end)
|
|
|
+ *buf = *s;
|
|
|
+ ++buf; ++s;
|
|
|
+ }
|
|
|
+ while (len < field_width--) {
|
|
|
+ if (buf < end)
|
|
|
+ *buf = ' ';
|
|
|
+ ++buf;
|
|
|
+ }
|
|
|
+ return buf;
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* vsnprintf - Format a string and place it in a buffer
|
|
|
* @buf: The buffer to place the result into
|
|
@@ -502,11 +531,9 @@ static char *number(char *buf, char *end, unsigned long long num, int base, int
|
|
|
*/
|
|
|
int vsnprintf(char *buf, size_t size, const char *fmt, va_list args)
|
|
|
{
|
|
|
- int len;
|
|
|
unsigned long long num;
|
|
|
- int i, base;
|
|
|
+ int base;
|
|
|
char *str, *end, c;
|
|
|
- const char *s;
|
|
|
|
|
|
int flags; /* flags to number() */
|
|
|
|
|
@@ -622,29 +649,7 @@ int vsnprintf(char *buf, size_t size, const char *fmt, va_list args)
|
|
|
continue;
|
|
|
|
|
|
case 's':
|
|
|
- s = va_arg(args, char *);
|
|
|
- if ((unsigned long)s < PAGE_SIZE)
|
|
|
- s = "<NULL>";
|
|
|
-
|
|
|
- len = strnlen(s, precision);
|
|
|
-
|
|
|
- if (!(flags & LEFT)) {
|
|
|
- while (len < field_width--) {
|
|
|
- if (str < end)
|
|
|
- *str = ' ';
|
|
|
- ++str;
|
|
|
- }
|
|
|
- }
|
|
|
- for (i = 0; i < len; ++i) {
|
|
|
- if (str < end)
|
|
|
- *str = *s;
|
|
|
- ++str; ++s;
|
|
|
- }
|
|
|
- while (len < field_width--) {
|
|
|
- if (str < end)
|
|
|
- *str = ' ';
|
|
|
- ++str;
|
|
|
- }
|
|
|
+ str = string(str, end, va_arg(args, char *), field_width, precision, flags);
|
|
|
continue;
|
|
|
|
|
|
case 'p':
|