|
Packit |
b00eeb |
/*
|
|
Packit |
b00eeb |
* gnome-keyring
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* Copyright (C) 2011 Collabora Ltd
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* This program is free software; you can redistribute it and/or modify
|
|
Packit |
b00eeb |
* it under the terms of the GNU Lesser General Public License as
|
|
Packit |
b00eeb |
* published by the Free Software Foundation; either version 2.1 of
|
|
Packit |
b00eeb |
* the License, or (at your option) any later version.
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* This program is distributed in the hope that it will be useful, but
|
|
Packit |
b00eeb |
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
b00eeb |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
b00eeb |
* Lesser General Public License for more details.
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit |
b00eeb |
* License along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* Author: Stef Walter <stefw@collabora.co.uk>
|
|
Packit |
b00eeb |
*/
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
#include "config.h"
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
#include "gcr-util.h"
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
#include <string.h>
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
/**
|
|
Packit |
b00eeb |
* _gcr_util_parse_lines:
|
|
Packit |
b00eeb |
* @string: The string to parse lines from, will be modified
|
|
Packit |
b00eeb |
* @last_line: Whether or not we should run for last line or not
|
|
Packit |
b00eeb |
* @callback: Call for each line
|
|
Packit |
b00eeb |
* @user_data: Data for callback
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* Calls callback for each line. If last_line, also sends the remainder
|
|
Packit |
b00eeb |
* data that comes after the last line break. \n and \r\n are line separators.
|
|
Packit |
b00eeb |
* Neither are included in data passed to callback.
|
|
Packit |
b00eeb |
*/
|
|
Packit |
b00eeb |
void
|
|
Packit |
b00eeb |
_gcr_util_parse_lines (GString *string, gboolean last_line,
|
|
Packit |
b00eeb |
GcrLineCallback callback, gpointer user_data)
|
|
Packit |
b00eeb |
{
|
|
Packit |
b00eeb |
gchar *ptr;
|
|
Packit |
b00eeb |
gchar *prev;
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
g_return_if_fail (string);
|
|
Packit |
b00eeb |
g_return_if_fail (callback);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
/* Print all stderr lines as messages */
|
|
Packit |
b00eeb |
while ((ptr = strchr (string->str, '\n')) != NULL) {
|
|
Packit |
b00eeb |
*ptr = '\0';
|
|
Packit |
b00eeb |
if (ptr != string->str) {
|
|
Packit |
b00eeb |
prev = ptr - 1;
|
|
Packit |
b00eeb |
if (*prev == '\r')
|
|
Packit |
b00eeb |
*prev = '\0';
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
(callback) (string->str, user_data);
|
|
Packit |
b00eeb |
g_string_erase (string, 0, ptr - string->str + 1);
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
if (last_line && string->len) {
|
|
Packit |
b00eeb |
(callback) (string->str, user_data);
|
|
Packit |
b00eeb |
g_string_erase (string, 0, string->len);
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
}
|