[gnome-control-center/wip/msanchez/printers-clean-heads: 2/3] printers: Check all supported CUPS commands, not just the first one
- From: Mario Sanchez Prada <msanchez src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center/wip/msanchez/printers-clean-heads: 2/3] printers: Check all supported CUPS commands, not just the first one
- Date: Wed, 25 May 2016 10:06:58 +0000 (UTC)
commit cd96f9b49b2f8e003787322b7a390bd94f66709a
Author: Mario Sanchez Prada <mario endlessm com>
Date: Fri Apr 29 12:13:02 2016 +0100
printers: Check all supported CUPS commands, not just the first one
Use an array of strings to store every supported command and check
the desired command against the elements in that list, instead of
simply checking the first one.
https://bugzilla.gnome.org/show_bug.cgi?id=766861
panels/printers/pp-maintenance-command.c | 39 +++++++++++++++++++++--------
1 files changed, 28 insertions(+), 11 deletions(-)
---
diff --git a/panels/printers/pp-maintenance-command.c b/panels/printers/pp-maintenance-command.c
index f335e0f..eb2ddc6 100644
--- a/panels/printers/pp-maintenance-command.c
+++ b/panels/printers/pp-maintenance-command.c
@@ -294,9 +294,8 @@ pp_maintenance_command_is_supported (const gchar *printer_name,
ipp_t *request;
ipp_t *response = NULL;
gchar *printer_uri;
- gchar *printer_commands = NULL;
- gchar *printer_commands_lowercase = NULL;
gchar *command_lowercase;
+ GPtrArray *available_commands = NULL;
printer_uri = g_strdup_printf ("ipp://localhost/printers/%s",
printer_name);
@@ -311,30 +310,48 @@ pp_maintenance_command_is_supported (const gchar *printer_name,
{
if (ippGetStatusCode (response) <= IPP_OK_CONFLICT)
{
+ int commands_count;
+
attr = ippFindAttribute (response, "printer-commands", IPP_TAG_ZERO);
- if (attr && ippGetCount (attr) > 0 &&
+ commands_count = attr ? ippGetCount (attr) : 0;
+ if (commands_count > 0 &&
ippGetValueTag (attr) != IPP_TAG_NOVALUE &&
(ippGetValueTag (attr) == IPP_TAG_KEYWORD))
{
- printer_commands = g_strdup (ippGetString (attr, 0, NULL));
+ int i;
+
+ available_commands = g_ptr_array_new ();
+ for (i = 0; i < commands_count; ++i)
+ {
+ /* Array gains ownership of the lower-cased string */
+ g_ptr_array_add (available_commands, g_ascii_strdown (ippGetString (attr, i, NULL), -1));
+ }
}
}
ippDelete (response);
}
- if (printer_commands)
+ if (available_commands)
{
- command_lowercase = g_ascii_strdown (command, -1);
- printer_commands_lowercase = g_ascii_strdown (printer_commands, -1);
+ int i;
- if (g_strrstr (printer_commands_lowercase, command_lowercase))
- is_supported = TRUE;
+ command_lowercase = g_ascii_strdown (command, -1);
+ for (i = 0; i < available_commands->len; ++i)
+ {
+ const gchar *available_command = g_ptr_array_index (available_commands, i);
+ if (g_strrstr (available_command, command_lowercase))
+ {
+ is_supported = TRUE;
+ break;
+ }
+ }
g_free (command_lowercase);
- g_free (printer_commands_lowercase);
- g_free (printer_commands);
+ g_ptr_array_free (available_commands, TRUE);
}
+ g_free (printer_uri);
+
return is_supported;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]