auto updated version number.
[gpgme.git] / gpgme / progress.c
1 /* progress.c -  status handler for progress status
2  *      Copyright (C) 2000 Werner Koch (dd9jn)
3  *      Copyright (C) 2001, 2002 g10 Code GmbH
4  *
5  * This file is part of GPGME.
6  *
7  * GPGME is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * GPGME is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
20  */
21
22 #ifdef HAVE_CONFIG_H
23 #include <config.h>
24 #endif
25 #include <stdlib.h>
26 #include <string.h>
27
28 #include "util.h"
29 #include "context.h"
30
31
32 void
33 _gpgme_progress_status_handler (GpgmeCtx ctx, GpgStatusCode code, char *args)
34 {
35   char *p;
36   char *args_cpy;
37   int type = 0;
38   int current = 0;
39   int total = 0;
40
41   if (code != STATUS_PROGRESS || !*args || !ctx->progress_cb)
42     return;
43
44   args_cpy = xtrystrdup (args);
45   if (!args_cpy)
46     {
47       ctx->error = mk_error (Out_Of_Core);
48       return;
49     }
50
51   p = strchr (args_cpy, ' ');
52   if (p)
53     {
54       *p++ = 0;
55       if (*p)
56         {
57           type = *(byte *)p;
58           p = strchr (p+1, ' ');
59           if (p)
60             {
61               *p++ = 0;
62               if (*p)
63                 {
64                   current = atoi (p);
65                   p = strchr (p+1, ' ');
66                   if (p)
67                     {
68                       *p++ = 0;
69                       total = atoi (p);
70                     }
71                 }
72             }
73         }
74     }           
75
76   if (type != 'X')
77     ctx->progress_cb (ctx->progress_cb_value, args_cpy, type, current, total);
78
79   xfree (args_cpy);
80 }