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