X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fbus-driverd%2Fbus-driverd.c;h=ccb1fb3710136951f9fc3bf4d3efa156026cc1a2;hb=c966ef4a7678c4040884a5e644132660e72cd6d9;hp=bf448cd9ebcc11bb978dd0677cb9f41d678394af;hpb=382aa8d036b80ef30ee5cebfbf29ea1136e26df2;p=elogind.git diff --git a/src/bus-driverd/bus-driverd.c b/src/bus-driverd/bus-driverd.c index bf448cd9e..ccb1fb371 100644 --- a/src/bus-driverd/bus-driverd.c +++ b/src/bus-driverd/bus-driverd.c @@ -185,7 +185,6 @@ static int driver_get_id(sd_bus *bus, sd_bus_message *m, void *userdata, sd_bus_ static int driver_get_name_owner(sd_bus *bus, sd_bus_message *m, void *userdata, sd_bus_error *error) { _cleanup_bus_creds_unref_ sd_bus_creds *creds = NULL; - _cleanup_free_ char *owner = NULL; char *arg0; int r; @@ -334,8 +333,7 @@ static int driver_request_name(sd_bus *bus, sd_bus_message *m, void *userdata, s size = sizeof(*cmd_name) + strlen(name) + 1; - cmd_name = alloca(size); - memset(cmd_name, 0, size); + cmd_name = alloca0(size); strcpy(cmd_name->name, name); cmd_name->size = size; kdbus_translate_request_name_flags(flags, (uint64_t *) &cmd_name->conn_flags); @@ -349,10 +347,19 @@ static int driver_request_name(sd_bus *bus, sd_bus_message *m, void *userdata, s cmd_name->id = id; r = ioctl(sd_bus_get_fd(bus), KDBUS_CMD_NAME_ACQUIRE, cmd_name); - if (r < 0) - return r; + if (r < 0) { + if (errno == EEXIST) + return sd_bus_reply_method_return(m, "u", BUS_NAME_EXISTS); + else if (errno == EALREADY) + return sd_bus_reply_method_return(m, "u", BUS_NAME_ALREADY_OWNER); + + return -errno; + } + + if (cmd_name->flags & KDBUS_NAME_IN_QUEUE) + return sd_bus_reply_method_return(m, "u", BUS_NAME_IN_QUEUE); - return sd_bus_reply_method_return(m, "u", 0); + return sd_bus_reply_method_return(m, "u", BUS_NAME_PRIMARY_OWNER); } static int driver_start_service_by_name(sd_bus *bus, sd_bus_message *m, void *userdata, sd_bus_error *error) {