Mercurial > illumos > onarm
comparison usr/src/cmd/hal/hald-runner/utils.c @ 0:c9caec207d52 b86
Initial porting based on b86
author | Koji Uno <koji.uno@sun.com> |
---|---|
date | Tue, 02 Jun 2009 18:56:50 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:c9caec207d52 |
---|---|
1 /*************************************************************************** | |
2 * CVSID: $Id$ | |
3 * | |
4 * utils.c - Some utils for the hald runner | |
5 * | |
6 * Copyright (C) 2006 Sjoerd Simons, <sjoerd@luon.net> | |
7 * | |
8 * Licensed under the Academic Free License version 2.1 | |
9 * | |
10 * This program is free software; you can redistribute it and/or modify | |
11 * it under the terms of the GNU General Public License as published by | |
12 * the Free Software Foundation; either version 2 of the License, or | |
13 * (at your option) any later version. | |
14 * | |
15 * This program is distributed in the hope that it will be useful, | |
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
18 * GNU General Public License for more details. | |
19 * | |
20 * You should have received a copy of the GNU General Public License | |
21 * along with this program; if not, write to the Free Software | |
22 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | |
23 * | |
24 **************************************************************************/ | |
25 #include <stdio.h> | |
26 #include <stdlib.h> | |
27 #define DBUS_API_SUBJECT_TO_CHANGE | |
28 #include <dbus/dbus-glib-lowlevel.h> | |
29 #include <glib.h> | |
30 | |
31 #include "utils.h" | |
32 | |
33 char ** | |
34 get_string_array(DBusMessageIter *iter, char *extra) | |
35 { | |
36 GArray *array; | |
37 char **result; | |
38 array = g_array_new(TRUE, FALSE, sizeof(char *)); | |
39 | |
40 while (dbus_message_iter_get_arg_type(iter) == DBUS_TYPE_STRING) { | |
41 const char *value; | |
42 char *t; | |
43 dbus_message_iter_get_basic(iter, &value); | |
44 t = g_strdup(value); | |
45 g_array_append_vals(array, &t, 1); | |
46 dbus_message_iter_next(iter); | |
47 } | |
48 if (extra != NULL) | |
49 g_array_append_vals(array, &extra, 1); | |
50 result = (char **) array->data; | |
51 g_array_free(array, FALSE); | |
52 return result; | |
53 } | |
54 | |
55 char ** | |
56 get_string_array_from_fd(int fd) | |
57 { | |
58 GArray *array; | |
59 char **result; | |
60 GString *str; | |
61 gsize pos; | |
62 GIOChannel *io; | |
63 int i = 0; | |
64 | |
65 array = g_array_new(TRUE, FALSE, sizeof(char *)); | |
66 str = g_string_new(""); | |
67 io = g_io_channel_unix_new(fd); | |
68 while (g_io_channel_read_line_string(io, str, &pos, NULL) == G_IO_STATUS_NORMAL && (i++ < 128)) { | |
69 char *t; | |
70 | |
71 /* Remove the terminting char aka \n */ | |
72 g_string_erase(str, pos, 1); | |
73 t = g_strdup(str->str); | |
74 g_array_append_vals(array, &t, 1); | |
75 } | |
76 g_string_free(str, TRUE); | |
77 g_io_channel_unref(io); | |
78 result = (char **) array->data; | |
79 g_array_free(array, FALSE); | |
80 return result; | |
81 } | |
82 | |
83 void | |
84 free_string_array(char **array) | |
85 { | |
86 char **p; | |
87 | |
88 for (p = array; p != NULL && *p != NULL; p++) | |
89 g_free(*p); | |
90 g_free(array); | |
91 } |