['sd_bus_wait', '3', [], ''],
['sd_device_get_syspath',
'3',
- ['sd_device_get_devname',
+ ['sd_device_get_device_id',
+ 'sd_device_get_devname',
'sd_device_get_devnum',
'sd_device_get_devpath',
'sd_device_get_devtype',
<refname>sd_device_get_ifindex</refname>
<refname>sd_device_get_driver</refname>
<refname>sd_device_get_diskseq</refname>
+ <refname>sd_device_get_device_id</refname>
<refpurpose>Returns various fields of device objects</refpurpose>
</refnamediv>
<paramdef>uint64_t *<parameter>ret</parameter></paramdef>
</funcprototype>
+ <funcprototype>
+ <funcdef>int <function>sd_device_get_device_id</function></funcdef>
+ <paramdef>sd_device *<parameter>device</parameter></paramdef>
+ <paramdef>uint64_t *<parameter>ret</parameter></paramdef>
+ </funcprototype>
+
</funcsynopsis>
</refsynopsisdiv>
the device name changing, and is relevant for block devices encapsulating devices with changing media
(e.g. floppy or CD-ROM), or loopback block devices. Only defined for block devices, i.e. those of
subsystem <literal>block</literal>.</para>
+
+ <para><function>sd_device_get_device_id()</function> returns the short string that identifies the device
+ record. When the device ID obtained by the function for a specified device record is passed to
+ <function>sd_device_new_from_device_id()</function>, a new instance of the same device record will be
+ gained. When a block or character device is specified, which has corresponding device node, this returns
+ <literal>b</literal> or <literal>c</literal>, respectively, followed by the device node major and minor
+ numbers separated with a colon. Example: <literal>b259:1</literal> or <literal>c10:121</literal>. Whan a
+ network interface device is specified, this returns <literal>n</literal> followed by the interface index,
+ which can be obtained by <function>sd_device_get_ifindex()</function>. Example: <literal>n1</literal>.
+ When a device in the <literal>driver</literal> subsystem is specified, this returns
+ <literal>+drivers:</literal> followed by its driver subsystem and sysfs name separated with a colon.
+ Example: <literal>+drivers:pci:iwlwifi</literal> for a driver device record whose driver subsystem is
+ <literal>pci</literal> and sysfs name is <literal>iwlwifi</literal>,
+ When an other type of device is specified, this function returns <literal>+</literal> followed by its
+ subsystem and sysfs name separated with a colon. Example: <literal>+acpi:ACPI0003:00</literal>,
+ <literal>+input:input16</literal>, or <literal>+pci:0000:00:1f.6</literal>.</para>
</refsect1>
<refsect1>
<function>sd_device_get_ifindex()</function>,
<function>sd_device_get_driver()</function>, and
<function>sd_device_get_diskseq()</function> were added in version 251.</para>
- <para><function>sd_device_get_driver_subsystem()</function> was added in version 257.</para>
+ <para><function>sd_device_get_driver_subsystem()</function> and
+ <function>sd_device_get_device_id()</function> were added in version 257.</para>
</refsect1>
<refsect1>
sd_varlink_take_fd;
sd_varlink_unref;
sd_varlink_wait;
+ sd_device_get_device_id;
sd_device_get_driver_subsystem;
sd_device_monitor_is_running;
sd_device_monitor_get_fd;
assert(device);
assert(tag);
- r = device_get_device_id(device, &id);
+ r = sd_device_get_device_id(device, &id);
if (r < 0)
return r;
assert(device);
assert(ret);
- r = device_get_device_id(device, &id);
+ r = sd_device_get_device_id(device, &id);
if (r < 0)
return r;
}
int device_get_sysattr_u32(sd_device *device, const char *sysattr, uint32_t *ret_value);
int device_get_sysattr_bool(sd_device *device, const char *sysattr);
-int device_get_device_id(sd_device *device, const char **ret);
int device_get_devlink_priority(sd_device *device, int *ret);
int device_get_devnode_mode(sd_device *device, mode_t *ret);
int device_get_devnode_uid(sd_device *device, uid_t *ret);
}
}
-int device_get_device_id(sd_device *device, const char **ret) {
- assert(device);
- assert(ret);
+_public_ int sd_device_get_device_id(sd_device *device, const char **ret) {
+ assert_return(device, -EINVAL);
if (!device->device_id) {
_cleanup_free_ char *id = NULL;
device->device_id = TAKE_PTR(id);
}
- *ret = device->device_id;
+ if (ret)
+ *ret = device->device_id;
return 0;
}
dev = sd_device_unref(dev);
/* The device ID depends on subsystem. */
- assert_se(device_get_device_id(d, &id) >= 0);
+ assert_se(sd_device_get_device_id(d, &id) >= 0);
r = sd_device_new_from_device_id(&dev, id);
if (r == -ENODEV && ifindex > 0)
log_device_warning_errno(d, r,
int sd_device_get_action(sd_device *device, sd_device_action_t *ret);
int sd_device_get_seqnum(sd_device *device, uint64_t *ret);
int sd_device_get_diskseq(sd_device *device, uint64_t *ret);
+int sd_device_get_device_id(sd_device *device, const char **ret);
int sd_device_get_is_initialized(sd_device *device);
int sd_device_get_usec_initialized(sd_device *device, uint64_t *ret);
if (r < 0 && r != -ENOENT)
return r;
- r = device_get_device_id(dev, &id);
+ r = sd_device_get_device_id(dev, &id);
if (r < 0 && r != -ENOENT)
return r;
if (!dir)
return -errno;
- r = device_get_device_id(dev, &id);
+ r = sd_device_get_device_id(dev, &id);
if (r < 0)
return r;
assert(dev);
assert(fd >= 0);
- r = device_get_device_id(dev, &id);
+ r = sd_device_get_device_id(dev, &id);
if (r < 0)
return r;
if (r < 0)
return r;
- r = device_get_device_id(dev, &id);
+ r = sd_device_get_device_id(dev, &id);
if (r < 0)
return r;
if (current_id) {
const char *id;
- r = device_get_device_id(dev, &id);
+ r = sd_device_get_device_id(dev, &id);
if (r < 0)
return log_device_debug_errno(dev, r, "Failed to get device id: %m");
assert(dev);
assert(dirfd >= 0);
- r = device_get_device_id(dev, &id);
+ r = sd_device_get_device_id(dev, &id);
if (r < 0)
return log_device_debug_errno(dev, r, "Failed to get device ID: %m");
if (r < 0)
return log_device_debug_errno(dev, r, "Failed to get device node: %m");
- r = device_get_device_id(dev, &id);
+ r = sd_device_get_device_id(dev, &id);
if (r < 0)
return log_device_debug_errno(dev, r, "Failed to get device ID: %m");