Lines 896-901
Link Here
|
896 |
return result; |
896 |
return result; |
897 |
} |
897 |
} |
898 |
|
898 |
|
|
|
899 |
static char * |
900 |
truncate_at_linefeed (const char *value) |
901 |
{ |
902 |
const char *p; |
903 |
|
904 |
p = strchr (value, '\n'); |
905 |
if (!p) |
906 |
return NULL; |
907 |
return g_strndup (value, p - value); |
908 |
} |
909 |
|
899 |
/** |
910 |
/** |
900 |
* g_udev_device_get_sysfs_attr_as_boolean: |
911 |
* g_udev_device_get_sysfs_attr_as_boolean: |
901 |
* @device: A #GUdevDevice. |
912 |
* @device: A #GUdevDevice. |
Lines 903-909
Link Here
|
903 |
* |
914 |
* |
904 |
* Look up the sysfs attribute with @name on @device and convert it to an |
915 |
* Look up the sysfs attribute with @name on @device and convert it to an |
905 |
* boolean. This is done by doing a case-insensitive string comparison |
916 |
* boolean. This is done by doing a case-insensitive string comparison |
906 |
* on the string value against "1" and "true". The retrieved value is |
917 |
* on the string value against "1", "true", "Y" and "y". The retrieved value is |
907 |
* cached in the device. Repeated calls will return the same value and |
918 |
* cached in the device. Repeated calls will return the same value and |
908 |
* not open the attribute again, unless updated through one of the |
919 |
* not open the attribute again, unless updated through one of the |
909 |
* "uncached" functions. |
920 |
* "uncached" functions. |
Lines 916-933
Link Here
|
916 |
const gchar *name) |
927 |
const gchar *name) |
917 |
{ |
928 |
{ |
918 |
gboolean result; |
929 |
gboolean result; |
919 |
const gchar *s; |
930 |
const gchar *raw; |
|
|
931 |
g_autofree char *truncated = NULL; |
932 |
const char *s; |
920 |
|
933 |
|
921 |
g_return_val_if_fail (G_UDEV_IS_DEVICE (device), FALSE); |
934 |
g_return_val_if_fail (G_UDEV_IS_DEVICE (device), FALSE); |
922 |
g_return_val_if_fail (name != NULL, FALSE); |
935 |
g_return_val_if_fail (name != NULL, FALSE); |
923 |
|
936 |
|
924 |
result = FALSE; |
937 |
result = FALSE; |
925 |
s = g_udev_device_get_sysfs_attr (device, name); |
938 |
raw = g_udev_device_get_sysfs_attr (device, name); |
926 |
if (s == NULL) |
939 |
if (raw == NULL) |
927 |
goto out; |
940 |
goto out; |
928 |
|
941 |
|
929 |
if (strcmp (s, "1") == 0 || g_ascii_strcasecmp (s, "true") == 0) |
942 |
truncated = truncate_at_linefeed (raw); |
|
|
943 |
s = truncated ?: raw; |
944 |
if (strcmp (s, "1") == 0 || |
945 |
g_ascii_strcasecmp (s, "true") == 0 || |
946 |
g_ascii_strcasecmp (s, "y") == 0) { |
930 |
result = TRUE; |
947 |
result = TRUE; |
|
|
948 |
} |
949 |
|
931 |
out: |
950 |
out: |
932 |
return result; |
951 |
return result; |
933 |
} |
952 |
} |
Lines 1141-1147
Link Here
|
1141 |
* |
1160 |
* |
1142 |
* Look up the sysfs attribute with @name on @device and convert it to an |
1161 |
* Look up the sysfs attribute with @name on @device and convert it to an |
1143 |
* boolean. This is done by doing a case-insensitive string comparison |
1162 |
* boolean. This is done by doing a case-insensitive string comparison |
1144 |
* on the string value against "1" and "true". This function does |
1163 |
* on the string value against "1", "true", "Y" and "y". This function does |
1145 |
* blocking I/O, and updates the sysfs attributes cache. |
1164 |
* blocking I/O, and updates the sysfs attributes cache. |
1146 |
* |
1165 |
* |
1147 |
* Returns: The value of the sysfs attribute or %FALSE if there is no such |
1166 |
* Returns: The value of the sysfs attribute or %FALSE if there is no such |
Lines 1152-1169
Link Here
|
1152 |
const gchar *name) |
1171 |
const gchar *name) |
1153 |
{ |
1172 |
{ |
1154 |
gboolean result; |
1173 |
gboolean result; |
1155 |
const gchar *s; |
1174 |
const gchar *raw; |
|
|
1175 |
g_autofree char *truncated = NULL; |
1176 |
const char *s; |
1156 |
|
1177 |
|
1157 |
g_return_val_if_fail (G_UDEV_IS_DEVICE (device), FALSE); |
1178 |
g_return_val_if_fail (G_UDEV_IS_DEVICE (device), FALSE); |
1158 |
g_return_val_if_fail (name != NULL, FALSE); |
1179 |
g_return_val_if_fail (name != NULL, FALSE); |
1159 |
|
1180 |
|
1160 |
result = FALSE; |
1181 |
result = FALSE; |
1161 |
s = g_udev_device_get_sysfs_attr_uncached (device, name); |
1182 |
raw = g_udev_device_get_sysfs_attr_uncached (device, name); |
1162 |
if (s == NULL) |
1183 |
if (raw == NULL) |
1163 |
goto out; |
1184 |
goto out; |
1164 |
|
1185 |
|
1165 |
if (strcmp (s, "1") == 0 || g_ascii_strcasecmp (s, "true") == 0) |
1186 |
truncated = truncate_at_linefeed (raw); |
|
|
1187 |
s = truncated ?: raw; |
1188 |
if (strcmp (s, "1") == 0 || |
1189 |
g_ascii_strcasecmp (s, "true") == 0 || |
1190 |
g_ascii_strcasecmp (s, "y") == 0) { |
1166 |
result = TRUE; |
1191 |
result = TRUE; |
|
|
1192 |
} |
1193 |
|
1167 |
out: |
1194 |
out: |
1168 |
return result; |
1195 |
return result; |
1169 |
} |
1196 |
} |