-#include "logging.h"
-#include "udev_utils.h"
-#include "list.h"
-
-
-int udev_init_device(struct udevice *udev, const char* devpath, const char *subsystem)
-{
- char *pos;
-
- memset(udev, 0x00, sizeof(struct udevice));
-
- if (devpath) {
- strfieldcpy(udev->devpath, devpath);
- no_trailing_slash(udev->devpath);
- }
- if (subsystem)
- strfieldcpy(udev->subsystem, subsystem);
-
- if (strcmp(udev->subsystem, "block") == 0)
- udev->type = BLOCK;
- else if (strcmp(udev->subsystem, "net") == 0)
- udev->type = NET;
- else if (strncmp(udev->devpath, "/block/", 7) == 0)
- udev->type = BLOCK;
- else if (strncmp(udev->devpath, "/class/net/", 11) == 0)
- udev->type = NET;
- else if (strncmp(udev->devpath, "/class/", 7) == 0)
- udev->type = CLASS;
- else if (strncmp(udev->devpath, "/devices/", 9) == 0)
- udev->type = PHYSDEV;
-
- udev->mode = 0660;
- strcpy(udev->owner, "root");
- strcpy(udev->group, "root");
-
- /* get kernel name */
- pos = strrchr(udev->devpath, '/');
- if (pos == NULL)
- return -1;
- strfieldcpy(udev->kernel_name, &pos[1]);
-
- /* get kernel number */
- pos = &udev->kernel_name[strlen(udev->kernel_name)];
- while (isdigit(pos[-1]))
- pos--;
- strfieldcpy(udev->kernel_number, pos);
- dbg("kernel_number='%s'", udev->kernel_number);
-
- /* Some block devices have '!' in their name, change that to '/' */
- pos = udev->kernel_name;
- while (pos[0] != '\0') {
- if (pos[0] == '!')
- pos[0] = '/';
- pos++;
- }
-
- dbg("kernel_name='%s'", udev->kernel_name);
- return 0;
-}
-
-int kernel_release_satisfactory(unsigned int version, unsigned int patchlevel, unsigned int sublevel)
-{
- static unsigned int kversion = 0;
- static unsigned int kpatchlevel;
- static unsigned int ksublevel;
-
- if (kversion == 0) {
- struct utsname uts;
- if (uname(&uts) != 0)
- return -1;
-
- if (sscanf (uts.release, "%u.%u.%u", &kversion, &kpatchlevel, &ksublevel) != 3) {
- kversion = 0;
- return -1;
- }
- }
-
- if (kversion >= version && kpatchlevel >= patchlevel && ksublevel >= sublevel)
- return 1;
- else
- return 0;
-}
-
-int create_path(const char *path)
-{
- char p[NAME_SIZE];
- char *pos;
- struct stat stats;
-
- strcpy (p, path);
- pos = strrchr(p, '/');
- if (pos == p || pos == NULL)
- return 0;
-
- while (pos[-1] == '/')
- pos--;
-
- pos[0] = '\0';
-
- dbg("stat '%s'\n", p);
- if (stat (p, &stats) == 0 && (stats.st_mode & S_IFMT) == S_IFDIR)
- return 0;