]>
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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 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
);
111 int lxc_char_left_gc(char *buffer
, size_t len
)
114 for (i
= 0; i
< len
; i
++) {
115 if (buffer
[i
] == ' ' ||
123 int lxc_char_right_gc(char *buffer
, size_t len
)
126 for (i
= len
- 1; i
>= 0; i
--) {
127 if (buffer
[i
] == ' ' ||
137 int lxc_is_line_empty(char *line
)
140 size_t len
= strlen(line
);
142 for (i
= 0; i
< len
; i
++)
143 if (line
[i
] != ' ' && line
[i
] != '\t' &&
144 line
[i
] != '\n' && line
[i
] != '\r' &&
145 line
[i
] != '\f' && line
[i
] != '\0')