You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
«<br />
«<br />
«<br />
«<br />
«<br />
322 volume VI os16<br />
105.9.33 lib/stdio/snprintf.c<br />
Si veda la sezione 98.78.<br />
2760001 |#include <br />
2760002 |#include <br />
2760003 |//----------------------------------------------------------------------<br />
2760004 |int<br />
2760005 |snprintf (char *restrict string, size_t size,<br />
2760006 | const char *restrict format, ...)<br />
2760007 |{<br />
2760008 | va_list ap;<br />
2760009 | va_start (ap, format);<br />
2760010 | return vsnprintf (string, size, format, ap);<br />
2760011 |}<br />
105.9.34 lib/stdio/sprintf.c<br />
Si veda la sezione 98.78.<br />
2770001 |#include <br />
2770002 |#include <br />
2770003 |//----------------------------------------------------------------------<br />
2770004 |int<br />
2770005 |sprintf (char *restrict string, const char *restrict format,<br />
2770006 | ...)<br />
2770007 |{<br />
2770008 | va_list ap;<br />
2770009 | va_start (ap, format);<br />
2770010 | return vsnprintf (string, (size_t) BUFSIZ, format, ap);<br />
2770011 |}<br />
105.9.35 lib/stdio/sscanf.c<br />
Si veda la sezione 98.90.<br />
2780001 |#include <br />
2780002 |//----------------------------------------------------------------------<br />
2780003 |int<br />
2780004 |sscanf (char *restrict string, const char *restrict format, ...)<br />
2780005 |{<br />
2780006 | va_list ap;<br />
2780007 | va_start (ap, format);<br />
2780008 | return vsscanf (string, format, ap);<br />
2780009 |}<br />
105.9.36 lib/stdio/vfprintf.c<br />
Si veda la sezione 98.128.<br />
2790001 |#include <br />
2790002 |#include <br />
2790003 |#include <br />
2790004 |#include <br />
2790005 |#include <br />
2790006 |//----------------------------------------------------------------------<br />
2790007 |int<br />
2790008 |vfprintf (FILE *fp, char *restrict format, va_list arg)<br />
2790009 |{<br />
2790010 | ssize_t size_written;<br />
2790011 | size_t size;<br />
2790012 | size_t size_total;<br />
2790013 | int status;<br />
2790014 | char string[BUFSIZ];<br />
2790015 | char *buffer = string;<br />
2790016 | //<br />
2790017 | buffer[0] = 0;<br />
2790018 | status = vsprintf (buffer, format, arg);<br />
2790019 | //<br />
2790020 | size = strlen (buffer);<br />
2790021 | if (size >= BUFSIZ)<br />
2790022 | {<br />
2790023 | size = BUFSIZ;<br />
2790024 | }<br />
2790025 | //<br />
2790026 | for (size_total = 0, size_written = 0;<br />
2790027 | size_total < size;<br />
2790028 | size_total += size_written, buffer += size_written)<br />
2790029 | {<br />
2790030 | size_written = write (fp->fdn, buffer, size - size_total);<br />
2790031 | if (size_written < 0)<br />
2790032 | {<br />
2790033 | return (size_total);<br />
2790034 | }<br />
2790035 | }<br />
2790036 | return (size);<br />
2790037 |}<br />
105.9.37 lib/stdio/vfscanf.c<br />
Si veda la sezione 98.129.<br />
2800001 |#include <br />
2800002 |<br />
2800003 |//----------------------------------------------------------------------<br />
2800004 |int vfsscanf (FILE *restrict fp, const char *string,<br />
2800005 | const char *restrict format, va_list ap);<br />
2800006 |//----------------------------------------------------------------------<br />
2800007 |int<br />
2800008 |vfscanf (FILE *restrict fp, const char *restrict format, va_list ap)<br />
2800009 |{<br />
2800010 | return (vfsscanf (fp, NULL, format, ap));<br />
2800011 |}<br />
2800012 |//----------------------------------------------------------------------<br />
Sorgenti della libreria generale 323<br />
105.9.38 lib/stdio/vfsscanf.c<br />
Si veda la sezione 98.129.<br />
2810001 |#include <br />
2810002 |#include <br />
2810003 |#include <br />
2810004 |#include <br />
2810005 |#include <br />
2810006 |#include <br />
2810007 |#include <br />
2810008 |#include <br />
2810009 |#include <br />
2810010 |//----------------------------------------------------------------------<br />
2810011 |//<br />
2810012 |// This function is not standard and is able to do the work of both<br />
2810013 |// ‘vfscanf()’ and ‘vsscanf()’.<br />
2810014 |//<br />
2810015 |//----------------------------------------------------------------------<br />
2810016 |#define WIDTH_MAX 64<br />
2810017 |//----------------------------------------------------------------------<br />
2810018 |static intmax_t strtointmax (const char *restrict string,<br />
2810019 | char **restrict endptr, int base,<br />
2810020 | size_t max_width);<br />
2810021 |static int ass_or_eof (int consumed, int assigned);<br />
2810022 |//----------------------------------------------------------------------<br />
2810023 |int<br />
2810024 |vfsscanf (FILE *restrict fp, const char *string,<br />
2810025 | const char *restrict format, va_list ap)<br />
2810026 |{<br />
2810027 | int f = 0; // Format index.<br />
2810028 | char buffer[BUFSIZ];<br />
2810029 | const char *input = string; // Default.<br />
2810030 | const char *start = input; // Default.<br />
2810031 | char *next = NULL;<br />
2810032 | int scanned = 0;<br />
2810033 | //<br />
2810034 | bool stream = 0;<br />
2810035 | bool flag_star = 0;<br />
2810036 | bool specifier = 0;<br />
2810037 | bool specifier_flags = 0;<br />
2810038 | bool specifier_width = 0;<br />
2810039 | bool specifier_type = 0;<br />
2810040 | bool inverted = 0;<br />
2810041 | //<br />
2810042 | char *ptr_char;<br />
2810043 | signed char *ptr_schar;<br />
2810044 | unsigned char *ptr_uchar;<br />
2810045 | short int *ptr_sshort;<br />
2810046 | unsigned short int *ptr_ushort;<br />
2810047 | int *ptr_sint;<br />
2810048 | unsigned int *ptr_uint;<br />
2810049 | long int *ptr_slong;<br />
2810050 | unsigned long int *ptr_ulong;<br />
2810051 | intmax_t *ptr_simax;<br />
2810052 | uintmax_t *ptr_uimax;<br />
2810053 | size_t *ptr_size;<br />
2810054 | ptrdiff_t *ptr_ptrdiff;<br />
2810055 | void **ptr_void;<br />
2810056 | //<br />
2810057 | size_t width;<br />
2810058 | char width_string[WIDTH_MAX+1];<br />
2810059 | int w; // Index inside width string.<br />
2810060 | int assigned = 0; // Assignment counter.<br />
2810061 | int consumed = 0; // Consumed counter.<br />
2810062 | //<br />
2810063 | intmax_t value_i;<br />
2810064 | uintmax_t value_u;<br />
2810065 | //<br />
2810066 | const char *end_format;<br />
2810067 | const char *end_input;<br />
2810068 | int count; // Generic counter.<br />
2810069 | int index; // Generic index.<br />
2810070 | bool ascii[128];<br />
2810071 | //<br />
2810072 | void *pstatus;<br />
2810073 | //<br />
2810074 | // Initialize some data.<br />
2810075 | //<br />
2810076 | width_string[0] = ’\0’;<br />
2810077 | end_format = format + (strlen (format));<br />
2810078 | //<br />
2810079 | // Check arguments and find where input comes.<br />
2810080 | //<br />
2810081 | if (fp == NULL && (string == NULL || string[0] == 0))<br />
2810082 | {<br />
2810083 | errset (EINVAL); // Invalid argument.<br />
2810084 | return (EOF);<br />
2810085 | }<br />
2810086 | //<br />
2810087 | if (fp != NULL && string != NULL && string[0] != 0)<br />
2810088 | {<br />
2810089 | errset (EINVAL); // Invalid argument.<br />
2810090 | return (EOF);<br />
2810091 | }<br />
2810092 | //<br />
2810093 | if (fp != NULL)<br />
2810094 | {<br />
2810095 | stream = 1;<br />
2810096 | }<br />
2810097 | //<br />
2810098 | //<br />
2810099 | //<br />
2810100 | for (;;)<br />
2810101 | {<br />
2810102 | if (stream)<br />
2810103 | {<br />
2810104 | pstatus = fgets (buffer, BUFSIZ, fp);<br />
2810105 | //<br />
2810106 | if (pstatus == NULL)<br />
2810107 | {<br />
2810108 | return (ass_or_eof (consumed, assigned));<br />
2810109 | }<br />
2810110 | //<br />
2810111 | input = buffer;<br />
2810112 | start = input;<br />
2810113 | next = NULL;<br />
2810114 | }<br />
«