#include "device-nodes.h"
#include "path-util.h"
+#include "stat-util.h"
#include "stdio-util.h"
#include "string-util.h"
#include "utf8.h"
int devnode_same(const char *a, const char *b) {
struct stat sa, sb;
+ int r;
assert(a);
assert(b);
if (stat(a, &sa) < 0)
return -errno;
+ r = stat_verify_device_node(&sa);
+ if (r < 0)
+ return r;
+
if (stat(b, &sb) < 0)
return -errno;
-
- if (!S_ISBLK(sa.st_mode) && !S_ISCHR(sa.st_mode))
- return -ENODEV;
- if (!S_ISBLK(sb.st_mode) && !S_ISCHR(sb.st_mode))
- return -ENODEV;
+ r = stat_verify_device_node(&sb);
+ if (r < 0)
+ return r;
if (((sa.st_mode ^ sb.st_mode) & S_IFMT) != 0) /* both inode same device node type? */
return false;
#include "nulstr-util.h"
#include "parse-util.h"
#include "path-util.h"
+#include "stat-util.h"
#include "string-util.h"
#define PASS_JUMP_OFF 4096
return log_warning_errno(errno, "Couldn't stat device %s: %m", node);
}
- if (!S_ISCHR(st.st_mode) && !S_ISBLK(st.st_mode))
- return log_warning_errno(SYNTHETIC_ERRNO(ENODEV), "%s is not a device.", node);
+ r = stat_verify_device_node(&st);
+ if (r < 0)
+ return log_warning_errno(r, "'%s' is not a device node.", node);
mode = st.st_mode;
rdev = (dev_t) st.st_rdev;
log_debug_errno(errno, "Device node %s does not exist, ignoring.", from);
return 0;
}
- if (!S_ISCHR(st.st_mode) && !S_ISBLK(st.st_mode))
- return log_error_errno(SYNTHETIC_ERRNO(ESTALE), "%s is not a device node.", from);
+ r = stat_verify_device_node(&st);
+ if (r < 0)
+ return log_error_errno(r, "'%s' is not a device node.", from);
/* Create the parent directory of the device node. Here, we assume that the path has at most one
* subdirectory under /dev/, e.g. /dev/net/tun. */