Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Johnston <jjohnstn@redhat.com>2007-04-18 00:53:24 +0400
committerJeff Johnston <jjohnstn@redhat.com>2007-04-18 00:53:24 +0400
commitfb5750bfb4c4ffd5ae839c416de192c8bc262b4b (patch)
tree0ca72fa8942e71dc545c18d5d77060f53cdefe34 /newlib/libc/stdio
parent2351dd18b414d71a9306204e9eebf01f41289bbc (diff)
2007-04-17 Brian Dessent <brian@dessent.net>
* libc/stdio/sscanf.c: Update documentation comments. * libc/stdio/vfscanf.c (__SVFSCANF_R): Handle j, t, and z modifiers.
Diffstat (limited to 'newlib/libc/stdio')
-rw-r--r--newlib/libc/stdio/sscanf.c24
-rw-r--r--newlib/libc/stdio/vfscanf.c38
2 files changed, 58 insertions, 4 deletions
diff --git a/newlib/libc/stdio/sscanf.c b/newlib/libc/stdio/sscanf.c
index 5ad39d8b7..b74dd3ebe 100644
--- a/newlib/libc/stdio/sscanf.c
+++ b/newlib/libc/stdio/sscanf.c
@@ -147,9 +147,9 @@ DESCRIPTION
Then <<scanf>> proceeds to the next format specification.
o size
- <<h>>, <<l>>, and <<L>> are optional size characters which
- override the default way that <<scanf>> interprets the
- data type of the corresponding argument.
+ <<h>>, <<j>>, <<l>>, <<L>>, <<t>>, and <<z>> are optional size
+ characters which override the default way that <<scanf>>
+ interprets the data type of the corresponding argument.
.Modifier Type(s)
@@ -162,6 +162,11 @@ DESCRIPTION
. h D, I, O, U, X no effect
. e, f, c, s, p
.
+. j d, i, o, u, x, n convert input to intmax_t,
+. store in intmax_t object
+.
+. j all others no effect
+.
. l d, i, o, u, x, n convert input to long,
. store in long object
.
@@ -180,7 +185,18 @@ DESCRIPTION
. L e, f, g, E, G convert to long double,
. store in long double
.
-. L all others no effect
+. L all others no effect
+.
+. t d, i, o, u, x, n convert input to ptrdiff_t,
+. store in ptrdiff_t object
+.
+. t all others no effect
+.
+. z d, i, o, u, x, n convert input to size_t,
+. store in size_t object
+.
+. z all others no effect
+.
o <[type]>
diff --git a/newlib/libc/stdio/vfscanf.c b/newlib/libc/stdio/vfscanf.c
index c9808bb48..3b3f63af8 100644
--- a/newlib/libc/stdio/vfscanf.c
+++ b/newlib/libc/stdio/vfscanf.c
@@ -109,6 +109,7 @@ Supporting OS subroutines required:
#include <wctype.h>
#include <stdio.h>
#include <stdlib.h>
+#include <stdint.h>
#include <limits.h>
#include <wchar.h>
#include <string.h>
@@ -380,6 +381,43 @@ _DEFUN(__SVFSCANF_R, (rptr, fp, fmt0, ap),
else
flags |= SHORT;
goto again;
+ case 'j': /* intmax_t */
+ if (sizeof (intmax_t) == sizeof (long))
+ flags |= LONG;
+ else
+ flags |= LONGDBL;
+ goto again;
+ case 't': /* ptrdiff_t */
+ if (sizeof (ptrdiff_t) < sizeof (int))
+ /* POSIX states ptrdiff_t is 16 or more bits, as
+ is short. */
+ flags |= SHORT;
+ else if (sizeof (ptrdiff_t) == sizeof (int))
+ /* no flag needed */;
+ else if (sizeof (ptrdiff_t) <= sizeof (long))
+ flags |= LONG;
+ else
+ /* POSIX states that at least one programming
+ environment must support ptrdiff_t no wider than
+ long, but that means other environments can
+ have ptrdiff_t as wide as long long. */
+ flags |= LONGDBL;
+ goto again;
+ case 'z': /* size_t */
+ if (sizeof (size_t) < sizeof (int))
+ /* POSIX states size_t is 16 or more bits, as is short. */
+ flags |= SHORT;
+ else if (sizeof (size_t) == sizeof (int))
+ /* no flag needed */;
+ else if (sizeof (size_t) <= sizeof (long))
+ flags |= LONG;
+ else
+ /* POSIX states that at least one programming
+ environment must support size_t no wider than
+ long, but that means other environments can
+ have size_t as wide as long long. */
+ flags |= LONGDBL;
+ goto again;
case '0':
case '1':