]>
git.proxmox.com Git - mirror_lxc.git/blob - src/lxc/parse.c
2 * lxc: linux Container library
4 * (C) Copyright IBM Corp. 2007, 2008
7 * Daniel Lezcano <daniel.lezcano at free.fr>
9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Lesser General Public
11 * License as published by the Free Software Foundation; either
12 * version 2.1 of the License, or (at your option) any later version.
14 * This library is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * Lesser General Public License for more details.
19 * You should have received a copy of the GNU Lesser General Public
20 * License along with this library; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
36 /* Workaround for the broken signature of alphasort() in bionic.
37 This was fixed upstream in 40e467ec668b59be25491bd44bf348a884d6a68d so the
38 workaround can probably be dropped with the next version of the Android NDK.
41 int bionic_alphasort(const struct dirent
** a
, const struct dirent
** b
) {
42 return strcoll((*a
)->d_name
, (*b
)->d_name
);
47 lxc_log_define(lxc_parse
, lxc
);
49 static int dir_filter(const struct dirent
*dirent
)
51 if (!strcmp(dirent
->d_name
, ".") ||
52 !strcmp(dirent
->d_name
, ".."))
57 int lxc_dir_for_each(const char *name
, const char *directory
,
58 lxc_dir_cb callback
, void *data
)
60 struct dirent
**namelist
;
64 n
= scandir(directory
, &namelist
, dir_filter
, bionic_alphasort
);
66 n
= scandir(directory
, &namelist
, dir_filter
, alphasort
);
69 SYSERROR("failed to scan %s directory", directory
);
75 callback(name
, directory
, namelist
[n
]->d_name
, data
)) {
76 ERROR("callback failed");
86 int lxc_file_for_each_line(const char *file
, lxc_file_cb callback
, void *data
)
95 SYSERROR("failed to open %s", file
);
99 while (getline(&line
, &len
, f
) != -1) {
100 err
= callback(line
, data
);
102 // callback rv > 0 means stop here
103 // callback rv < 0 means error
105 ERROR("Failed to parse config: %s", line
);
116 int lxc_char_left_gc(char *buffer
, size_t len
)
119 for (i
= 0; i
< len
; i
++) {
120 if (buffer
[i
] == ' ' ||
128 int lxc_char_right_gc(char *buffer
, size_t len
)
131 for (i
= len
- 1; i
>= 0; i
--) {
132 if (buffer
[i
] == ' ' ||
142 int lxc_is_line_empty(char *line
)
145 size_t len
= strlen(line
);
147 for (i
= 0; i
< len
; i
++)
148 if (line
[i
] != ' ' && line
[i
] != '\t' &&
149 line
[i
] != '\n' && line
[i
] != '\r' &&
150 line
[i
] != '\f' && line
[i
] != '\0')