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"
29 #include "util-misc.h"
31 #include "util-string.h"
37 send_status (assuan_context_t ctx
, status_msg_t which
, const char *fmt
, ...)
39 const char *line
= NULL
;
40 char buf
[ASSUAN_LINELENGTH
+ 1];
41 const char *status
= NULL
;
48 vsnprintf (buf
, sizeof (buf
), fmt
, ap
);
62 snprintf (buf
, sizeof (buf
), "%u", cache_file_count ());
67 MUTEX_LOCK (&cn_mutex
);
68 snprintf (buf
, sizeof (buf
), "%i", slist_length (cn_thread_list
));
70 MUTEX_UNLOCK (&cn_mutex
);
75 line
= _("Waiting for lock");
87 p
= strchr (line
, ' ');
98 line
= line
+ strlen (status
) + 1;
105 log_write ("%s %s", status
, line
? line
: "");
109 return assuan_write_status (ctx
, status
, line
);
113 send_status_all (status_msg_t s
, const char *fmt
, ...)
115 MUTEX_LOCK (&cn_mutex
);
117 int t
= slist_length (cn_thread_list
);
121 struct client_thread_s
*thd
= slist_nth_data (cn_thread_list
, i
);
122 struct status_msg_s
*msg
, *p
;
126 MUTEX_LOCK (&thd
->status_mutex
);
128 for (p
= thd
->msg_queue
; p
; p
= p
->next
)
139 MUTEX_UNLOCK (&thd
->status_mutex
);
143 msg
= xcalloc (1, sizeof (struct status_msg_s
));
150 str_vasprintf (&msg
->line
, fmt
, ap
);
154 for (p
= thd
->msg_queue
; p
&& p
->next
; p
= p
->next
);
156 thd
->msg_queue
= msg
;
160 write (thd
->status_msg_pipe
[1], &c
, 1);
161 MUTEX_UNLOCK (&thd
->status_mutex
);
164 MUTEX_UNLOCK (&cn_mutex
);