mirror of
git://git.gnupg.org/gnupg.git
synced 2025-01-02 12:01:32 +01:00
See ChangeLog: Tue Jun 1 16:01:46 CEST 1999 Werner Koch
This commit is contained in:
parent
c34c676958
commit
3dddf602dd
6
NEWS
6
NEWS
@ -1,8 +1,12 @@
|
||||
|
||||
* New option -N to insert notations and a --set-policy-url.
|
||||
|
||||
* New subcommand "delsig" in th edit menu.
|
||||
* New subcommand "delsig" in the edit menu.
|
||||
|
||||
* The name of the output file is not anymore the one which is
|
||||
embedded in the processed message, but the used filename with
|
||||
the extension stripped. To revert to the old behaviour you can
|
||||
use the option --use-embedded-filename.
|
||||
|
||||
Noteworthy changes in version 0.9.7
|
||||
-----------------------------------
|
||||
|
3
TODO
3
TODO
@ -37,7 +37,6 @@ Nice to have
|
||||
* replace the keyserver stuff either by a call to a specialized
|
||||
utility and SOCKSify this utility.
|
||||
* Do a real fix for bug #7 or document that it is a PGP 5 error.
|
||||
* clearsig: Keep lineendings while writing the output of a clearsig
|
||||
* preferences of hash algorithms are not yet used.
|
||||
* new menu to delete signatures and list signature in menu
|
||||
* Replace the SIGUSR1 stuff by semaphores to avoid loss of a signal.
|
||||
@ -52,8 +51,6 @@ Nice to have
|
||||
* the pubkey encrypt functions should do some sanity checks.
|
||||
* dynload: implement the hint stuff.
|
||||
* "gpg filename.tar.gz.asc" sollte wie mit --verify funktionieren (-sab).
|
||||
* Den Dateinamen aus der message nicht benutzen, sondern nur
|
||||
das gpg/asc strippen.
|
||||
* for messages created with "-t", it might make sense to append the
|
||||
verification status of the message to the output (i.e. write something to
|
||||
the --output file and not only to stderr.
|
||||
|
@ -70,6 +70,9 @@
|
||||
/* and the real names of the random devices */
|
||||
#undef NAME_OF_DEV_RANDOM
|
||||
#undef NAME_OF_DEV_URANDOM
|
||||
/* Linux has an ioctl */
|
||||
#undef HAVE_DEV_RANDOM_IOCTL
|
||||
|
||||
|
||||
#undef USE_DYNAMIC_LINKING
|
||||
#undef HAVE_DL_DLOPEN
|
||||
|
@ -33,6 +33,13 @@
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#if 0
|
||||
#ifdef HAVE_LINUX_RANDOM_H
|
||||
#include <sys/ioctl.h>
|
||||
#include <asm/types.h>
|
||||
#include <linux/random.h>
|
||||
#endif
|
||||
#endif
|
||||
#include "types.h"
|
||||
#include "util.h"
|
||||
#include "ttyio.h"
|
||||
@ -48,6 +55,19 @@ static int open_device( const char *name, int minor );
|
||||
static int gather_random( void (*add)(const void*, size_t, int), int requester,
|
||||
size_t length, int level );
|
||||
|
||||
#if 0
|
||||
#ifdef HAVE_DEV_RANDOM_IOCTL
|
||||
static ulong
|
||||
get_entropy_count( int fd )
|
||||
{
|
||||
ulong count;
|
||||
|
||||
if( ioctl( fd, RNDGETENTCNT, &count ) == -1 )
|
||||
g10_log_fatal("ioctl(RNDGETENTCNT) failed: %s\n", strerror(errno) );
|
||||
return count;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/****************
|
||||
* Used to open the Linux and xBSD /dev/random devices
|
||||
@ -91,6 +111,11 @@ gather_random( void (*add)(const void*, size_t, int), int requester,
|
||||
fd = fd_urandom;
|
||||
}
|
||||
|
||||
#if 0
|
||||
#ifdef HAVE_DEV_RANDOM_IOCTL
|
||||
g10_log_info("entropy count of %d is %lu\n", fd, get_entropy_count(fd) );
|
||||
#endif
|
||||
#endif
|
||||
while( length ) {
|
||||
fd_set rfds;
|
||||
struct timeval tv;
|
||||
|
20
configure.in
20
configure.in
@ -330,7 +330,9 @@ if test "$ac_cv_header_sys_shm_h" = "yes"; then
|
||||
AC_DEFINE(USE_SHM_COPROCESSING)
|
||||
fi
|
||||
|
||||
dnl
|
||||
dnl check whether we have a random device
|
||||
dnl
|
||||
if test "$try_dev_random" = yes ; then
|
||||
AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
|
||||
[if test -c "$NAME_OF_DEV_RANDOM" && test -c "$NAME_OF_DEV_URANDOM" ; then
|
||||
@ -344,6 +346,24 @@ else
|
||||
AC_MSG_RESULT(has been disabled)
|
||||
fi
|
||||
|
||||
dnl
|
||||
dnl and whether this device supports ioctl
|
||||
dnl (Note, that we should do a real test here)
|
||||
dnl
|
||||
if test "$ac_cv_have_dev_random" = yes ; then
|
||||
AC_CHECK_HEADERS(linux/random.h)
|
||||
AC_CACHE_CHECK(for random device ioctl, ac_cv_have_dev_random_ioctl,
|
||||
[ if test "$ac_cv_header_linux_random_h" = yes ; then
|
||||
ac_cv_have_dev_random_ioctl=yes;
|
||||
else
|
||||
ac_cv_have_dev_random_ioctl=no;
|
||||
fi
|
||||
])
|
||||
if test "$ac_cv_have_dev_random_ioctl" = yes; then
|
||||
AC_DEFINE(HAVE_DEV_RANDOM_IOCTL)
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
dnl
|
||||
dnl Figure out the default linkage mode for cipher modules
|
||||
|
@ -1,26 +1,44 @@
|
||||
<!doctype book PUBLIC "-//Davenport//DTD DocBook V3.0//EN" [
|
||||
<!entity gnupg "GnuPG">
|
||||
<!entity wwwgnu "http://www.gnu.org">
|
||||
<!entity wwwgnupg "http://www.gnupg.org">
|
||||
]>
|
||||
<book>
|
||||
<bookinfo>
|
||||
<title>The GNU Privacy Guard</title>
|
||||
<title>The GNU Privacy Guard Manual</title>
|
||||
<titleabbrev>GnuPG-Man</titleabbrev>
|
||||
<edition>v0.0.0</edition>
|
||||
<authorgroup>
|
||||
<author> <firstname>Werner</firstname> <surname>Koch</surname>
|
||||
<affiliation><address><email>wk@gnupg.org</email></address>
|
||||
</affiliation>
|
||||
<!-- Replace with your name and delete mine -->
|
||||
<author>
|
||||
<firstname>Joe</firstname>
|
||||
<othername>D.</othername>
|
||||
<surname>Foo</surname>
|
||||
<authorblurb>
|
||||
<para><email>joe@somewhere</email></para>
|
||||
</authorblurb>
|
||||
</author>
|
||||
<author>
|
||||
<firstname>Werner</firstname>
|
||||
<surname>Koch</surname>
|
||||
<authorblurb>
|
||||
<para><email>wk@gnupg.org</email></para>
|
||||
</authorblurb>
|
||||
</author>
|
||||
</authorgroup>
|
||||
<!-- <version>last modified: <date></version> -->
|
||||
<copyright><year>1998</year><year>1998</year>
|
||||
<!-- note, it is possible to give more than 1 year -->
|
||||
<copyright><year>1999</year>
|
||||
<holder>Free Software Foundation, Inc.</holder>
|
||||
</copyright>
|
||||
<!-- We have to check, whether this is the right wording -->
|
||||
<legalnotice>
|
||||
<para>This documentation is free software; you can redistribute
|
||||
<para>This manual is free software; you can redistribute
|
||||
it and/or modify it under the terms of the GNU General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later
|
||||
version.</para>
|
||||
|
||||
<para>This program is distributed in the hope that it will be
|
||||
<para>This manual is distributed in the hope that it will be
|
||||
useful, but WITHOUT ANY WARRANTY; without even the implied
|
||||
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||
PURPOSE. See the GNU General Public License for more
|
||||
@ -32,61 +50,52 @@
|
||||
MA 02111-1307 USA</para>
|
||||
|
||||
<para>For more details see the file COPYING in the source
|
||||
distribution of GNUPG.</para>
|
||||
distribution of &gnupg;.</para>
|
||||
</legalnotice>
|
||||
</bookinfo>
|
||||
|
||||
<!-- Insert the table of contents -->
|
||||
<toc></toc>
|
||||
|
||||
<!--*******************************************
|
||||
********* the first chapter *************
|
||||
*******************************************-->
|
||||
<chapter id="intro">
|
||||
<title>Introduction</title>
|
||||
<sect1 id="feedback">
|
||||
<title>Feedback</title>
|
||||
<!-- Hope we can remove this ;-) -->
|
||||
<para>Well, I'm German and I find it hard to express myself in
|
||||
English. So if you find some phrases and/or words that I used
|
||||
in a wrong way (and you will find them :-) ), please send me a
|
||||
mail, to let me correct this. Please send me notes about
|
||||
typos, too.</para>
|
||||
typos, too.
|
||||
</sect1>
|
||||
|
||||
|
||||
<sect1 id="whatis">
|
||||
<title>What is GNUPG</title>
|
||||
<para>GNUPG is a free data encryption and signing tool.
|
||||
<title>What is &gnupg;</title>
|
||||
<para><ulink url="&wwwgnupg;">&gnupg;</> is a tool for digital
|
||||
encryption and signing;
|
||||
it is part of the <ulink url="&wwwgnu;">GNU Project</>.
|
||||
|
||||
<para>It has these features:
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>Exciting feature 1
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>Exciting feature 2
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
<para>How to find out the version of &gnupg;
|
||||
<screen>
|
||||
<prompt/$/ <userinput>gpg --version</>
|
||||
|
||||
</screen>
|
||||
|
||||
</sect1>
|
||||
|
||||
</chapter>
|
||||
|
||||
<reference>
|
||||
<title>Manual Pages</title>
|
||||
<partintro>
|
||||
<para>These are some short man(1) pages</para>
|
||||
</partintro>
|
||||
<refentry>
|
||||
<refmeta>
|
||||
<refentrytitle>gpg</refentrytitle>
|
||||
<manvolnum>1</manvolnum>
|
||||
<refmiscinfo class="tools">GNU Tools</refmiscinfo></refmiscinfo>
|
||||
</refmeta>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<synopsis>
|
||||
<command>gpg</command>
|
||||
<optional><parameter>options</parameter></optional>
|
||||
<replaceable class="parameter">file name</replaceable>
|
||||
</synopsis>
|
||||
<refpurpose>is the GNU tool for signing and encryption</>
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
<para> </para>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
</reference>
|
||||
|
||||
</book>
|
||||
|
@ -1,3 +1,10 @@
|
||||
Tue Jun 1 16:01:46 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
|
||||
|
||||
* openfile.c (make_outfile_name): New.
|
||||
* plaintext.c (handle_plaintext): Outputfile is now the inputfile
|
||||
without the suffix.
|
||||
* g10.c: New option --use-embedded-filename
|
||||
|
||||
Mon May 31 19:41:10 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
|
||||
|
||||
* g10.c (main): Fix for SHM init (Michael).
|
||||
|
@ -144,6 +144,7 @@ enum cmd_and_opt_values { aNull = 0,
|
||||
oRunAsShmCP,
|
||||
oSetFilename,
|
||||
oSetPolicyURL,
|
||||
oUseEmbeddedFilename,
|
||||
oComment,
|
||||
oThrowKeyid,
|
||||
oForceV3Sigs,
|
||||
@ -301,6 +302,7 @@ static ARGPARSE_OPTS opts[] = {
|
||||
{ oEscapeFrom, "escape-from-lines", 0, "@" },
|
||||
{ oLockOnce, "lock-once", 0, "@" },
|
||||
{ oLoggerFD, "logger-fd",1, "@" },
|
||||
{ oUseEmbeddedFilename, "use-embedded-filename", 0, "@" },
|
||||
{0} };
|
||||
|
||||
|
||||
@ -718,6 +720,7 @@ main( int argc, char **argv )
|
||||
break;
|
||||
case oSetFilename: opt.set_filename = pargs.r.ret_str; break;
|
||||
case oSetPolicyURL: opt.set_policy_url = pargs.r.ret_str; break;
|
||||
case oUseEmbeddedFilename: opt.use_embedded_filename = 1; break;
|
||||
case oComment: opt.comment_string = pargs.r.ret_str; break;
|
||||
case oThrowKeyid: opt.throw_keyid = 1; break;
|
||||
case oForceV3Sigs: opt.force_v3_sigs = 1; break;
|
||||
|
@ -96,6 +96,7 @@ int generate_subkeypair( KBNODE pub_keyblock, KBNODE sec_keyblock );
|
||||
|
||||
/*-- openfile.c --*/
|
||||
int overwrite_filep( const char *fname );
|
||||
char *make_outfile_name( const char *iname );
|
||||
int open_outfile( const char *iname, int mode, IOBUF *a );
|
||||
IOBUF open_sigfile( const char *iname );
|
||||
void copy_options_file( const char *destdir );
|
||||
|
@ -70,6 +70,36 @@ overwrite_filep( const char *fname )
|
||||
}
|
||||
|
||||
|
||||
/****************
|
||||
* Strip know extensions from iname and return a newly allocated
|
||||
* filename. Return NULL if we can't do that.
|
||||
*/
|
||||
char *
|
||||
make_outfile_name( const char *iname )
|
||||
{
|
||||
size_t n;
|
||||
|
||||
if( (!iname || (*iname=='-' && !iname[1]) ))
|
||||
return m_strdup("-");
|
||||
|
||||
#ifdef HAVE_DRIVE_LETTERS
|
||||
#warning add case insensitive compare
|
||||
#endif
|
||||
n = strlen(iname);
|
||||
if( n > 4 && ( !strcmp(iname+n-4,".gpg")
|
||||
|| !strcmp(iname+n-4,".sig")
|
||||
|| !strcmp(iname+n-4,".asc") ) ) {
|
||||
char *buf = m_strdup( iname );
|
||||
buf[n-4] = 0;
|
||||
return buf;
|
||||
}
|
||||
|
||||
log_error(_("%s: unknown suffix\n"), iname );
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/****************
|
||||
* Make an output filename for the inputfile INAME.
|
||||
* Returns an IOBUF and an errorcode
|
||||
@ -108,6 +138,7 @@ open_outfile( const char *iname, int mode, IOBUF *a )
|
||||
mode==2 ? ".sig" : ".gpg");
|
||||
name = buf;
|
||||
}
|
||||
|
||||
if( overwrite_filep( name ) ) {
|
||||
if( !(*a = iobuf_create( name )) ) {
|
||||
log_error(_("%s: can't create: %s\n"), name, strerror(errno) );
|
||||
@ -124,6 +155,7 @@ open_outfile( const char *iname, int mode, IOBUF *a )
|
||||
}
|
||||
|
||||
|
||||
|
||||
/****************
|
||||
* Try to open a file without the extension ".sig" or ".asc"
|
||||
* Return NULL if such a file is not available.
|
||||
|
@ -76,6 +76,7 @@ struct {
|
||||
int interactive;
|
||||
STRLIST notation_data;
|
||||
const char *set_policy_url;
|
||||
int use_embedded_filename;
|
||||
} opt;
|
||||
|
||||
|
||||
|
@ -63,6 +63,13 @@ handle_plaintext( PKT_plaintext *pt, md_filter_context_t *mfx,
|
||||
log_info(_("data not saved; use option \"--output\" to save it\n"));
|
||||
nooutput = 1;
|
||||
}
|
||||
else if( !opt.use_embedded_filename ) {
|
||||
fname = make_outfile_name( iobuf_get_real_fname(pt->buf) );
|
||||
if( !fname ) {
|
||||
rc = G10ERR_CREATE_FILE;
|
||||
goto leave;
|
||||
}
|
||||
}
|
||||
else {
|
||||
fname = m_alloc( pt->namelen +1 );
|
||||
memcpy( fname, pt->name, pt->namelen );
|
||||
@ -90,7 +97,7 @@ handle_plaintext( PKT_plaintext *pt, md_filter_context_t *mfx,
|
||||
|
||||
if( pt->len ) {
|
||||
assert( !clearsig );
|
||||
if( convert ) { // text mode
|
||||
if( convert ) { /* text mode */
|
||||
for( ; pt->len; pt->len-- ) {
|
||||
if( (c = iobuf_get(pt->buf)) == -1 ) {
|
||||
log_error("Problem reading source (%u bytes remaining)\n",
|
||||
@ -112,7 +119,7 @@ handle_plaintext( PKT_plaintext *pt, md_filter_context_t *mfx,
|
||||
}
|
||||
}
|
||||
}
|
||||
else { // binary mode
|
||||
else { /* binary mode */
|
||||
byte *buffer = m_alloc( 32768 );
|
||||
while( pt->len ) {
|
||||
int len = pt->len > 32768 ? 32768 : pt->len;
|
||||
@ -141,7 +148,7 @@ handle_plaintext( PKT_plaintext *pt, md_filter_context_t *mfx,
|
||||
}
|
||||
}
|
||||
else if( !clearsig ) {
|
||||
if( convert ) { // text mode
|
||||
if( convert ) { /* text mode */
|
||||
while( (c = iobuf_get(pt->buf)) != -1 ) {
|
||||
if( mfx->md )
|
||||
md_putc(mfx->md, c );
|
||||
@ -157,7 +164,7 @@ handle_plaintext( PKT_plaintext *pt, md_filter_context_t *mfx,
|
||||
}
|
||||
}
|
||||
}
|
||||
else { // binary mode
|
||||
else { /* binary mode */
|
||||
byte *buffer = m_alloc( 32768 );
|
||||
for( ;; ) {
|
||||
int len = iobuf_read( pt->buf, buffer, 32768 );
|
||||
|
@ -56,6 +56,7 @@ struct iobuf_struct {
|
||||
IOBUF chain, byte *buf, size_t *len);
|
||||
void *filter_ov; /* value for opaque */
|
||||
int filter_ov_owner;
|
||||
char *real_fname;
|
||||
IOBUF chain; /* next iobuf used for i/o if any (passed to filter) */
|
||||
int no, subno;
|
||||
const char *desc;
|
||||
@ -114,6 +115,7 @@ size_t iobuf_temp_to_buffer( IOBUF a, byte *buffer, size_t buflen );
|
||||
void iobuf_unget_and_close_temp( IOBUF a, IOBUF temp );
|
||||
|
||||
u32 iobuf_get_filelength( IOBUF a );
|
||||
const char *iobuf_get_real_fname( IOBUF a );
|
||||
const char *iobuf_get_fname( IOBUF a );
|
||||
|
||||
void iobuf_set_block_mode( IOBUF a, size_t n );
|
||||
|
@ -1,3 +1,7 @@
|
||||
Tue Jun 1 16:01:46 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
|
||||
|
||||
* config.links (i[56]86*-*-freebsdelf*): New.
|
||||
|
||||
Sun May 23 14:20:22 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
|
||||
|
||||
* config.links (sysdep.h): Not any more conditionally created.
|
||||
|
@ -12,12 +12,12 @@ echo '/* created by config.links - do not edit */' >./mpi/asm-syntax.h
|
||||
|
||||
if test "$try_asm_modules" = "yes" ; then
|
||||
case "${target}" in
|
||||
i[34]86*-*-freebsd*-elf | i[34]86*-*-freebsd[34]*)
|
||||
i[34]86*-*-freebsd*-elf | i[34]86*-*-freebsd[34]* | i[34]86*-*-freebsdelf*)
|
||||
echo '#define ELF_SYNTAX' >>./mpi/asm-syntax.h
|
||||
cat $srcdir/mpi/i386/syntax.h >>./mpi/asm-syntax.h
|
||||
path="i386"
|
||||
;;
|
||||
i[56]86*-*-freebsd*-elf | i[56]86*-*-freebsd[34]*)
|
||||
i[56]86*-*-freebsd*-elf | i[56]86*-*-freebsd[34]* | i[56]86*-*-freebsdelf*)
|
||||
echo '#define ELF_SYNTAX' >>./mpi/asm-syntax.h
|
||||
cat $srcdir/mpi/i386/syntax.h >>./mpi/asm-syntax.h
|
||||
path="i586 i386"
|
||||
|
@ -103,6 +103,12 @@ mpi_alloc_secure( unsigned nlimbs )
|
||||
}
|
||||
|
||||
|
||||
#if 0
|
||||
static void *unused_limbs_5;
|
||||
static void *unused_limbs_32;
|
||||
static void *unused_limbs_64;
|
||||
#endif
|
||||
|
||||
mpi_ptr_t
|
||||
#ifdef M_DEBUG
|
||||
mpi_debug_alloc_limb_space( unsigned nlimbs, int secure, const char *info )
|
||||
@ -111,14 +117,37 @@ mpi_alloc_limb_space( unsigned nlimbs, int secure )
|
||||
#endif
|
||||
{
|
||||
size_t len = nlimbs * sizeof(mpi_limb_t);
|
||||
mpi_ptr_t p;
|
||||
|
||||
if( DBG_MEMORY )
|
||||
log_debug("mpi_alloc_limb_space(%u)\n", (unsigned)len*8 );
|
||||
#ifdef M_DEBUG
|
||||
return secure? m_debug_alloc_secure(len, info):m_debug_alloc( len, info );
|
||||
#else
|
||||
return secure? m_alloc_secure( len ):m_alloc( len );
|
||||
#if 0
|
||||
if( !secure ) {
|
||||
if( nlimbs == 5 && unused_limbs_5 ) { /* DSA 160 bits */
|
||||
p = unused_limbs_5;
|
||||
unused_limbs_5 = *p;
|
||||
return p;
|
||||
}
|
||||
else if( nlimbs == 32 && unused_limbs_32 ) { /* DSA 1024 bits */
|
||||
p = unused_limbs_32;
|
||||
unused_limbs_32 = *p;
|
||||
return p;
|
||||
}
|
||||
else if( nlimbs == 64 && unused_limbs_64 ) { /* DSA 2*1024 bits */
|
||||
p = unused_limbs_64;
|
||||
unused_limbs_64 = *p;
|
||||
return p;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef M_DEBUG
|
||||
p = secure? m_debug_alloc_secure(len, info):m_debug_alloc( len, info );
|
||||
#else
|
||||
p = secure? m_alloc_secure( len ):m_alloc( len );
|
||||
#endif
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
void
|
||||
@ -132,6 +161,31 @@ mpi_free_limb_space( mpi_ptr_t a )
|
||||
return;
|
||||
if( DBG_MEMORY )
|
||||
log_debug("mpi_free_limb_space of size %lu\n", (ulong)m_size(a)*8 );
|
||||
|
||||
#if 0
|
||||
if( !m_is_secure(a) ) {
|
||||
size_t nlimbs = m_size(a) / 4 ;
|
||||
void *p = a;
|
||||
|
||||
if( nlimbs == 5 ) { /* DSA 160 bits */
|
||||
*a = unused_limbs_5;
|
||||
unused_limbs_5 = a;
|
||||
return;
|
||||
}
|
||||
else if( nlimbs == 32 ) { /* DSA 1024 bits */
|
||||
*a = unused_limbs_32;
|
||||
unused_limbs_32 = a;
|
||||
return;
|
||||
}
|
||||
else if( nlimbs == 64 ) { /* DSA 2*1024 bits */
|
||||
*a = unused_limbs_64;
|
||||
unused_limbs_64 = a;
|
||||
return;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
m_free(a);
|
||||
}
|
||||
|
||||
|
@ -1,3 +1,8 @@
|
||||
Tue Jun 1 16:01:46 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
|
||||
|
||||
* iobuf.c (iobuf_get_real_fname): Made global and now keep a
|
||||
copy of the name in the iobuf struct.
|
||||
|
||||
Mon May 31 19:41:10 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
|
||||
|
||||
* iobuf.c (file_filter,block_filter): Speed patches (Rémi).
|
||||
|
42
util/iobuf.c
42
util/iobuf.c
@ -58,7 +58,6 @@ typedef struct {
|
||||
|
||||
|
||||
static int underflow(IOBUF a);
|
||||
static const char *get_real_fname( IOBUF a );
|
||||
|
||||
/****************
|
||||
* Read data from a file into buf which has an allocated length of *LEN.
|
||||
@ -449,6 +448,7 @@ iobuf_alloc(int use, size_t bufsize)
|
||||
a->no = ++number;
|
||||
a->subno = 0;
|
||||
a->opaque = NULL;
|
||||
a->real_fname = NULL;
|
||||
return a;
|
||||
}
|
||||
|
||||
@ -462,6 +462,7 @@ iobuf_close( IOBUF a )
|
||||
|
||||
if( a && a->directfp ) {
|
||||
fclose( a->directfp );
|
||||
m_free( a->real_fname );
|
||||
if( DBG_IOBUF )
|
||||
log_debug("iobuf_close -> %p\n", a->directfp );
|
||||
return 0;
|
||||
@ -477,6 +478,7 @@ iobuf_close( IOBUF a )
|
||||
if( a->filter && (rc = a->filter(a->filter_ov, IOBUFCTRL_FREE,
|
||||
a->chain, NULL, &dummy_len)) )
|
||||
log_error("IOBUFCTRL_FREE failed on close: %s\n", g10_errstr(rc) );
|
||||
m_free(a->real_fname);
|
||||
m_free(a->d.buf);
|
||||
m_free(a);
|
||||
}
|
||||
@ -489,7 +491,7 @@ iobuf_cancel( IOBUF a )
|
||||
const char *s;
|
||||
|
||||
if( a && a->use == 2 ) {
|
||||
s = get_real_fname(a);
|
||||
s = iobuf_get_real_fname(a);
|
||||
if( s && *s )
|
||||
remove(s); /* remove the file. Fixme: this will fail for MSDOZE*/
|
||||
} /* because the file is still open */
|
||||
@ -550,6 +552,8 @@ iobuf_open( const char *fname )
|
||||
fcx->fp = fp;
|
||||
fcx->print_only_name = print_only;
|
||||
strcpy(fcx->fname, fname );
|
||||
if( !print_only )
|
||||
a->real_fname = m_strdup( fname );
|
||||
a->filter = file_filter;
|
||||
a->filter_ov = fcx;
|
||||
file_filter( fcx, IOBUFCTRL_DESC, NULL, (byte*)&a->desc, &len );
|
||||
@ -614,6 +618,8 @@ iobuf_create( const char *fname )
|
||||
fcx->fp = fp;
|
||||
fcx->print_only_name = print_only;
|
||||
strcpy(fcx->fname, fname );
|
||||
if( !print_only )
|
||||
a->real_fname = m_strdup( fname );
|
||||
a->filter = file_filter;
|
||||
a->filter_ov = fcx;
|
||||
file_filter( fcx, IOBUFCTRL_DESC, NULL, (byte*)&a->desc, &len );
|
||||
@ -644,6 +650,7 @@ iobuf_append( const char *fname )
|
||||
fcx = m_alloc( sizeof *fcx + strlen(fname) );
|
||||
fcx->fp = fp;
|
||||
strcpy(fcx->fname, fname );
|
||||
a->real_fname = m_strdup( fname );
|
||||
a->filter = file_filter;
|
||||
a->filter_ov = fcx;
|
||||
file_filter( fcx, IOBUFCTRL_DESC, NULL, (byte*)&a->desc, &len );
|
||||
@ -670,6 +677,7 @@ iobuf_openrw( const char *fname )
|
||||
fcx = m_alloc( sizeof *fcx + strlen(fname) );
|
||||
fcx->fp = fp;
|
||||
strcpy(fcx->fname, fname );
|
||||
a->real_fname = m_strdup( fname );
|
||||
a->filter = file_filter;
|
||||
a->filter_ov = fcx;
|
||||
file_filter( fcx, IOBUFCTRL_DESC, NULL, (byte*)&a->desc, &len );
|
||||
@ -703,6 +711,7 @@ iobuf_fopen( const char *fname, const char *mode )
|
||||
return NULL;
|
||||
a = iobuf_alloc(1, 8192 );
|
||||
a->directfp = fp;
|
||||
a->real_fname = m_strdup( fname );
|
||||
|
||||
if( DBG_IOBUF )
|
||||
log_debug("iobuf_fopen -> %p\n", a->directfp );
|
||||
@ -745,6 +754,10 @@ iobuf_push_filter2( IOBUF a,
|
||||
*/
|
||||
b = m_alloc(sizeof *b);
|
||||
memcpy(b, a, sizeof *b );
|
||||
/* fixme: it is stupid to keep a copy of the name at every level
|
||||
* but we need the name somewhere because the name known by file_filter
|
||||
* may have been released when we need the name of the file */
|
||||
b->real_fname = a->real_fname? m_strdup(a->real_fname):NULL;
|
||||
/* remove the filter stuff from the new stream */
|
||||
a->filter = NULL;
|
||||
a->filter_ov = NULL;
|
||||
@ -811,6 +824,7 @@ pop_filter( IOBUF a, int (*f)(void *opaque, int control,
|
||||
b = a->chain;
|
||||
assert(b);
|
||||
m_free(a->d.buf);
|
||||
m_free(a->real_fname);
|
||||
memcpy(a,b, sizeof *a);
|
||||
m_free(b);
|
||||
return 0;
|
||||
@ -847,6 +861,7 @@ pop_filter( IOBUF a, int (*f)(void *opaque, int control,
|
||||
*/
|
||||
b = a->chain;
|
||||
m_free(a->d.buf);
|
||||
m_free(a->real_fname);
|
||||
memcpy(a,b, sizeof *a);
|
||||
m_free(b);
|
||||
if( DBG_IOBUF )
|
||||
@ -884,6 +899,7 @@ underflow(IOBUF a)
|
||||
log_debug("iobuf-%d.%d: pop `%s' in underflow\n",
|
||||
a->no, a->subno, a->desc );
|
||||
m_free(a->d.buf);
|
||||
m_free(a->real_fname);
|
||||
memcpy(a, b, sizeof *a);
|
||||
m_free(b);
|
||||
print_chain(a);
|
||||
@ -952,6 +968,7 @@ underflow(IOBUF a)
|
||||
a->no, a->subno, a->desc );
|
||||
print_chain(a);
|
||||
m_free(a->d.buf);
|
||||
m_free(a->real_fname);
|
||||
memcpy(a,b, sizeof *a);
|
||||
m_free(b);
|
||||
print_chain(a);
|
||||
@ -1075,18 +1092,22 @@ iobuf_read(IOBUF a, byte *buf, unsigned buflen )
|
||||
do {
|
||||
if( n < buflen && a->d.start < a->d.len ) {
|
||||
unsigned size = a->d.len - a->d.start;
|
||||
if( size > buflen - n ) size = buflen - n;
|
||||
if( buf ) memcpy( buf, a->d.buf + a->d.start, size );
|
||||
if( size > buflen - n )
|
||||
size = buflen - n;
|
||||
if( buf )
|
||||
memcpy( buf, a->d.buf + a->d.start, size );
|
||||
n += size;
|
||||
a->d.start += size;
|
||||
if( buf ) buf += size;
|
||||
if( buf )
|
||||
buf += size;
|
||||
}
|
||||
if( n < buflen ) {
|
||||
if( (c=underflow(a)) == -1 ) {
|
||||
a->nbytes += n;
|
||||
return n? n : -1/*EOF*/;
|
||||
}
|
||||
if( buf ) *buf++ = c;
|
||||
if( buf )
|
||||
*buf++ = c;
|
||||
n++;
|
||||
}
|
||||
} while( n < buflen );
|
||||
@ -1251,6 +1272,7 @@ iobuf_get_filelength( IOBUF a )
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Hmmm: file_filter may have already been removed */
|
||||
for( ; a; a = a->chain )
|
||||
if( !a->chain && a->filter == file_filter ) {
|
||||
file_filter_ctx_t *b = a->filter_ov;
|
||||
@ -1331,9 +1353,13 @@ iobuf_seek( IOBUF a, ulong newpos )
|
||||
/****************
|
||||
* Retrieve the real filename
|
||||
*/
|
||||
static const char *
|
||||
get_real_fname( IOBUF a )
|
||||
const char *
|
||||
iobuf_get_real_fname( IOBUF a )
|
||||
{
|
||||
if( a->real_fname )
|
||||
return a->real_fname;
|
||||
|
||||
/* the old solution */
|
||||
for( ; a; a = a->chain )
|
||||
if( !a->chain && a->filter == file_filter ) {
|
||||
file_filter_ctx_t *b = a->filter_ov;
|
||||
|
@ -48,9 +48,10 @@
|
||||
#define EXTRA_ALIGN 0
|
||||
#endif
|
||||
|
||||
static void membug( const char *fmt, ... );
|
||||
|
||||
#ifdef M_DEBUG
|
||||
static void membug( const char *fmt, ... );
|
||||
|
||||
#ifndef M_GUARD
|
||||
#define M_GUARD 1
|
||||
#endif
|
||||
@ -318,7 +319,6 @@ check_allmem( const char *info )
|
||||
check_mem(e->user_p-4-EXTRA_ALIGN, info);
|
||||
}
|
||||
|
||||
#endif /* M_DEBUG */
|
||||
|
||||
static void
|
||||
membug( const char *fmt, ... )
|
||||
@ -337,6 +337,7 @@ membug( const char *fmt, ... )
|
||||
abort();
|
||||
}
|
||||
|
||||
#endif /* M_DEBUG */
|
||||
|
||||
void
|
||||
m_print_stats( const char *prefix )
|
||||
|
Loading…
x
Reference in New Issue
Block a user