gpgme progress meter callback
Marcus Brinkmann
Marcus.Brinkmann@ruhr-uni-bochum.de
Sun Sep 8 01:05:02 2002
On Sat, Sep 07, 2002 at 02:46:23PM -0500, Jacob Perkins wrote:
> I'm confused about how to use the progess meter callback setup in gpgme.
> How do I construct a GpgmeProgessCb and a HookValue?
> Here's what I did, and it caused a segfault when I called
> gpgme_op_generate:
>
> GpgmeProgressCb *progfunc = "progress";
> gpgme_set_progress_cb (ctx, *progfunc, key_status);
Do you need a PROGFUNC variable? This could be as simple as:
gpgme_set_progress_cb (ctx, progfunc, key_status);
Of course passing a string to a pointer to a function pointer is completely
wrong. I can not believe that you compiled this with -Wall and did not spot
the compiler warning "initialization of incompatible pointer type".
> and then I have:
> void
> progress (gpointer status, gchar *what, gint type, gint current, gint
> total){}
This is not too bad, but not strictly correct with the types. The plethora
of g* types are GTK+ (or GLib) types, but that is not what a GpgmeProgressCb
is expected to take. You should use this:
void progress (void *status, const char *what, int type, int current, int total);
and nothing else. If you need a gpointer or gint, you can cast it to that
later:
{
gpointer gstatus = (gpointer) status;
gchar *gwhat = (gchar *) what;
...
}
The gchar conversion might trigger a warning about dropping the const
attribute.
Thanks,
Marcus
--
`Rhubarb is no Egyptian god.' GNU http://www.gnu.org marcus@gnu.org
Marcus Brinkmann The Hurd http://www.gnu.org/software/hurd/
Marcus.Brinkmann@ruhr-uni-bochum.de
http://www.marcus-brinkmann.de/