24.01.2014 Views

Codice

Codice

Codice

SHOW MORE
SHOW LESS

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 />

«

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!