signing message problem

Werner Koch wk at
Wed Aug 9 10:19:27 CEST 2006

On Tue,  8 Aug 2006 22:38, Hajdu Péter said:

> 	gpgme_key_ref( key );

Why are you doing this?  KEY will only be initialized with the next call.

> 	while ( !(error = gpgme_op_keylist_next (context, &key)) ) {

while ( !error && !(error = gpgme_op_keylist_next (context, &key)) )

Is better to catch an error in gpgme_op_keylist_next.  BTW, better
don't use the name "error" because it is commonly used as a fucntion
name (e.g. in glibc).

> 	memset(buf,0,sizeof(buf));
> 	printf("%d\n",gpgme_data_read( signature, buf, sizeof(buf) ));
> 	printf("%s",buf);

        ret = gpgme_data_seek (signature, 0, SEEK_SET);
 	printf("%d\n", (ret=gpgme_data_read( signature, buf, sizeof(buf)) ));
 	printf("%.*s",(int)ret, buf);

You should also use gpgme_set_armor if you want to use printf.  Please
also read the chapter about Largefile support in the gpgme manual.

Better code to print a result goes like this:

  ret = gpgme_data_seek (dh, 0, SEEK_SET);
  if (ret)
    fail_if_err (gpgme_error_from_errno (errno));
  while ((ret = gpgme_data_read (dh, buf, sizeof buf)) > 0)
    fwrite (buf, ret, 1, stdout);
  if (ret < 0)
    fail_if_err (gpgme_error_from_errno (errno));



More information about the Gnupg-devel mailing list