From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from xry111.site (xry111.site [89.208.246.23]) by sourceware.org (Postfix) with ESMTPS id 3159E3858C52 for ; Mon, 29 May 2023 14:15:12 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 3159E3858C52 Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=xry111.site Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=xry111.site DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=xry111.site; s=default; t=1685369710; bh=kH47wniOpmpEHoiotiKMwlO2C6KjM+n6npL6k9M8Jw4=; h=Subject:From:To:Cc:Date:In-Reply-To:References:From; b=jcDSiIYhETUqKYy96aFmHWzKaClxWrN1nF/6gMWxuBmkhCfUYVxAghrAV4LbjYJmH 2PFf/xLtY/YqQtLK5AiyF+OASG2kCOst0A6UiQ3O97qNM2p+MzdHYVPF1OLdC+kTAM JckKqSQQ7Q0/FG/yF5wEKOEzddV98QgE3yA9DbSU= Received: from localhost.localdomain (xry111.site [IPv6:2001:470:683e::1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature ECDSA (P-384) server-digest SHA384) (Client did not present a certificate) (Authenticated sender: xry111@xry111.site) by xry111.site (Postfix) with ESMTPSA id 0EC3165A4C; Mon, 29 May 2023 10:15:09 -0400 (EDT) Message-ID: <8d3c59b3cccab5722e2253ecc69a2322d8386a80.camel@xry111.site> Subject: Re: [PATCH v2] libio: Add nonnull attribute for most FILE * arguments in stdio.h From: Xi Ruoyao To: Carlos O'Donell , libc-alpha@sourceware.org Cc: Adhemerval Zanella Netto , Alex Colomar Date: Mon, 29 May 2023 22:15:08 +0800 In-Reply-To: <092bae7e-6e7b-d832-39ec-debb0ee6cfb8@redhat.com> References: <20230519051940.17458-1-xry111@xry111.site> <092bae7e-6e7b-d832-39ec-debb0ee6cfb8@redhat.com> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable User-Agent: Evolution 3.48.1 MIME-Version: 1.0 X-Spam-Status: No, score=-6.4 required=5.0 tests=BAYES_00,BODY_8BITS,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,LIKELY_SPAM_FROM,SPF_HELO_PASS,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On Mon, 2023-05-29 at 09:58 -0400, Carlos O'Donell wrote: > On 5/19/23 01:19, Xi Ruoyao wrote: > > During the review of a GCC analyzer test case, we found most stdio > > functions accepting a FILE * argument expect it to be nonnull and just > > segfault when the argument is NULL.=C2=A0 Add nonnull attribute for the= m. > >=20 > > fflush and fflush_unlocked are well defined when __stream is NULL so > > they are not touched. > >=20 > > For fputs, fgets, fread, fwrite, fprintf, vfprintf, and their unlocked > > version, if __stream is empty but there is nothing to read or write, > > they don't segfault and I'm not sure if the standard allows such a use > > so I left them out. >=20 > May you please provided Signed-off-by for DCO or explain your FSF copyrig= ht assignment? I have a FSF assignment but it only covers GCC. For this change I can sign it off. Signed-off-by: Xi Ruoyao >=20 > > --- > > =C2=A0libio/stdio.h | 118 ++++++++++++++++++++++++++-------------------= ----- > > =C2=A01 file changed, 62 insertions(+), 56 deletions(-) > >=20 > > diff --git a/libio/stdio.h b/libio/stdio.h > > index 4cf9f1c012..49ba361931 100644 > > --- a/libio/stdio.h > > +++ b/libio/stdio.h > > @@ -278,7 +278,7 @@ extern FILE *__REDIRECT (fopen, (const char *__rest= rict __filename, > > =C2=A0extern FILE *__REDIRECT (freopen, (const char *__restrict __filen= ame, > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 const char *__= restrict __modes, > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 FILE *__restri= ct __stream), freopen64) > > -=C2=A0 __wur; > > +=C2=A0 __wur __nonnull ((3)); > > =C2=A0# else > > =C2=A0#=C2=A0 define fopen fopen64 > > =C2=A0#=C2=A0 define freopen freopen64 > > @@ -330,21 +330,22 @@ extern __FILE *open_wmemstream (wchar_t **__buflo= c, size_t *__sizeloc) __THROW > > =C2=A0 > > =C2=A0/* If BUF is NULL, make STREAM unbuffered. > > =C2=A0=C2=A0=C2=A0 Else make it use buffer BUF, of size BUFSIZ.=C2=A0 *= / > > -extern void setbuf (FILE *__restrict __stream, char *__restrict __buf)= __THROW; > > +extern void setbuf (FILE *__restrict __stream, char *__restrict __buf)= __THROW > > +=C2=A0 __nonnull ((1)); > > =C2=A0/* Make STREAM use buffering mode MODE. > > =C2=A0=C2=A0=C2=A0 If BUF is not NULL, use N bytes of it for buffering; > > =C2=A0=C2=A0=C2=A0 else allocate an internal buffer N bytes long.=C2=A0= */ > > =C2=A0extern int setvbuf (FILE *__restrict __stream, char *__restrict _= _buf, > > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 int __modes, size_t __n) __THROW; > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 int __modes, size_t __n) __THROW __= nonnull ((1)); > > =C2=A0 > > =C2=A0#ifdef=C2=A0__USE_MISC > > =C2=A0/* If BUF is NULL, make STREAM unbuffered. > > =C2=A0=C2=A0=C2=A0 Else make it use SIZE bytes of BUF for buffering.=C2= =A0 */ > > =C2=A0extern void setbuffer (FILE *__restrict __stream, char *__restric= t __buf, > > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 size_t __size) __= THROW; > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 size_t __size) __= THROW __nonnull ((1)); > > =C2=A0 > > =C2=A0/* Make STREAM line-buffered.=C2=A0 */ > > -extern void setlinebuf (FILE *__stream) __THROW; > > +extern void setlinebuf (FILE *__stream) __THROW __nonnull ((1)); > > =C2=A0#endif > > =C2=A0 > > =C2=A0 > > @@ -418,7 +419,7 @@ extern int dprintf (int __fd, const char *__restric= t __fmt, ...) > > =C2=A0=C2=A0=C2=A0 This function is a possible cancellation point and t= herefore not > > =C2=A0=C2=A0=C2=A0 marked with __THROW.=C2=A0 */ > > =C2=A0extern int fscanf (FILE *__restrict __stream, > > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 const char *__restrict __format, ...) __w= ur; > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 const char *__restrict __format, ...) __w= ur __nonnull ((1)); > > =C2=A0/* Read formatted input from stdin. > > =C2=A0 > > =C2=A0=C2=A0=C2=A0 This function is a possible cancellation point and t= herefore not > > @@ -439,7 +440,7 @@ extern int sscanf (const char *__restrict __s, > > =C2=A0#=C2=A0 ifdef __REDIRECT > > =C2=A0extern int __REDIRECT (fscanf, (FILE *__restrict __stream, > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0const char *__restrict __fo= rmat, ...), > > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 __isoc23_fscanf) = __wur; > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 __isoc23_fscanf) = __wur __nonnull ((1)); > > =C2=A0extern int __REDIRECT (scanf, (const char *__restrict __format, .= ..), > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 __isoc23_sc= anf) __wur; > > =C2=A0extern int __REDIRECT_NTH (sscanf, (const char *__restrict __s, > > @@ -447,7 +448,7 @@ extern int __REDIRECT_NTH (sscanf, (const char *__r= estrict __s, > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 __isoc23_sscanf); > > =C2=A0#=C2=A0 else > > =C2=A0extern int __isoc23_fscanf (FILE *__restrict __stream, > > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 const char *__restrict __format, ...) __wur; > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 const char *__restrict __format, ...) __wur __nonnull ((1)); > > =C2=A0extern int __isoc23_scanf (const char *__restrict __format, ...) = __wur; > > =C2=A0extern int __isoc23_sscanf (const char *__restrict __s, > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 const char *__restrict __format, ...) __THROW; > > @@ -459,7 +460,7 @@ extern int __isoc23_sscanf (const char *__restrict = __s, > > =C2=A0#=C2=A0 ifdef __REDIRECT > > =C2=A0extern int __REDIRECT (fscanf, (FILE *__restrict __stream, > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0const char *__restrict __fo= rmat, ...), > > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 __isoc99_fscanf) = __wur; > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 __isoc99_fscanf) = __wur __nonnull ((1)); > > =C2=A0extern int __REDIRECT (scanf, (const char *__restrict __format, .= ..), > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 __isoc99_sc= anf) __wur; > > =C2=A0extern int __REDIRECT_NTH (sscanf, (const char *__restrict __s, > > @@ -467,7 +468,7 @@ extern int __REDIRECT_NTH (sscanf, (const char *__r= estrict __s, > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 __isoc99_sscanf); > > =C2=A0#=C2=A0 else > > =C2=A0extern int __isoc99_fscanf (FILE *__restrict __stream, > > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 const char *__restrict __format, ...) __wur; > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 const char *__restrict __format, ...) __wur __nonnull ((1)); > > =C2=A0extern int __isoc99_scanf (const char *__restrict __format, ...) = __wur; > > =C2=A0extern int __isoc99_sscanf (const char *__restrict __s, > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 const char *__restrict __format, ...) __THROW; > > @@ -485,7 +486,7 @@ extern int __isoc99_sscanf (const char *__restrict = __s, > > =C2=A0=C2=A0=C2=A0 marked with __THROW.=C2=A0 */ > > =C2=A0extern int vfscanf (FILE *__restrict __s, const char *__restrict = __format, > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 __gnuc_va_list __arg) > > -=C2=A0=C2=A0=C2=A0=C2=A0 __attribute__ ((__format__ (__scanf__, 2, 0))= ) __wur; > > +=C2=A0=C2=A0=C2=A0=C2=A0 __attribute__ ((__format__ (__scanf__, 2, 0))= ) __wur __nonnull ((1)); > > =C2=A0 > > =C2=A0/* Read formatted input from stdin into argument list ARG. > > =C2=A0 > > @@ -508,7 +509,7 @@ extern int __REDIRECT (vfscanf, > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 (FILE *__re= strict __s, > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= const char *__restrict __format, __gnuc_va_list __arg), > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 __isoc23_vf= scanf) > > -=C2=A0=C2=A0=C2=A0=C2=A0 __attribute__ ((__format__ (__scanf__, 2, 0))= ) __wur; > > +=C2=A0=C2=A0=C2=A0=C2=A0 __attribute__ ((__format__ (__scanf__, 2, 0))= ) __wur __nonnull ((1)); > > =C2=A0extern int __REDIRECT (vscanf, (const char *__restrict __format, > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0__gnuc_va_list __arg), __is= oc23_vscanf) > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 __attribute__ ((__format__ (__scanf__, 1= , 0))) __wur; > > @@ -520,7 +521,7 @@ extern int __REDIRECT_NTH (vsscanf, > > =C2=A0#=C2=A0=C2=A0 elif !defined __REDIRECT > > =C2=A0extern int __isoc23_vfscanf (FILE *__restrict __s, > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 const char *__restrict __format, > > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 __gnuc_va_list __arg) __wur; > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 __gnuc_va_list __arg) __wur __nonnull ((1)); > > =C2=A0extern int __isoc23_vscanf (const char *__restrict __format, > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 __gnuc_va_list __arg) __wur; > > =C2=A0extern int __isoc23_vsscanf (const char *__restrict __s, > > @@ -537,7 +538,7 @@ extern int __REDIRECT (vfscanf, > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 (FILE *__re= strict __s, > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= const char *__restrict __format, __gnuc_va_list __arg), > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 __isoc99_vf= scanf) > > -=C2=A0=C2=A0=C2=A0=C2=A0 __attribute__ ((__format__ (__scanf__, 2, 0))= ) __wur; > > +=C2=A0=C2=A0=C2=A0=C2=A0 __attribute__ ((__format__ (__scanf__, 2, 0))= ) __wur __nonnull ((1)); > > =C2=A0extern int __REDIRECT (vscanf, (const char *__restrict __format, > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0__gnuc_va_list __arg), __is= oc99_vscanf) > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 __attribute__ ((__format__ (__scanf__, 1= , 0))) __wur; > > @@ -549,7 +550,7 @@ extern int __REDIRECT_NTH (vsscanf, > > =C2=A0#=C2=A0=C2=A0 elif !defined __REDIRECT > > =C2=A0extern int __isoc99_vfscanf (FILE *__restrict __s, > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 const char *__restrict __format, > > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 __gnuc_va_list __arg) __wur; > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 __gnuc_va_list __arg) __wur __nonnull ((1)); > > =C2=A0extern int __isoc99_vscanf (const char *__restrict __format, > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 __gnuc_va_list __arg) __wur; > > =C2=A0extern int __isoc99_vsscanf (const char *__restrict __s, > > @@ -568,8 +569,8 @@ extern int __isoc99_vsscanf (const char *__restrict= __s, > > =C2=A0 > > =C2=A0=C2=A0=C2=A0 These functions are possible cancellation points and= therefore not > > =C2=A0=C2=A0=C2=A0 marked with __THROW.=C2=A0 */ > > -extern int fgetc (FILE *__stream); > > -extern int getc (FILE *__stream); > > +extern int fgetc (FILE *__stream) __nonnull ((1)); > > +extern int getc (FILE *__stream) __nonnull ((1)); > > =C2=A0 > > =C2=A0/* Read a character from stdin. > > =C2=A0 > > @@ -582,7 +583,7 @@ extern int getchar (void); > > =C2=A0 > > =C2=A0=C2=A0=C2=A0 These functions are possible cancellation points and= therefore not > > =C2=A0=C2=A0=C2=A0 marked with __THROW.=C2=A0 */ > > -extern int getc_unlocked (FILE *__stream); > > +extern int getc_unlocked (FILE *__stream) __nonnull ((1)); > > =C2=A0extern int getchar_unlocked (void); > > =C2=A0#endif /* Use POSIX.=C2=A0 */ > > =C2=A0 > > @@ -593,7 +594,7 @@ extern int getchar_unlocked (void); > > =C2=A0=C2=A0=C2=A0 cancellation point.=C2=A0 But due to similarity with= an POSIX interface > > =C2=A0=C2=A0=C2=A0 or due to the implementation it is a cancellation po= int and > > =C2=A0=C2=A0=C2=A0 therefore not marked with __THROW.=C2=A0 */ > > -extern int fgetc_unlocked (FILE *__stream); > > +extern int fgetc_unlocked (FILE *__stream) __nonnull ((1)); > > =C2=A0#endif /* Use MISC.=C2=A0 */ > > =C2=A0 > > =C2=A0 > > @@ -604,8 +605,8 @@ extern int fgetc_unlocked (FILE *__stream); > > =C2=A0 > > =C2=A0=C2=A0=C2=A0 These functions is a possible cancellation point and= therefore not > > =C2=A0=C2=A0=C2=A0 marked with __THROW.=C2=A0 */ > > -extern int fputc (int __c, FILE *__stream); > > -extern int putc (int __c, FILE *__stream); > > +extern int fputc (int __c, FILE *__stream) __nonnull ((2)); > > +extern int putc (int __c, FILE *__stream) __nonnull ((2)); > > =C2=A0 > > =C2=A0/* Write a character to stdout. > > =C2=A0 > > @@ -620,7 +621,7 @@ extern int putchar (int __c); > > =C2=A0=C2=A0=C2=A0 cancellation point.=C2=A0 But due to similarity with= an POSIX interface > > =C2=A0=C2=A0=C2=A0 or due to the implementation it is a cancellation po= int and > > =C2=A0=C2=A0=C2=A0 therefore not marked with __THROW.=C2=A0 */ > > -extern int fputc_unlocked (int __c, FILE *__stream); > > +extern int fputc_unlocked (int __c, FILE *__stream) __nonnull ((2)); > > =C2=A0#endif /* Use MISC.=C2=A0 */ > > =C2=A0 > > =C2=A0#ifdef __USE_POSIX199506 > > @@ -628,7 +629,7 @@ extern int fputc_unlocked (int __c, FILE *__stream)= ; > > =C2=A0 > > =C2=A0=C2=A0=C2=A0 These functions are possible cancellation points and= therefore not > > =C2=A0=C2=A0=C2=A0 marked with __THROW.=C2=A0 */ > > -extern int putc_unlocked (int __c, FILE *__stream); > > +extern int putc_unlocked (int __c, FILE *__stream) __nonnull ((2)); > > =C2=A0extern int putchar_unlocked (int __c); > > =C2=A0#endif /* Use POSIX.=C2=A0 */ > > =C2=A0 > > @@ -636,10 +637,10 @@ extern int putchar_unlocked (int __c); > > =C2=A0#if defined __USE_MISC \ > > =C2=A0=C2=A0=C2=A0=C2=A0 || (defined __USE_XOPEN && !defined __USE_XOPE= N2K) > > =C2=A0/* Get a word (int) from STREAM.=C2=A0 */ > > -extern int getw (FILE *__stream); > > +extern int getw (FILE *__stream) __nonnull ((1)); > > =C2=A0 > > =C2=A0/* Write a word (int) to STREAM.=C2=A0 */ > > -extern int putw (int __w, FILE *__stream); > > +extern int putw (int __w, FILE *__stream) __nonnull ((2)); > > =C2=A0#endif > > =C2=A0 > > =C2=A0 > > @@ -689,10 +690,10 @@ extern char *fgets_unlocked (char *__restrict __s= , int __n, > > =C2=A0=C2=A0=C2=A0 therefore not marked with __THROW.=C2=A0 */ > > =C2=A0extern __ssize_t __getdelim (char **__restrict __lineptr, > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 size_t *__restrict __n, int __delimiter, > > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 FILE *__restrict __stream) __wur; > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 FILE *__restrict __stream) __wur __nonnull ((4)); > > =C2=A0extern __ssize_t getdelim (char **__restrict __lineptr, > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 size_t *__restrict __n, int __delimiter, > > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 FILE *__restrict __stream) __wur; > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 FILE *__restrict __stream) __wur __nonnull ((4)); > > =C2=A0 > > =C2=A0/* Like `getdelim', but reads up to a newline. > > =C2=A0 > > @@ -702,7 +703,7 @@ extern __ssize_t getdelim (char **__restrict __line= ptr, > > =C2=A0=C2=A0=C2=A0 therefore not marked with __THROW.=C2=A0 */ > > =C2=A0extern __ssize_t getline (char **__restrict __lineptr, > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 size_t *__restrict __n, > > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 FILE *__restrict __stream) __wur; > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 FILE *__restrict __stream) __wur __nonnull ((3)); > > =C2=A0#endif > > =C2=A0 > > =C2=A0 > > @@ -723,7 +724,7 @@ extern int puts (const char *__s); > > =C2=A0 > > =C2=A0=C2=A0=C2=A0 This function is a possible cancellation point and t= herefore not > > =C2=A0=C2=A0=C2=A0 marked with __THROW.=C2=A0 */ > > -extern int ungetc (int __c, FILE *__stream); > > +extern int ungetc (int __c, FILE *__stream) __nonnull ((2)); > > =C2=A0 > > =C2=A0 > > =C2=A0/* Read chunks of generic data from STREAM. > > @@ -768,17 +769,17 @@ extern size_t fwrite_unlocked (const void *__rest= rict __ptr, size_t __size, > > =C2=A0 > > =C2=A0=C2=A0=C2=A0 This function is a possible cancellation point and t= herefore not > > =C2=A0=C2=A0=C2=A0 marked with __THROW.=C2=A0 */ > > -extern int fseek (FILE *__stream, long int __off, int __whence); > > +extern int fseek (FILE *__stream, long int __off, int __whence) __nonn= ull ((1)); > > =C2=A0/* Return the current position of STREAM. > > =C2=A0 > > =C2=A0=C2=A0=C2=A0 This function is a possible cancellation point and t= herefore not > > =C2=A0=C2=A0=C2=A0 marked with __THROW.=C2=A0 */ > > -extern long int ftell (FILE *__stream) __wur; > > +extern long int ftell (FILE *__stream) __wur __nonnull ((1)); > > =C2=A0/* Rewind to the beginning of STREAM. > > =C2=A0 > > =C2=A0=C2=A0=C2=A0 This function is a possible cancellation point and t= herefore not > > =C2=A0=C2=A0=C2=A0 marked with __THROW.=C2=A0 */ > > -extern void rewind (FILE *__stream); > > +extern void rewind (FILE *__stream) __nonnull ((1)); > > =C2=A0 > > =C2=A0/* The Single Unix Specification, Version 2, specifies an alterna= tive, > > =C2=A0=C2=A0=C2=A0 more adequate interface for the two functions above = which deal with > > @@ -791,18 +792,19 @@ extern void rewind (FILE *__stream); > > =C2=A0 > > =C2=A0=C2=A0=C2=A0 This function is a possible cancellation point and t= herefore not > > =C2=A0=C2=A0=C2=A0 marked with __THROW.=C2=A0 */ > > -extern int fseeko (FILE *__stream, __off_t __off, int __whence); > > +extern int fseeko (FILE *__stream, __off_t __off, int __whence) __nonn= ull ((1)); > > =C2=A0/* Return the current position of STREAM. > > =C2=A0 > > =C2=A0=C2=A0=C2=A0 This function is a possible cancellation point and t= herefore not > > =C2=A0=C2=A0=C2=A0 marked with __THROW.=C2=A0 */ > > -extern __off_t ftello (FILE *__stream) __wur; > > +extern __off_t ftello (FILE *__stream) __wur __nonnull ((1)); > > =C2=A0# else > > =C2=A0#=C2=A0 ifdef __REDIRECT > > =C2=A0extern int __REDIRECT (fseeko, > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 (FILE *__st= ream, __off64_t __off, int __whence), > > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 fseeko64); > > -extern __off64_t __REDIRECT (ftello, (FILE *__stream), ftello64); > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 fseeko64) __nonnu= ll ((1)); > > +extern __off64_t __REDIRECT (ftello, (FILE *__stream), ftello64) > > +=C2=A0 __nonnull ((1)); > > =C2=A0#=C2=A0 else > > =C2=A0#=C2=A0=C2=A0 define fseeko fseeko64 > > =C2=A0#=C2=A0=C2=A0 define ftello ftello64 > > @@ -815,18 +817,20 @@ extern __off64_t __REDIRECT (ftello, (FILE *__str= eam), ftello64); > > =C2=A0 > > =C2=A0=C2=A0=C2=A0 This function is a possible cancellation point and t= herefore not > > =C2=A0=C2=A0=C2=A0 marked with __THROW.=C2=A0 */ > > -extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __po= s); > > +extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __po= s) > > +=C2=A0 __nonnull ((1)); > > =C2=A0/* Set STREAM's position. > > =C2=A0 > > =C2=A0=C2=A0=C2=A0 This function is a possible cancellation point and t= herefore not > > =C2=A0=C2=A0=C2=A0 marked with __THROW.=C2=A0 */ > > -extern int fsetpos (FILE *__stream, const fpos_t *__pos); > > +extern int fsetpos (FILE *__stream, const fpos_t *__pos) __nonnull ((1= )); > > =C2=A0#else > > =C2=A0# ifdef __REDIRECT > > =C2=A0extern int __REDIRECT (fgetpos, (FILE *__restrict __stream, > > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 fpos_t *__restrict __pos), fgetp= os64); > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 fpos_t *__restrict __pos), fgetp= os64) __nonnull ((1)); > > =C2=A0extern int __REDIRECT (fsetpos, > > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 (FILE *__stream, = const fpos_t *__pos), fsetpos64); > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 (FILE *__stream, = const fpos_t *__pos), fsetpos64) > > +=C2=A0 __nonnull ((1)); > > =C2=A0# else > > =C2=A0#=C2=A0 define fgetpos fgetpos64 > > =C2=A0#=C2=A0 define fsetpos fsetpos64 > > @@ -834,24 +838,26 @@ extern int __REDIRECT (fsetpos, > > =C2=A0#endif > > =C2=A0 > > =C2=A0#ifdef __USE_LARGEFILE64 > > -extern int fseeko64 (FILE *__stream, __off64_t __off, int __whence); > > -extern __off64_t ftello64 (FILE *__stream) __wur; > > -extern int fgetpos64 (FILE *__restrict __stream, fpos64_t *__restrict = __pos); > > -extern int fsetpos64 (FILE *__stream, const fpos64_t *__pos); > > +extern int fseeko64 (FILE *__stream, __off64_t __off, int __whence) > > +=C2=A0 __nonnull ((1)); > > +extern __off64_t ftello64 (FILE *__stream) __wur __nonnull ((1)); > > +extern int fgetpos64 (FILE *__restrict __stream, fpos64_t *__restrict = __pos) > > +=C2=A0 __nonnull ((1)); > > +extern int fsetpos64 (FILE *__stream, const fpos64_t *__pos) __nonnull= ((1)); > > =C2=A0#endif > > =C2=A0 > > =C2=A0/* Clear the error and EOF indicators for STREAM.=C2=A0 */ > > -extern void clearerr (FILE *__stream) __THROW; > > +extern void clearerr (FILE *__stream) __THROW __nonnull ((1)); > > =C2=A0/* Return the EOF indicator for STREAM.=C2=A0 */ > > -extern int feof (FILE *__stream) __THROW __wur; > > +extern int feof (FILE *__stream) __THROW __wur __nonnull ((1)); > > =C2=A0/* Return the error indicator for STREAM.=C2=A0 */ > > -extern int ferror (FILE *__stream) __THROW __wur; > > +extern int ferror (FILE *__stream) __THROW __wur __nonnull ((1)); > > =C2=A0 > > =C2=A0#ifdef __USE_MISC > > =C2=A0/* Faster versions when locking is not required.=C2=A0 */ > > -extern void clearerr_unlocked (FILE *__stream) __THROW; > > -extern int feof_unlocked (FILE *__stream) __THROW __wur; > > -extern int ferror_unlocked (FILE *__stream) __THROW __wur; > > +extern void clearerr_unlocked (FILE *__stream) __THROW __nonnull ((1))= ; > > +extern int feof_unlocked (FILE *__stream) __THROW __wur __nonnull ((1)= ); > > +extern int ferror_unlocked (FILE *__stream) __THROW __wur __nonnull ((= 1)); > > =C2=A0#endif > > =C2=A0 > > =C2=A0 > > @@ -864,12 +870,12 @@ extern void perror (const char *__s) __COLD; > > =C2=A0 > > =C2=A0#ifdef=C2=A0__USE_POSIX > > =C2=A0/* Return the system file descriptor for STREAM.=C2=A0 */ > > -extern int fileno (FILE *__stream) __THROW __wur; > > +extern int fileno (FILE *__stream) __THROW __wur __nonnull ((1)); > > =C2=A0#endif /* Use POSIX.=C2=A0 */ > > =C2=A0 > > =C2=A0#ifdef __USE_MISC > > =C2=A0/* Faster version when locking is not required.=C2=A0 */ > > -extern int fileno_unlocked (FILE *__stream) __THROW __wur; > > +extern int fileno_unlocked (FILE *__stream) __THROW __wur __nonnull ((= 1)); > > =C2=A0#endif > > =C2=A0 > > =C2=A0 > > @@ -878,7 +884,7 @@ extern int fileno_unlocked (FILE *__stream) __THROW= __wur; > > =C2=A0 > > =C2=A0=C2=A0=C2=A0 This function is a possible cancellation point and t= herefore not > > =C2=A0=C2=A0=C2=A0 marked with __THROW.=C2=A0 */ > > -extern int pclose (FILE *__stream); > > +extern int pclose (FILE *__stream) __nonnull ((1)); > > =C2=A0 > > =C2=A0/* Create a new stream connected to a pipe running the given comm= and. > > =C2=A0 > > @@ -922,14 +928,14 @@ extern int obstack_vprintf (struct obstack *__res= trict __obstack, > > =C2=A0/* These are defined in POSIX.1:1996.=C2=A0 */ > > =C2=A0 > > =C2=A0/* Acquire ownership of STREAM.=C2=A0 */ > > -extern void flockfile (FILE *__stream) __THROW; > > +extern void flockfile (FILE *__stream) __THROW __nonnull ((1)); > > =C2=A0 > > =C2=A0/* Try to acquire ownership of STREAM but do not block if it is n= ot > > =C2=A0=C2=A0=C2=A0 possible.=C2=A0 */ > > -extern int ftrylockfile (FILE *__stream) __THROW __wur; > > +extern int ftrylockfile (FILE *__stream) __THROW __wur __nonnull ((1))= ; > > =C2=A0 > > =C2=A0/* Relinquish the ownership granted for STREAM.=C2=A0 */ > > -extern void funlockfile (FILE *__stream) __THROW; > > +extern void funlockfile (FILE *__stream) __THROW __nonnull ((1)); > > =C2=A0#endif /* POSIX */ > > =C2=A0 > > =C2=A0#if defined __USE_XOPEN && !defined __USE_XOPEN2K && !defined __U= SE_GNU >=20 --=20 Xi Ruoyao School of Aerospace Science and Technology, Xidian University