1
0
mirror of https://github.com/systemd/systemd.git synced 2025-02-06 01:57:47 +03:00

Modernization

Fixes minor leak in error path in device.c.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2013-10-12 12:15:49 -04:00
parent 7ff7394d9e
commit b47d419c25
9 changed files with 70 additions and 101 deletions

View File

@ -189,10 +189,12 @@ static int device_update_unit(Manager *m, struct udev_device *dev, const char *p
assert(m);
if (!(sysfs = udev_device_get_syspath(dev)))
sysfs = udev_device_get_syspath(dev);
if (!sysfs)
return -ENOMEM;
if ((r = device_find_escape_name(m, path, &u)) < 0)
r = device_find_escape_name(m, path, &u);
if (r < 0)
return r;
if (u && DEVICE(u)->sysfs && !path_equal(DEVICE(u)->sysfs, sysfs))
@ -234,17 +236,21 @@ static int device_update_unit(Manager *m, struct udev_device *dev, const char *p
first = hashmap_get(m->devices_by_sysfs, sysfs);
LIST_PREPEND(Device, same_sysfs, first, DEVICE(u));
if ((r = hashmap_replace(m->devices_by_sysfs, DEVICE(u)->sysfs, first)) < 0)
r = hashmap_replace(m->devices_by_sysfs, DEVICE(u)->sysfs, first);
if (r < 0)
goto fail;
}
if ((model = udev_device_get_property_value(dev, "ID_MODEL_FROM_DATABASE")) ||
(model = udev_device_get_property_value(dev, "ID_MODEL"))) {
if ((r = unit_set_description(u, model)) < 0)
r = unit_set_description(u, model);
if (r < 0)
goto fail;
} else
if ((r = unit_set_description(u, path)) < 0)
} else {
r = unit_set_description(u, path);
if (r < 0)
goto fail;
}
if (main) {
/* The additional systemd udev properties we only
@ -257,7 +263,7 @@ static int device_update_unit(Manager *m, struct udev_device *dev, const char *p
size_t l;
FOREACH_WORD_QUOTED(w, l, alias, state) {
char *e;
_cleanup_free_ char *e;
e = strndup(w, l);
if (!e) {
@ -265,13 +271,10 @@ static int device_update_unit(Manager *m, struct udev_device *dev, const char *p
goto fail;
}
if (!is_path(e)) {
log_warning("SYSTEMD_ALIAS for %s is not a path, ignoring: %s", sysfs, e);
free(e);
} else {
if (is_path(e))
device_update_unit(m, dev, e, false);
free(e);
}
else
log_warning("SYSTEMD_ALIAS for %s is not a path, ignoring: %s", sysfs, e);
}
}
@ -281,22 +284,21 @@ static int device_update_unit(Manager *m, struct udev_device *dev, const char *p
size_t l;
FOREACH_WORD_QUOTED(w, l, wants, state) {
char *e, *n;
_cleanup_free_ char *e, *n = NULL;
e = strndup(w, l);
if (!e) {
r = -ENOMEM;
goto fail;
}
n = unit_name_mangle(e);
if (!n) {
r = -ENOMEM;
goto fail;
}
free(e);
r = unit_add_dependency_by_name(u, UNIT_WANTS, n, NULL, true);
free(n);
if (r < 0)
goto fail;
}

View File

@ -48,6 +48,9 @@
*
*/
#define GPT_SWAP SD_ID128_MAKE(06,57,fd,6d,a4,ab,43,c4,84,e5,09,33,c8,4b,4f,4f)
#define GPT_HOME SD_ID128_MAKE(93,3a,c7,e1,2e,b4,4f,13,b8,44,0e,14,e2,ae,f9,15)
static const char *arg_dest = "/tmp";
static inline void blkid_free_probep(blkid_probe *b) {
@ -113,13 +116,13 @@ static int verify_gpt_partition(const char *node, sd_id128_t *type, unsigned *nr
if (fstype) {
char *fst;
errno = 0;
r = blkid_probe_lookup_value(b, "TYPE", &v, NULL);
if (r != 0)
*fstype = NULL;
else {
char *fst;
fst = strdup(v);
if (!fst)
return -ENOMEM;
@ -242,10 +245,8 @@ static int enumerate_partitions(struct udev *udev, dev_t dev) {
int r;
e = udev_enumerate_new(udev);
if (!e) {
r = log_oom();
goto finish;
}
if (!e)
return log_oom();
d = udev_device_new_from_devnum(udev, 'b', dev);
if (!d) {
@ -314,10 +315,9 @@ static int enumerate_partitions(struct udev *udev, dev_t dev) {
if (r == 0)
goto skip;
if (sd_id128_equal(type_id, SD_ID128_MAKE(06,57,fd,6d,a4,ab,43,c4,84,e5,09,33,c8,4b,4f,4f)))
if (sd_id128_equal(type_id, GPT_SWAP))
add_swap(node, fstype);
else if (sd_id128_equal(type_id, SD_ID128_MAKE(93,3a,c7,e1,2e,b4,4f,13,b8,44,0e,14,e2,ae,f9,15))) {
else if (sd_id128_equal(type_id, GPT_HOME)) {
if (!home || nr < home_nr) {
free(home);
home = strdup(node);
@ -353,7 +353,7 @@ finish:
}
static int get_btrfs_block_device(const char *path, dev_t *dev) {
struct btrfs_ioctl_fs_info_args fsi;
struct btrfs_ioctl_fs_info_args fsi = {};
_cleanup_close_ int fd = -1;
uint64_t id;
@ -364,7 +364,6 @@ static int get_btrfs_block_device(const char *path, dev_t *dev) {
if (fd < 0)
return -errno;
zero(fsi);
if (ioctl(fd, BTRFS_IOC_FS_INFO, &fsi) < 0)
return -errno;
@ -373,12 +372,11 @@ static int get_btrfs_block_device(const char *path, dev_t *dev) {
return 0;
for (id = 1; id <= fsi.max_id; id++) {
struct btrfs_ioctl_dev_info_args di;
struct btrfs_ioctl_dev_info_args di = {
.devid = id,
};
struct stat st;
zero(di);
di.devid = id;
if (ioctl(fd, BTRFS_IOC_DEV_INFO, &di) < 0) {
if (errno == ENODEV)
continue;
@ -433,10 +431,8 @@ static int devno_to_devnode(struct udev *udev, dev_t devno, char **ret) {
int r;
d = udev_device_new_from_devnum(udev, 'b', devno);
if (!d) {
r = log_oom();
goto finish;
}
if (!d)
return log_oom();
t = udev_device_get_devnode(d);
if (!t) {
@ -454,8 +450,7 @@ static int devno_to_devnode(struct udev *udev, dev_t devno, char **ret) {
r = 0;
finish:
if (d)
udev_device_unref(d);
udev_device_unref(d);
return r;
}

View File

@ -805,7 +805,7 @@ static int convert_x11_to_vconsole(DBusConnection *connection) {
free_data_x11();
} else {
FILE *f;
_cleanup_fclose_ FILE *f;
unsigned n = 0;
unsigned best_matching = 0;
char *new_keymap = NULL;
@ -815,16 +815,13 @@ static int convert_x11_to_vconsole(DBusConnection *connection) {
return -errno;
for (;;) {
char **a;
_cleanup_strv_free_ char **a = NULL;
unsigned matching = 0;
int r;
r = read_next_mapping(f, &n, &a);
if (r < 0) {
fclose(f);
if (r < 0)
return r;
}
if (r == 0)
break;
@ -879,19 +876,11 @@ static int convert_x11_to_vconsole(DBusConnection *connection) {
free(new_keymap);
new_keymap = strdup(a[0]);
if (!new_keymap) {
strv_free(a);
fclose(f);
if (!new_keymap)
return -ENOMEM;
}
}
strv_free(a);
}
fclose(f);
if (!streq_ptr(state.vc_keymap, new_keymap)) {
free(state.vc_keymap);
state.vc_keymap = new_keymap;
@ -906,7 +895,8 @@ static int convert_x11_to_vconsole(DBusConnection *connection) {
if (modified) {
dbus_bool_t b;
DBusMessage *changed;
_cleanup_dbus_message_unref_ DBusMessage *changed = NULL;
int r;
r = write_data_vconsole();
@ -918,13 +908,10 @@ static int convert_x11_to_vconsole(DBusConnection *connection) {
"org.freedesktop.locale1",
"VConsoleKeymap\0"
"VConsoleKeymapToggle\0");
if (!changed)
return -ENOMEM;
b = dbus_connection_send(connection, changed, NULL);
dbus_message_unref(changed);
if (!b)
return -ENOMEM;
@ -935,31 +922,26 @@ static int convert_x11_to_vconsole(DBusConnection *connection) {
}
static int append_locale(DBusMessageIter *i, const char *property, void *userdata) {
int r, c = 0, p;
char **l;
int c, p;
_cleanup_strv_free_ char **l = NULL;
l = new0(char*, _PROP_MAX+1);
if (!l)
return -ENOMEM;
for (p = 0; p < _PROP_MAX; p++) {
for (p = 0, c = 0; p < _PROP_MAX; p++) {
char *t;
if (isempty(data[p]))
continue;
if (asprintf(&t, "%s=%s", names[p], data[p]) < 0) {
strv_free(l);
if (asprintf(&t, "%s=%s", names[p], data[p]) < 0)
return -ENOMEM;
}
l[c++] = t;
}
r = bus_property_append_strv(i, property, (void*) l);
strv_free(l);
return r;
return bus_property_append_strv(i, property, (void*) l);
}
static const BusProperty bus_locale_properties[] = {

View File

@ -415,7 +415,8 @@ static int collect(const char *root) {
}
}
if ((n = read(fanotify_fd, &data, sizeof(data))) < 0) {
n = read(fanotify_fd, &data, sizeof(data));
if (n < 0) {
if (errno == EINTR || errno == EAGAIN)
continue;
@ -436,7 +437,7 @@ static int collect(const char *root) {
}
for (m = &data.metadata; FAN_EVENT_OK(m, n); m = FAN_EVENT_NEXT(m, n)) {
char fn[PATH_MAX];
char fn[sizeof("/proc/self/fd/") + DECIMAL_STR_MAX(int)];
int k;
if (m->fd < 0)
@ -450,9 +451,8 @@ static int collect(const char *root) {
goto next_iteration;
snprintf(fn, sizeof(fn), "/proc/self/fd/%i", m->fd);
char_array_0(fn);
if ((k = readlink_malloc(fn, &p)) >= 0) {
k = readlink_malloc(fn, &p);
if (k >= 0) {
if (startswith(p, "/tmp") ||
endswith(p, " (deleted)") ||
hashmap_get(files, p))

View File

@ -67,7 +67,7 @@ static void show_pid_array(int pids[], unsigned n_pids, const char *prefix, unsi
/* And sort */
qsort(pids, n_pids, sizeof(pid_t), compare);
if(flags & OUTPUT_FULL_WIDTH)
if (flags & OUTPUT_FULL_WIDTH)
n_columns = 0;
else {
if (n_columns > pid_width+2)
@ -76,7 +76,7 @@ static void show_pid_array(int pids[], unsigned n_pids, const char *prefix, unsi
n_columns = 20;
}
for (i = 0; i < n_pids; i++) {
char *t = NULL;
_cleanup_free_ char *t = NULL;
get_process_cmdline(pids[i], n_columns, true, &t);
@ -87,8 +87,6 @@ static void show_pid_array(int pids[], unsigned n_pids, const char *prefix, unsi
pid_width,
(unsigned long) pids[i],
strna(t));
free(t);
}
}
@ -98,7 +96,7 @@ static int show_cgroup_one_by_path(const char *path, const char *prefix, unsigne
_cleanup_fclose_ FILE *f = NULL;
size_t n = 0, n_allocated = 0;
_cleanup_free_ pid_t *pids = NULL;
char *p = NULL;
_cleanup_free_ char *p = NULL;
pid_t pid;
int r;
@ -106,13 +104,8 @@ static int show_cgroup_one_by_path(const char *path, const char *prefix, unsigne
if (r < 0)
return r;
fn = strappend(p, "/cgroup.procs");
free(p);
if (!fn)
return -ENOMEM;
fn = strappenda(p, "/cgroup.procs");
f = fopen(fn, "re");
free(fn);
if (!f)
return -errno;

View File

@ -37,7 +37,7 @@ bool is_efi_boot(void) {
static int read_flag(const char *varname) {
int r;
void *v;
_cleanup_free_ void *v = NULL;
size_t s;
uint8_t b;
@ -45,15 +45,11 @@ static int read_flag(const char *varname) {
if (r < 0)
return r;
if (s != 1) {
r = -EINVAL;
goto finish;
}
if (s != 1)
return -EINVAL;
b = *(uint8_t *)v;
r = b > 0;
finish:
free(v);
return r;
}

View File

@ -1874,6 +1874,7 @@ static void unitfilelist_free(UnitFileList **f) {
free((*f)->path);
free(*f);
}
#define _cleanup_unitfilelist_free_ _cleanup_(unitfilelist_free)
int unit_file_get_list(
UnitFileScope scope,
@ -1925,8 +1926,7 @@ int unit_file_get_list(
for (;;) {
struct dirent *de;
union dirent_storage buffer;
UnitFileList __attribute__((cleanup(unitfilelist_free)))
*f = NULL;
_cleanup_unitfilelist_free_ UnitFileList *f = NULL;
r = readdir_r(d, &buffer.de, &de);
if (r != 0)

View File

@ -300,7 +300,8 @@ int socket_address_print(const SocketAddress *a, char **p) {
case AF_INET: {
char *ret;
if (!(ret = new(char, INET_ADDRSTRLEN+1+5+1)))
ret = new(char, INET_ADDRSTRLEN+1+5+1);
if (!ret)
return -ENOMEM;
if (!inet_ntop(AF_INET, &a->sockaddr.in4.sin_addr, ret, INET_ADDRSTRLEN)) {
@ -316,7 +317,8 @@ int socket_address_print(const SocketAddress *a, char **p) {
case AF_INET6: {
char *ret;
if (!(ret = new(char, 1+INET6_ADDRSTRLEN+2+5+1)))
ret = new(char, 1+INET6_ADDRSTRLEN+2+5+1);
if (!ret)
return -ENOMEM;
ret[0] = '[';
@ -334,8 +336,8 @@ int socket_address_print(const SocketAddress *a, char **p) {
char *ret;
if (a->size <= offsetof(struct sockaddr_un, sun_path)) {
if (!(ret = strdup("<unnamed>")))
ret = strdup("<unnamed>");
if (!ret)
return -ENOMEM;
} else if (a->sockaddr.un.sun_path[0] == 0) {
@ -346,7 +348,8 @@ int socket_address_print(const SocketAddress *a, char **p) {
* more than one NUL byte. That is
* actually an invalid assumption */
if (!(ret = new(char, sizeof(a->sockaddr.un.sun_path)+1)))
ret = new(char, sizeof(a->sockaddr.un.sun_path)+1);
if (!ret)
return -ENOMEM;
ret[0] = '@';
@ -354,8 +357,8 @@ int socket_address_print(const SocketAddress *a, char **p) {
ret[sizeof(a->sockaddr.un.sun_path)] = 0;
} else {
if (!(ret = strdup(a->sockaddr.un.sun_path)))
ret = strdup(a->sockaddr.un.sun_path);
if (!ret)
return -ENOMEM;
}

View File

@ -643,7 +643,7 @@ int get_process_cmdline(pid_t pid, size_t max_length, bool comm_fallback, char *
/* Kernel threads have no argv[] */
if (r == NULL || r[0] == 0) {
char *t;
_cleanup_free_ char *t = NULL;
int h;
free(r);
@ -656,8 +656,6 @@ int get_process_cmdline(pid_t pid, size_t max_length, bool comm_fallback, char *
return h;
r = strjoin("[", t, "]", NULL);
free(t);
if (!r)
return -ENOMEM;
}