From tejblum@arc.hq.cti.ru  Mon Apr 14 12:05:02 1997
Received: from arc.hq.cti.ru (arc.hq.cti.ru [194.67.85.50])
          by freefall.freebsd.org (8.8.5/8.8.5) with ESMTP id MAA06979
          for <FreeBSD-gnats-submit@freebsd.org>; Mon, 14 Apr 1997 12:04:57 -0700 (PDT)
Received: (from tejblum@localhost) by arc.hq.cti.ru (8.8.5/8.7.3) id XAA03036; Mon, 14 Apr 1997 23:04:53 +0400 (MSD)
Message-Id: <199704141904.XAA03036@arc.hq.cti.ru>
Date: Mon, 14 Apr 1997 23:04:53 +0400 (MSD)
From: Dmitrij Tejblum <tejblum@arc.hq.cti.ru>
Reply-To: tejblum@arc.hq.cti.ru
To: FreeBSD-gnats-submit@freebsd.org
Subject: md2.h, md4.h, and md5.h headers useless for c++ programms
X-Send-Pr-Version: 3.2

>Number:         3291
>Category:       misc
>Synopsis:       md2.h, md4.h, and md5.h headers useless for c++ programms
>Confidential:   no
>Severity:       serious
>Priority:       low
>Responsible:    freebsd-bugs
>State:          closed
>Quarter:
>Keywords:
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Mon Apr 14 12:10:01 PDT 1997
>Closed-Date:    Mon Aug 25 07:24:36 MEST 1997
>Last-Modified:  Mon Aug 25 07:25:19 MEST 1997
>Originator:     Dmitrij Tejblum
>Release:        FreeBSD 2.2-STABLE i386
>Organization:
CompTek
>Environment:


>Description:

The headers must use __BEGIN_DECLS and __END_DECLS around function
prototypes. Now the c++ compiler thinks that MD5Init and so on is C++
functions and mangles the names.

>How-To-Repeat:



>Fix:
	
Also, while you at here, make the headers self-contained

*** lib/libmd/md2.h.orig	Fri Apr  4 00:17:05 1997
--- lib/libmd/md2.h	Mon Apr 14 22:05:04 1997
***************
*** 30,40 ****
--- 30,44 ----
    unsigned char buffer[16];	/* input buffer */
  } MD2_CTX;
  
+ #include <sys/cdefs.h>
+ 
+ __BEGIN_DECLS
  void   MD2Init(MD2_CTX *);
  void   MD2Update(MD2_CTX *, const unsigned char *, unsigned int);
  void   MD2Final(unsigned char [16], MD2_CTX *);
  char * MD2End(MD2_CTX *, char *);
  char * MD2File(char *, char *);
  char * MD2Data(const unsigned char *, unsigned int, char *);
+ __END_DECLS
  
  #endif /* _MD2_H_ */
*** lib/libmd/md4.h.orig	Fri Apr  4 00:17:05 1997
--- lib/libmd/md4.h	Mon Apr 14 22:46:26 1997
***************
*** 25,30 ****
--- 25,33 ----
  
  #ifndef _MD4_H_
  #define _MD4_H_
+ 
+ #include <sys/types.h>
+ 
  /* MD4 context. */
  typedef struct MD4Context {
    u_int32_t state[4];	/* state (ABCD) */
***************
*** 32,42 ****
--- 35,49 ----
    unsigned char buffer[64];	/* input buffer */
  } MD4_CTX;
  
+ #include <sys/cdefs.h>
+ 
+ __BEGIN_DECLS
  void   MD4Init(MD4_CTX *);
  void   MD4Update(MD4_CTX *, const unsigned char *, unsigned int);
  void   MD4Final(unsigned char [16], MD4_CTX *);
  char * MD4End(MD4_CTX *, char *);
  char * MD4File(char *, char *);
  char * MD4Data(const unsigned char *, unsigned int, char *);
+ __END_DECLS
  
  #endif /* _MD4_H_ */
*** sys/sys/md5.h.orig	Sun Dec 22 13:31:34 1996
--- sys/sys/md5.h	Mon Apr 14 22:46:53 1997
***************
*** 26,31 ****
--- 26,34 ----
  
  #ifndef _SYS_MD5_H_
  #define _SYS_MD5_H_
+ 
+ #include <sys/types.h>
+ 
  /* MD5 context. */
  typedef struct MD5Context {
    u_int32_t state[4];	/* state (ABCD) */
***************
*** 33,42 ****
--- 36,49 ----
    unsigned char buffer[64];	/* input buffer */
  } MD5_CTX;
  
+ #include <sys/cdefs.h>
+ 
+ __BEGIN_DECLS
  void   MD5Init (MD5_CTX *);
  void   MD5Update (MD5_CTX *, const unsigned char *, unsigned int);
  void   MD5Final (unsigned char [16], MD5_CTX *);
  char * MD5End(MD5_CTX *, char *);
  char * MD5File(char *, char *);
  char * MD5Data(const unsigned char *, unsigned int, char *);
+ __END_DECLS
  #endif /* _SYS_MD5_H_ */
>Release-Note:
>Audit-Trail:

From: phk@dk.tfs.com
To: tejblum@arc.hq.cti.ru
Cc: FreeBSD-gnats-submit@freebsd.org
Subject: Re: misc/3291: md2.h, md4.h, and md5.h headers useless for c++ programms 
Date: Mon, 14 Apr 1997 22:01:06 +0200

 >--- lib/libmd/md2.h	Mon Apr 14 22:05:04 1997
 >***************
 >*** 30,40 ****
 >--- 30,44 ----
 >    unsigned char buffer[16];	/* input buffer */
 >  } MD2_CTX;
 >  
 >+ #include <sys/cdefs.h>
 >+ 
 >+ __BEGIN_DECLS
 >  void   MD2Init(MD2_CTX *);
 
 I can agree to the __BEGIN_DECLS, but the #includes do >NOT< belong here.
 
 --
 Poul-Henning Kamp           | phk@FreeBSD.ORG       FreeBSD Core-team.
 http://www.freebsd.org/~phk | phk@login.dknet.dk    Private mailbox.
 whois: [PHK]                | phk@tfs.com           TRW Financial Systems, Inc.
 Power and ignorance is a disgusting cocktail.

From: Dmitrij Tejblum <tejblum@arc.hq.cti.ru>
To: phk@dk.tfs.com
Cc: FreeBSD-gnats-submit@freebsd.org
Subject: Re: misc/3291: md2.h, md4.h, and md5.h headers useless for c++ programms 
Date: Tue, 15 Apr 1997 00:07:56 +0400 (MSD)

 On Mon, 14 Apr 1997 phk@dk.tfs.com wrote:
 
 > >--- lib/libmd/md2.h	Mon Apr 14 22:05:04 1997
 > >***************
 > >*** 30,40 ****
 > >--- 30,44 ----
 > >    unsigned char buffer[16];	/* input buffer */
 > >  } MD2_CTX;
 > >  
 > >+ #include <sys/cdefs.h>
 > >+ 
 > >+ __BEGIN_DECLS
 > >  void   MD2Init(MD2_CTX *);
 > 
 > I can agree to the __BEGIN_DECLS, but the #includes do >NOT< belong here.
 
 Why? Take a look at <stdlib.h>, for example.
 
 Should I submit another patch?
 
 > Poul-Henning Kamp           | phk@FreeBSD.ORG       FreeBSD Core-team.
 
 	Dima
 

From: Dmitrij Tejblum <tejblum@arc.hq.cti.ru>
To: phk@dk.tfs.com
Cc: freebsd-gnats-submit@freebsd.org
Subject: Re: misc/3291: md2.h, md4.h, and md5.h headers useless for c++ programms 
Date: Tue, 15 Apr 1997 18:10:51 +0400 (MSD)

 Here is the second version of the patch.
 
 I changed <sys/types.h> to <machines/types.h>. It seems that for now it
 is best way. 
 
 Other improvements:
 
 1. __P added to function prototypes (to keep consistency in FreeBSD
 includes)
 2. filename parameter of MDXFile should be const char*, not char*.
 (Changes to sources and man page also included, of course).
 
 libmd still pass test after this patch :).
 
 	Dima
 
 
 diff -c -r lib/libmd.orig/md2.h lib/libmd/md2.h
 *** lib/libmd.orig/md2.h	Fri Apr  4 00:17:05 1997
 --- lib/libmd/md2.h	Tue Apr 15 17:00:56 1997
 ***************
 *** 30,40 ****
     unsigned char buffer[16];	/* input buffer */
   } MD2_CTX;
   
 ! void   MD2Init(MD2_CTX *);
 ! void   MD2Update(MD2_CTX *, const unsigned char *, unsigned int);
 ! void   MD2Final(unsigned char [16], MD2_CTX *);
 ! char * MD2End(MD2_CTX *, char *);
 ! char * MD2File(char *, char *);
 ! char * MD2Data(const unsigned char *, unsigned int, char *);
   
   #endif /* _MD2_H_ */
 --- 30,44 ----
     unsigned char buffer[16];	/* input buffer */
   } MD2_CTX;
   
 ! #include <sys/cdefs.h>
 ! 
 ! __BEGIN_DECLS
 ! void   MD2Init __P((MD2_CTX *));
 ! void   MD2Update __P((MD2_CTX *, const unsigned char *, unsigned int));
 ! void   MD2Final __P((unsigned char [16], MD2_CTX *));
 ! char * MD2End __P((MD2_CTX *, char *));
 ! char * MD2File __P((const char *, char *));
 ! char * MD2Data __P((const unsigned char *, unsigned int, char *));
 ! __END_DECLS
   
   #endif /* _MD2_H_ */
 diff -c -r lib/libmd.orig/md4.h lib/libmd/md4.h
 *** lib/libmd.orig/md4.h	Fri Apr  4 00:17:05 1997
 --- lib/libmd/md4.h	Tue Apr 15 17:27:52 1997
 ***************
 *** 26,42 ****
   #ifndef _MD4_H_
   #define _MD4_H_
   /* MD4 context. */
   typedef struct MD4Context {
     u_int32_t state[4];	/* state (ABCD) */
     u_int32_t count[2];	/* number of bits, modulo 2^64 (lsb first) */
     unsigned char buffer[64];	/* input buffer */
   } MD4_CTX;
   
 ! void   MD4Init(MD4_CTX *);
 ! void   MD4Update(MD4_CTX *, const unsigned char *, unsigned int);
 ! void   MD4Final(unsigned char [16], MD4_CTX *);
 ! char * MD4End(MD4_CTX *, char *);
 ! char * MD4File(char *, char *);
 ! char * MD4Data(const unsigned char *, unsigned int, char *);
   
   #endif /* _MD4_H_ */
 --- 26,49 ----
   #ifndef _MD4_H_
   #define _MD4_H_
   /* MD4 context. */
 + 
 + #include <machine/types.h>      /* XXX */
 + 
   typedef struct MD4Context {
     u_int32_t state[4];	/* state (ABCD) */
     u_int32_t count[2];	/* number of bits, modulo 2^64 (lsb first) */
     unsigned char buffer[64];	/* input buffer */
   } MD4_CTX;
   
 ! #include <sys/cdefs.h>
 ! 
 ! __BEGIN_DECLS
 ! void   MD4Init __P((MD4_CTX *));
 ! void   MD4Update __P((MD4_CTX *, const unsigned char *, unsigned int));
 ! void   MD4Final __P((unsigned char [16], MD4_CTX *));
 ! char * MD4End __P((MD4_CTX *, char *));
 ! char * MD4File __P((const char *, char *));
 ! char * MD4Data __P((const unsigned char *, unsigned int, char *));
 ! __END_DECLS
   
   #endif /* _MD4_H_ */
 diff -c -r lib/libmd.orig/mdX.3 lib/libmd/mdX.3
 *** lib/libmd.orig/mdX.3	Tue Apr 15 17:18:32 1997
 --- lib/libmd/mdX.3	Tue Apr 15 17:17:40 1997
 ***************
 *** 31,37 ****
   .Ft "char *"
   .Fn MDXEnd "MDX_CTX *context" "char *buf"
   .Ft "char *"
 ! .Fn MDXFile "char *filename" "char *buf"
   .Ft "char *"
   .Fn MDXData "const unsigned char *data" "unsigned int len" "char *buf"
   .Sh DESCRIPTION
 --- 31,37 ----
   .Ft "char *"
   .Fn MDXEnd "MDX_CTX *context" "char *buf"
   .Ft "char *"
 ! .Fn MDXFile "const char *filename" "char *buf"
   .Ft "char *"
   .Fn MDXData "const unsigned char *data" "unsigned int len" "char *buf"
   .Sh DESCRIPTION
 diff -c -r lib/libmd.orig/mdXhl.c lib/libmd/mdXhl.c
 *** lib/libmd.orig/mdXhl.c	Fri Oct 25 10:48:12 1996
 --- lib/libmd/mdXhl.c	Tue Apr 15 17:10:07 1997
 ***************
 *** 41,47 ****
   }
   
   char *
 ! MDXFile (char *filename, char *buf)
   {
       unsigned char buffer[BUFSIZ];
       MDX_CTX ctx;
 --- 41,47 ----
   }
   
   char *
 ! MDXFile (const char *filename, char *buf)
   {
       unsigned char buffer[BUFSIZ];
       MDX_CTX ctx;
 
 
 
 === The next patch is for <sys/md5.h>, not for <md5.h> ====
 
 
 *** sys/sys/md5.h.orig	Sun Dec 22 13:31:34 1996
 --- sys/sys/md5.h	Tue Apr 15 17:46:51 1997
 ***************
 *** 26,31 ****
 --- 26,34 ----
   
   #ifndef _SYS_MD5_H_
   #define _SYS_MD5_H_
 + 
 + #include <machine/types.h>    /* XXX */
 + 
   /* MD5 context. */
   typedef struct MD5Context {
     u_int32_t state[4];	/* state (ABCD) */
 ***************
 *** 33,42 ****
     unsigned char buffer[64];	/* input buffer */
   } MD5_CTX;
   
 ! void   MD5Init (MD5_CTX *);
 ! void   MD5Update (MD5_CTX *, const unsigned char *, unsigned int);
 ! void   MD5Final (unsigned char [16], MD5_CTX *);
 ! char * MD5End(MD5_CTX *, char *);
 ! char * MD5File(char *, char *);
 ! char * MD5Data(const unsigned char *, unsigned int, char *);
   #endif /* _SYS_MD5_H_ */
 --- 36,50 ----
     unsigned char buffer[64];	/* input buffer */
   } MD5_CTX;
   
 ! #include <sys/cdefs.h>
 ! 
 ! __BEGIN_DECLS
 ! void   MD5Init __P((MD5_CTX *));
 ! void   MD5Update __P((MD5_CTX *, const unsigned char *, unsigned int));
 ! void   MD5Final __P((unsigned char [16], MD5_CTX *));
 ! char * MD5End __P((MD5_CTX *, char *));
 ! char * MD5File __P((const char *, char *));
 ! char * MD5Data __P((const unsigned char *, unsigned int, char *));
 ! __END_DECLS
 ! 
   #endif /* _SYS_MD5_H_ */
 
State-Changed-From-To: open->closed 
State-Changed-By: joerg 
State-Changed-When: Mon Aug 25 07:24:36 MEST 1997 
State-Changed-Why:  

Submitted fix applied, thanks! 
>Unformatted:
