binfmt.c revision 151b190e79e64824552e01849352ca8f6ac7dedb
a8eedf4953d379dc09ee2b04e69a0a54ba247a02Lennart Poettering/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
a8eedf4953d379dc09ee2b04e69a0a54ba247a02Lennart Poettering This file is part of systemd.
a8eedf4953d379dc09ee2b04e69a0a54ba247a02Lennart Poettering Copyright 2010 Lennart Poettering
a8eedf4953d379dc09ee2b04e69a0a54ba247a02Lennart Poettering systemd is free software; you can redistribute it and/or modify it
a8eedf4953d379dc09ee2b04e69a0a54ba247a02Lennart Poettering under the terms of the GNU General Public License as published by
a8eedf4953d379dc09ee2b04e69a0a54ba247a02Lennart Poettering the Free Software Foundation; either version 2 of the License, or
a8eedf4953d379dc09ee2b04e69a0a54ba247a02Lennart Poettering (at your option) any later version.
a8eedf4953d379dc09ee2b04e69a0a54ba247a02Lennart Poettering systemd is distributed in the hope that it will be useful, but
a8eedf4953d379dc09ee2b04e69a0a54ba247a02Lennart Poettering WITHOUT ANY WARRANTY; without even the implied warranty of
a8eedf4953d379dc09ee2b04e69a0a54ba247a02Lennart Poettering MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
a8eedf4953d379dc09ee2b04e69a0a54ba247a02Lennart Poettering General Public License for more details.
a8eedf4953d379dc09ee2b04e69a0a54ba247a02Lennart Poettering You should have received a copy of the GNU General Public License
a8eedf4953d379dc09ee2b04e69a0a54ba247a02Lennart Poettering along with systemd; If not, see <http://www.gnu.org/licenses/>.
a8eedf4953d379dc09ee2b04e69a0a54ba247a02Lennart Poetteringstatic int delete_rule(const char *rule) {
a8eedf4953d379dc09ee2b04e69a0a54ba247a02Lennart Poettering char *x, *fn, *e;
a8eedf4953d379dc09ee2b04e69a0a54ba247a02Lennart Poettering asprintf(&fn, "/proc/sys/fs/binfmt_misc/%s", x+1);
a8eedf4953d379dc09ee2b04e69a0a54ba247a02Lennart Poettering if ((r = write_one_line_file("/proc/sys/fs/binfmt_misc/register", rule)) < 0) {
a8eedf4953d379dc09ee2b04e69a0a54ba247a02Lennart Poettering log_error("Failed to add binary format: %s", strerror(-r));
a8eedf4953d379dc09ee2b04e69a0a54ba247a02Lennart Poetteringstatic int apply_file(const char *path, bool ignore_enoent) {
a8eedf4953d379dc09ee2b04e69a0a54ba247a02Lennart Poettering log_error("Failed to open file '%s', ignoring: %m", path);
a8eedf4953d379dc09ee2b04e69a0a54ba247a02Lennart Poettering if (!fgets(l, sizeof(l), f)) {
a8eedf4953d379dc09ee2b04e69a0a54ba247a02Lennart Poettering log_error("Failed to read file '%s', ignoring: %m", path);
a8eedf4953d379dc09ee2b04e69a0a54ba247a02Lennart Poettering if ((k = apply_rule(p)) < 0 && r == 0)
a8eedf4953d379dc09ee2b04e69a0a54ba247a02Lennart Poetteringstatic int scandir_filter(const struct dirent *d) {
return -errno;
char *fn;
r = -ENOMEM;
return EXIT_FAILURE;
log_open();