sbin/newfs_hammer2: Fail if input size is < alignment size
[dragonfly.git] / contrib / gmp / printf / printffuns.c
blob4f4e74d989f0c0cb37b043a83ffb72bd509109f8
1 /* __gmp_fprintf_funs -- support for formatted output to FILEs.
3 THE FUNCTIONS IN THIS FILE ARE FOR INTERNAL USE ONLY. THEY'RE ALMOST
4 CERTAIN TO BE SUBJECT TO INCOMPATIBLE CHANGES OR DISAPPEAR COMPLETELY IN
5 FUTURE GNU MP RELEASES.
7 Copyright 2001 Free Software Foundation, Inc.
9 This file is part of the GNU MP Library.
11 The GNU MP Library is free software; you can redistribute it and/or modify
12 it under the terms of the GNU Lesser General Public License as published by
13 the Free Software Foundation; either version 3 of the License, or (at your
14 option) any later version.
16 The GNU MP Library is distributed in the hope that it will be useful, but
17 WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
18 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
19 License for more details.
21 You should have received a copy of the GNU Lesser General Public License
22 along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. */
24 #include "config.h"
26 #if HAVE_STDARG
27 #include <stdarg.h>
28 #else
29 #include <varargs.h>
30 #endif
32 #include <stdio.h>
33 #include <string.h>
35 #include "gmp.h"
36 #include "gmp-impl.h"
38 /* SunOS 4 stdio.h doesn't provide a prototype for this */
39 #if ! HAVE_DECL_VFPRINTF
40 int vfprintf __GMP_PROTO ((FILE *, const char *, va_list));
41 #endif
44 static int
45 gmp_fprintf_memory (FILE *fp, const char *str, size_t len)
47 return fwrite (str, 1, len, fp);
50 /* glibc putc is a function, at least when it's in multi-threaded mode or
51 some such, so fwrite chunks instead of making many calls. */
52 static int
53 gmp_fprintf_reps (FILE *fp, int c, int reps)
55 char buf[256];
56 int i, piece, ret;
57 ASSERT (reps >= 0);
59 memset (buf, c, MIN (reps, sizeof (buf)));
60 for (i = reps; i > 0; i -= sizeof (buf))
62 piece = MIN (i, sizeof (buf));
63 ret = fwrite (buf, 1, piece, fp);
64 if (ret == -1)
65 return ret;
66 ASSERT (ret == piece);
69 return reps;
72 const struct doprnt_funs_t __gmp_fprintf_funs = {
73 (doprnt_format_t) vfprintf,
74 (doprnt_memory_t) gmp_fprintf_memory,
75 (doprnt_reps_t) gmp_fprintf_reps,