1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197
|
// Copyright 2014 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "device/udev_linux/udev.h"
#include <stddef.h>
#include "base/strings/string_util.h"
#include "device/udev_linux/udev_loader.h"
namespace device {
namespace {
std::string StringOrEmptyIfNull(const char* value) {
return value ? value : std::string();
}
} // namespace
const char* udev_device_get_action(udev_device* udev_device) {
return UdevLoader::Get()->udev_device_get_action(udev_device);
}
const char* udev_device_get_devnode(udev_device* udev_device) {
return UdevLoader::Get()->udev_device_get_devnode(udev_device);
}
const char* udev_device_get_devtype(udev_device* udev_device) {
return UdevLoader::Get()->udev_device_get_devtype(udev_device);
}
udev_device* udev_device_get_parent(udev_device* udev_device) {
return UdevLoader::Get()->udev_device_get_parent(udev_device);
}
udev_device* udev_device_get_parent_with_subsystem_devtype(
udev_device* udev_device,
const char* subsystem,
const char* devtype) {
return UdevLoader::Get()->udev_device_get_parent_with_subsystem_devtype(
udev_device, subsystem, devtype);
}
udev_list_entry* udev_device_get_properties_list_entry(
struct udev_device* udev_device) {
return UdevLoader::Get()->udev_device_get_properties_list_entry(udev_device);
}
const char* udev_device_get_property_value(udev_device* udev_device,
const char* key) {
return UdevLoader::Get()->udev_device_get_property_value(udev_device, key);
}
const char* udev_device_get_subsystem(udev_device* udev_device) {
return UdevLoader::Get()->udev_device_get_subsystem(udev_device);
}
const char* udev_device_get_sysattr_value(udev_device* udev_device,
const char* sysattr) {
return UdevLoader::Get()->udev_device_get_sysattr_value(udev_device, sysattr);
}
const char* udev_device_get_sysname(udev_device* udev_device) {
return UdevLoader::Get()->udev_device_get_sysname(udev_device);
}
const char* udev_device_get_syspath(udev_device* udev_device) {
return UdevLoader::Get()->udev_device_get_syspath(udev_device);
}
udev_device* udev_device_new_from_devnum(udev* udev, char type, dev_t devnum) {
return UdevLoader::Get()->udev_device_new_from_devnum(udev, type, devnum);
}
udev_device* udev_device_new_from_subsystem_sysname(
udev* udev,
const char* subsystem,
const char* sysname) {
return UdevLoader::Get()->udev_device_new_from_subsystem_sysname(
udev, subsystem, sysname);
}
udev_device* udev_device_new_from_syspath(udev* udev, const char* syspath) {
return UdevLoader::Get()->udev_device_new_from_syspath(udev, syspath);
}
void udev_device_unref(udev_device* udev_device) {
UdevLoader::Get()->udev_device_unref(udev_device);
}
int udev_enumerate_add_match_subsystem(udev_enumerate* udev_enumerate,
const char* subsystem) {
return UdevLoader::Get()->udev_enumerate_add_match_subsystem(udev_enumerate,
subsystem);
}
udev_list_entry* udev_enumerate_get_list_entry(udev_enumerate* udev_enumerate) {
return UdevLoader::Get()->udev_enumerate_get_list_entry(udev_enumerate);
}
udev_enumerate* udev_enumerate_new(udev* udev) {
return UdevLoader::Get()->udev_enumerate_new(udev);
}
int udev_enumerate_scan_devices(udev_enumerate* udev_enumerate) {
return UdevLoader::Get()->udev_enumerate_scan_devices(udev_enumerate);
}
void udev_enumerate_unref(udev_enumerate* udev_enumerate) {
UdevLoader::Get()->udev_enumerate_unref(udev_enumerate);
}
udev_list_entry* udev_list_entry_get_next(udev_list_entry* list_entry) {
return UdevLoader::Get()->udev_list_entry_get_next(list_entry);
}
const char* udev_list_entry_get_name(udev_list_entry* list_entry) {
return UdevLoader::Get()->udev_list_entry_get_name(list_entry);
}
int udev_monitor_enable_receiving(udev_monitor* udev_monitor) {
return UdevLoader::Get()->udev_monitor_enable_receiving(udev_monitor);
}
int udev_monitor_filter_add_match_subsystem_devtype(udev_monitor* udev_monitor,
const char* subsystem,
const char* devtype) {
return UdevLoader::Get()->udev_monitor_filter_add_match_subsystem_devtype(
udev_monitor, subsystem, devtype);
}
int udev_monitor_get_fd(udev_monitor* udev_monitor) {
return UdevLoader::Get()->udev_monitor_get_fd(udev_monitor);
}
udev_monitor* udev_monitor_new_from_netlink(udev* udev, const char* name) {
return UdevLoader::Get()->udev_monitor_new_from_netlink(udev, name);
}
udev_device* udev_monitor_receive_device(udev_monitor* udev_monitor) {
return UdevLoader::Get()->udev_monitor_receive_device(udev_monitor);
}
void udev_monitor_unref(udev_monitor* udev_monitor) {
UdevLoader::Get()->udev_monitor_unref(udev_monitor);
}
udev* udev_new() {
return UdevLoader::Get()->udev_new();
}
void udev_unref(udev* udev) {
UdevLoader::Get()->udev_unref(udev);
}
std::string UdevDeviceGetPropertyValue(udev_device* udev_device,
const char* key) {
return StringOrEmptyIfNull(udev_device_get_property_value(udev_device, key));
}
std::string UdevDeviceGetSysattrValue(udev_device* udev_device,
const char* key) {
return StringOrEmptyIfNull(udev_device_get_sysattr_value(udev_device, key));
}
std::string UdevDeviceRecursiveGetSysattrValue(udev_device* udev_device,
const char* key) {
while (udev_device) {
const char* result = udev_device_get_sysattr_value(udev_device, key);
if (result) {
return result;
}
udev_device = udev_device_get_parent(udev_device);
}
return "";
}
std::string UdevDecodeString(const std::string& encoded) {
std::string decoded;
const size_t size = encoded.size();
for (size_t i = 0; i < size; ++i) {
char c = encoded[i];
if ((i + 3 < size) && c == '\\' && encoded[i + 1] == 'x') {
c = (base::HexDigitToInt(encoded[i + 2]) << 4) +
base::HexDigitToInt(encoded[i + 3]);
i += 3;
}
decoded.push_back(c);
}
return decoded;
}
} // namespace device
|