2 Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012
3 Ben Kibbey <bjk@luxsci.net>
5 This file is part of pwmd.
7 Pwmd 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.
12 Pwmd 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.
17 You should have received a copy of the GNU General Public License
18 along with Pwmd. If not, see <http://www.gnu.org/licenses/>.
27 #include "pwmd-error.h"
30 #include "util-misc.h"
31 #include "util-string.h"
36 gpg_error_t
send_status(assuan_context_t ctx
, status_msg_t which
,
40 char buf
[ASSUAN_LINELENGTH
+1];
47 vsnprintf(buf
, sizeof(buf
), fmt
, ap
);
60 snprintf(buf
, sizeof(buf
), "%u", cache_file_count());
65 MUTEX_LOCK(&cn_mutex
);
66 snprintf(buf
, sizeof(buf
), "%i", slist_length(cn_thread_list
));
68 MUTEX_UNLOCK(&cn_mutex
);
73 line
= _("Waiting for lock");
85 p
= strchr(line
, ' ');
94 line
= line
+strlen(status
)+1;
100 log_write("%s %s", status
, line
? line
: "");
104 return assuan_write_status(ctx
, status
, line
);
107 void send_status_all(status_msg_t s
, const char *fmt
, ...)
109 MUTEX_LOCK(&cn_mutex
);
111 int t
= slist_length(cn_thread_list
);
114 struct client_thread_s
*thd
= slist_nth_data(cn_thread_list
, i
);
115 struct status_msg_s
*msg
, *p
;
119 MUTEX_LOCK(&thd
->status_mutex
);
121 for (p
= thd
->msg_queue
; p
; p
= p
->next
) {
129 MUTEX_UNLOCK(&thd
->status_mutex
);
133 msg
= xcalloc(1, sizeof(struct status_msg_s
));
139 str_vasprintf(&msg
->line
, fmt
, ap
);
143 for (p
= thd
->msg_queue
; p
&& p
->next
; p
= p
->next
);
145 thd
->msg_queue
= msg
;
149 write(thd
->status_msg_pipe
[1], &c
, 1);
150 MUTEX_UNLOCK(&thd
->status_mutex
);
153 MUTEX_UNLOCK(&cn_mutex
);