Commit c41bbfa7 authored by Mario Sanchez Prada's avatar Mario Sanchez Prada
Browse files

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
parent 4b91972f
......@@ -296,9 +296,9 @@ _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;
int i;
printer_uri = g_strdup_printf ("ipp://localhost/printers/%s",
printer_name);
......@@ -313,29 +313,41 @@ _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 != NULL && ippGetCount (attr) > 0 &&
commands_count = attr != NULL ? 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));
available_commands = g_ptr_array_new_full (commands_count, g_free);
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 != NULL)
if (available_commands != NULL)
{
command_lowercase = g_ascii_strdown (command, -1);
printer_commands_lowercase = g_ascii_strdown (printer_commands, -1);
if (g_strcmp0 (printer_commands_lowercase, command_lowercase) == 0)
is_supported = TRUE;
for (i = 0; i < available_commands->len; ++i)
{
const gchar *available_command = g_ptr_array_index (available_commands, i);
if (g_strcmp0 (available_command, command_lowercase) == 0)
{
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);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment