chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
bb4f237
)
unit: allow units to have more than one instance id
author
Lennart Poettering
<lennart@poettering.net>
Fri, 16 Jul 2010 17:40:24 +0000
(19:40 +0200)
committer
Lennart Poettering
<lennart@poettering.net>
Fri, 16 Jul 2010 17:40:24 +0000
(19:40 +0200)
src/unit.c
patch
|
blob
|
history
diff --git
a/src/unit.c
b/src/unit.c
index 0c92756cb7f7deb93aa2ace3f1a3bd60c10d53cc..f8be8b26a148bd9418348ad23ce48d7160ed5b9c 100644
(file)
--- a/
src/unit.c
+++ b/
src/unit.c
@@
-84,7
+84,7
@@
bool unit_has_name(Unit *u, const char *name) {
int unit_add_name(Unit *u, const char *text) {
UnitType t;
int unit_add_name(Unit *u, const char *text) {
UnitType t;
- char *s
= NULL
, *i = NULL;
+ char *s, *i = NULL;
int r;
assert(u);
int r;
assert(u);
@@
-119,7
+119,9
@@
int unit_add_name(Unit *u, const char *text) {
if (i && unit_vtable[t]->no_instances)
goto fail;
if (i && unit_vtable[t]->no_instances)
goto fail;
- if (u->meta.type != _UNIT_TYPE_INVALID && !streq_ptr(u->meta.instance, i)) {
+ /* Ensure that this unit is either instanced or not instanced,
+ * but not both. */
+ if (u->meta.type != _UNIT_TYPE_INVALID && !u->meta.instance != !i) {
r = -EINVAL;
goto fail;
}
r = -EINVAL;
goto fail;
}
@@
-171,7
+173,8
@@
fail:
}
int unit_choose_id(Unit *u, const char *name) {
}
int unit_choose_id(Unit *u, const char *name) {
- char *s, *t = NULL;
+ char *s, *t = NULL, *i;
+ int r;
assert(u);
assert(name);
assert(u);
assert(name);
@@
-194,7
+197,14
@@
int unit_choose_id(Unit *u, const char *name) {
if (!s)
return -ENOENT;
if (!s)
return -ENOENT;
+ if ((r = unit_name_to_instance(s, &i)) < 0)
+ return r;
+
u->meta.id = s;
u->meta.id = s;
+
+ free(u->meta.instance);
+ u->meta.instance = i;
+
unit_add_to_dbus_queue(u);
return 0;
unit_add_to_dbus_queue(u);
return 0;
@@
-460,7
+470,7
@@
int unit_merge(Unit *u, Unit *other) {
if (u->meta.type != other->meta.type)
return -EINVAL;
if (u->meta.type != other->meta.type)
return -EINVAL;
- if (!
streq_ptr(u->meta.instance, other->meta.instance)
)
+ if (!
u->meta.instance != !other->meta.instance
)
return -EINVAL;
if (other->meta.load_state != UNIT_STUB &&
return -EINVAL;
if (other->meta.load_state != UNIT_STUB &&