Qualifiers on forward-declared function parameters

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Chris, Martin, Joseph,

I'm patching the Linux man-pages project to use forward-declaration
syntax --I'm following Chris's model, (,,,;,,,)--, insted of the
[.identifier] syntax I was using.

I've come up with some pages that need special attention, to make sure
that the standard wording supports them.  I think it doesn, but we
better make sure.

getsockopt(2) needs to forward declare a pointer, because the function
updates the size.  Also, the pointer is restrict-qualified, so the
qualifiers should match in the forward declaration and the actual
parameter.

gethostbyaddr_r(3) is one case where I've had to forward-declare more
than one parameter.

Joseph, I hope you'll be happy that I'm doing this change?  Should I put
you as Reported-by as you complained about the syntax I'm replacing?


Have a lovely day!
Alex


$ git diff -- man2/getsockopt.2
diff --git i/man/man2/getsockopt.2 w/man/man2/getsockopt.2
index e4f47662c..c79894b14 100644
--- i/man/man2/getsockopt.2
+++ w/man/man2/getsockopt.2
@@ -23,11 +23,13 @@ .SH SYNOPSIS
 .nf
 .B #include <sys/socket.h>
 .P
-.BI "int getsockopt(int " sockfd ", int " level ", int " optname ,
-.BI "               void " optval "[restrict *." optlen ],
+.BI "int getsockopt(socklen *restrict " optlen ;
+.BI "               int " sockfd ", int " level ", int " optname ,
+.BI "               void " optval "[restrict *" optlen ],
 .BI "               socklen_t *restrict " optlen );
-.BI "int setsockopt(int " sockfd ", int " level ", int " optname ,
-.BI "               const void " optval [. optlen ],
+.BI "int setsockopt(socklen_t " optlen ;
+.BI "               int " sockfd ", int " level ", int " optname ,
+.BI "               const void " optval [ optlen ],
 .BI "               socklen_t " optlen );
 .fi
 .SH DESCRIPTION
$ mansect SYNOPSIS man2/getsockopt.2 | MANWIDTH=72 man /dev/stdin | cat;
getsockopt(2)             System Calls Manual             getsockopt(2)

SYNOPSIS
     #include <sys/socket.h>

     int getsockopt(socklen *restrict optlen;
                    int sockfd, int level, int optname,
                    void optval[restrict *optlen],
                    socklen_t *restrict optlen);
     int setsockopt(socklen_t optlen;
                    int sockfd, int level, int optname,
                    const void optval[optlen],
                    socklen_t optlen);

Linux man‐pages (unreleased)     (date)                   getsockopt(2)


$ git diff -- man3/gethostbyname.3
diff --git i/man/man3/gethostbyname.3 w/man/man3/gethostbyname.3
index 690a3b82e..a1cb8f129 100644
--- i/man/man3/gethostbyname.3
+++ w/man/man3/gethostbyname.3
@@ -37,7 +37,8 @@ .SH SYNOPSIS
 .B [[deprecated]] extern int h_errno;
 .P
 .BI "[[deprecated]] struct hostent *gethostbyname(const char *" name );
-.BI "[[deprecated]] struct hostent *gethostbyaddr(const void " addr [. size ],
+.BI "[[deprecated]] struct hostent *gethostbyaddr(socklen_t " size ;
+.BI "                                             const void " addr [ size ],
 .BI "                                             socklen_t " size ", int " type );
 .P
 .BI "[[deprecated]] void herror(const char *" s );
@@ -50,28 +51,32 @@ .SH SYNOPSIS
 .B [[deprecated]]
 .BI "struct hostent *gethostbyname2(const char *" name ", int " af );
 .P
-.BI "int gethostent_r(struct hostent *restrict " ret ,
-.BI "                 char " buf "[restrict ." bufsize "], size_t " bufsize ,
+.BI "int gethostent_r(size_t " bufsize ;
+.BI "                 struct hostent *restrict " ret ,
+.BI "                 char " buf "[restrict " bufsize "], size_t " bufsize ,
 .BI "                 struct hostent **restrict " result ,
 .BI "                 int *restrict " h_errnop );
 .P
 .B [[deprecated]]
-.BI "int gethostbyaddr_r(const void " addr "[restrict ." size "], socklen_t " size ,
+.BI "int gethostbyaddr_r(socklen_t " size ", size_t " bufsize ;
+.BI "                 const void " addr "[restrict " size "], socklen_t " size ,
 .BI "                 int " type ,
 .BI "                 struct hostent *restrict " ret ,
-.BI "                 char " buf "[restrict ." bufsize "], size_t " bufsize ,
+.BI "                 char " buf "[restrict " bufsize "], size_t " bufsize ,
 .BI "                 struct hostent **restrict " result ,
 .BI "                 int *restrict " h_errnop );
 .B [[deprecated]]
-.BI "int gethostbyname_r(const char *restrict " name ,
+.BI "int gethostbyname_r(size_t " bufsize ;
+.BI "                 const char *restrict " name ,
 .BI "                 struct hostent *restrict " ret ,
-.BI "                 char " buf "[restrict ." bufsize "], size_t " bufsize ,
+.BI "                 char " buf "[restrict " bufsize "], size_t " bufsize ,
 .BI "                 struct hostent **restrict " result ,
 .BI "                 int *restrict " h_errnop );
 .B [[deprecated]]
-.BI "int gethostbyname2_r(const char *restrict " name ", int " af,
+.BI "int gethostbyname2_r(size_t " bufsize ;
+.BI "                 const char *restrict " name ", int " af,
 .BI "                 struct hostent *restrict " ret ,
-.BI "                 char " buf "[restrict ." bufsize "], size_t " bufsize ,
+.BI "                 char " buf "[restrict " bufsize "], size_t " bufsize ,
 .BI "                 struct hostent **restrict " result ,
 .BI "                 int *restrict " h_errnop );
 .fi
$ mansect SYNOPSIS !$ | MANWIDTH=72 man /dev/stdin | cat;
mansect SYNOPSIS man3/gethostbyname.3 | MANWIDTH=72 man /dev/stdin | cat;
gethostbyname(3)        Library Functions Manual       gethostbyname(3)

SYNOPSIS
     #include <netdb.h>

     void sethostent(int stayopen);
     void endhostent(void);

     [[deprecated]] extern int h_errno;

     [[deprecated]] struct hostent *gethostbyname(const char *name);
     [[deprecated]] struct hostent *gethostbyaddr(socklen_t size;
                                                  const void addr[size],
                                                  socklen_t size, int type);

     [[deprecated]] void herror(const char *s);
     [[deprecated]] const char *hstrerror(int err);

     /* System V/POSIX extension */
     struct hostent *gethostent(void);

     /* GNU extensions */
     [[deprecated]]
     struct hostent *gethostbyname2(const char *name, int af);

     int gethostent_r(size_t bufsize;
                      struct hostent *restrict ret,
                      char buf[restrict bufsize], size_t bufsize,
                      struct hostent **restrict result,
                      int *restrict h_errnop);

     [[deprecated]]
     int gethostbyaddr_r(socklen_t size, size_t bufsize;
                      const void addr[restrict size], socklen_t size,
                      int type,
                      struct hostent *restrict ret,
                      char buf[restrict bufsize], size_t bufsize,
                      struct hostent **restrict result,
                      int *restrict h_errnop);
     [[deprecated]]
     int gethostbyname_r(size_t bufsize;
                      const char *restrict name,
                      struct hostent *restrict ret,
                      char buf[restrict bufsize], size_t bufsize,
                      struct hostent **restrict result,
                      int *restrict h_errnop);
     [[deprecated]]
     int gethostbyname2_r(size_t bufsize;
                      const char *restrict name, int af,
                      struct hostent *restrict ret,
                      char buf[restrict bufsize], size_t bufsize,
                      struct hostent **restrict result,
                      int *restrict h_errnop);

 Feature    Test    Macro    Requirements    for    glibc   (see   fea‐
 ture_test_macros(7)):

     gethostbyname2(),  gethostent_r(),  gethostbyaddr_r(),  gethostby‐
     name_r(), gethostbyname2_r():
         Since glibc 2.19:
             _DEFAULT_SOURCE
         glibc up to and including 2.19:
             _BSD_SOURCE || _SVID_SOURCE

     herror(), hstrerror():
         Since glibc 2.19:
             _DEFAULT_SOURCE
         glibc 2.8 to glibc 2.19:
             _BSD_SOURCE || _SVID_SOURCE
         Before glibc 2.8:
             none

     h_errno:
         Since glibc 2.19
             _DEFAULT_SOURCE || _POSIX_C_SOURCE < 200809L
         glibc 2.12 to glibc 2.19:
             _BSD_SOURCE || _SVID_SOURCE || _POSIX_C_SOURCE < 200809L
         Before glibc 2.12:
             none

Linux man‐pages (unreleased)     (date)                gethostbyname(3)






-- 
<https://www.alejandro-colomar.es/>

Attachment: signature.asc
Description: PGP signature


[Index of Archives]     [Kernel Documentation]     [Netdev]     [Linux Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux