udev-node.c   udev-node.c 
skipping to change at line 35 skipping to change at line 35
#include <errno.h> #include <errno.h>
#include <grp.h> #include <grp.h>
#include <dirent.h> #include <dirent.h>
#include <sys/time.h> #include <sys/time.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <sys/types.h> #include <sys/types.h>
#include "udev.h" #include "udev.h"
#include "smack-util.h" #include "smack-util.h"
static int node_symlink(struct udev_device *dev, const char *node, const ch static int node_symlink(struct udev_device *dev, const char *node, const ch
ar *slink) ar *slink) {
{
struct stat stats; struct stat stats;
char target[UTIL_PATH_SIZE]; char target[UTIL_PATH_SIZE];
char *s; char *s;
size_t l; size_t l;
char slink_tmp[UTIL_PATH_SIZE + 32]; char slink_tmp[UTIL_PATH_SIZE + 32];
int i = 0; int i = 0;
int tail = 0; int tail = 0;
int err = 0; int err = 0;
/* use relative link */ /* use relative link */
skipping to change at line 129 skipping to change at line 128
err = rename(slink_tmp, slink); err = rename(slink_tmp, slink);
if (err != 0) { if (err != 0) {
log_error("rename '%s' '%s' failed: %m", slink_tmp, slink); log_error("rename '%s' '%s' failed: %m", slink_tmp, slink);
unlink(slink_tmp); unlink(slink_tmp);
} }
exit: exit:
return err; return err;
} }
/* find device node of device with highest priority */ /* find device node of device with highest priority */
static const char *link_find_prioritized(struct udev_device *dev, bool add, static const char *link_find_prioritized(struct udev_device *dev, bool add,
const char *stackdir, char *buf, size_t bufsize) const char *stackdir, char *buf, size_t bufsize) {
{
struct udev *udev = udev_device_get_udev(dev); struct udev *udev = udev_device_get_udev(dev);
DIR *dir; DIR *dir;
int priority = 0; int priority = 0;
const char *target = NULL; const char *target = NULL;
if (add) { if (add) {
priority = udev_device_get_devlink_priority(dev); priority = udev_device_get_devlink_priority(dev);
strscpy(buf, bufsize, udev_device_get_devnode(dev)); strscpy(buf, bufsize, udev_device_get_devnode(dev));
target = buf; target = buf;
} }
skipping to change at line 183 skipping to change at line 181
} }
} }
udev_device_unref(dev_db); udev_device_unref(dev_db);
} }
} }
closedir(dir); closedir(dir);
return target; return target;
} }
/* manage "stack of names" with possibly specified device priorities */ /* manage "stack of names" with possibly specified device priorities */
static void link_update(struct udev_device *dev, const char *slink, bool ad static void link_update(struct udev_device *dev, const char *slink, bool ad
d) d) {
{
struct udev *udev = udev_device_get_udev(dev); struct udev *udev = udev_device_get_udev(dev);
char name_enc[UTIL_PATH_SIZE]; char name_enc[UTIL_PATH_SIZE];
char filename[UTIL_PATH_SIZE * 2]; char filename[UTIL_PATH_SIZE * 2];
char dirname[UTIL_PATH_SIZE]; char dirname[UTIL_PATH_SIZE];
const char *target; const char *target;
char buf[UTIL_PATH_SIZE]; char buf[UTIL_PATH_SIZE];
util_path_encode(slink + strlen("/dev"), name_enc, sizeof(name_enc) ); util_path_encode(slink + strlen("/dev"), name_enc, sizeof(name_enc) );
strscpyl(dirname, sizeof(dirname), "/run/udev/links/", name_enc, NU LL); strscpyl(dirname, sizeof(dirname), "/run/udev/links/", name_enc, NU LL);
strscpyl(filename, sizeof(filename), dirname, "/", udev_device_get_ id_filename(dev), NULL); strscpyl(filename, sizeof(filename), dirname, "/", udev_device_get_ id_filename(dev), NULL);
skipping to change at line 227 skipping to change at line 224
break; break;
fd = open(filename, O_WRONLY|O_CREAT|O_CLOEXEC|O_TR UNC|O_NOFOLLOW, 0444); fd = open(filename, O_WRONLY|O_CREAT|O_CLOEXEC|O_TR UNC|O_NOFOLLOW, 0444);
if (fd >= 0) if (fd >= 0)
close(fd); close(fd);
else else
err = -errno; err = -errno;
} while (err == -ENOENT); } while (err == -ENOENT);
} }
} }
void udev_node_update_old_links(struct udev_device *dev, struct udev_device void udev_node_update_old_links(struct udev_device *dev, struct udev_device
*dev_old) *dev_old) {
{
struct udev_list_entry *list_entry; struct udev_list_entry *list_entry;
/* update possible left-over symlinks */ /* update possible left-over symlinks */
udev_list_entry_foreach(list_entry, udev_device_get_devlinks_list_e ntry(dev_old)) { udev_list_entry_foreach(list_entry, udev_device_get_devlinks_list_e ntry(dev_old)) {
const char *name = udev_list_entry_get_name(list_entry); const char *name = udev_list_entry_get_name(list_entry);
struct udev_list_entry *list_entry_current; struct udev_list_entry *list_entry_current;
int found; int found;
/* check if old link name still belongs to this device */ /* check if old link name still belongs to this device */
found = 0; found = 0;
skipping to change at line 356 skipping to change at line 352
snprintf(filename, sizeof(filename), "/dev/%s/%u:%u", snprintf(filename, sizeof(filename), "/dev/%s/%u:%u",
streq(udev_device_get_subsystem(dev), "block") ? "block" : "char", streq(udev_device_get_subsystem(dev), "block") ? "block" : "char",
major(udev_device_get_devnum(dev)), minor(udev_device_get_ devnum(dev))); major(udev_device_get_devnum(dev)), minor(udev_device_get_ devnum(dev)));
node_symlink(dev, udev_device_get_devnode(dev), filename); node_symlink(dev, udev_device_get_devnode(dev), filename);
/* create/update symlinks, add symlinks to name index */ /* create/update symlinks, add symlinks to name index */
udev_list_entry_foreach(list_entry, udev_device_get_devlinks_list_e ntry(dev)) udev_list_entry_foreach(list_entry, udev_device_get_devlinks_list_e ntry(dev))
link_update(dev, udev_list_entry_get_name(list_entr y), true); link_update(dev, udev_list_entry_get_name(list_entr y), true);
} }
void udev_node_remove(struct udev_device *dev) void udev_node_remove(struct udev_device *dev) {
{
struct udev_list_entry *list_entry; struct udev_list_entry *list_entry;
char filename[UTIL_PATH_SIZE]; char filename[UTIL_PATH_SIZE];
/* remove/update symlinks, remove symlinks from name index */ /* remove/update symlinks, remove symlinks from name index */
udev_list_entry_foreach(list_entry, udev_device_get_devlinks_list_e ntry(dev)) udev_list_entry_foreach(list_entry, udev_device_get_devlinks_list_e ntry(dev))
link_update(dev, udev_list_entry_get_name(list_entry), fals e); link_update(dev, udev_list_entry_get_name(list_entry), fals e);
/* remove /dev/{block,char}/$major:$minor */ /* remove /dev/{block,char}/$major:$minor */
snprintf(filename, sizeof(filename), "/dev/%s/%u:%u", snprintf(filename, sizeof(filename), "/dev/%s/%u:%u",
streq(udev_device_get_subsystem(dev), "block") ? "block" : "char", streq(udev_device_get_subsystem(dev), "block") ? "block" : "char",
 End of changes. 5 change blocks. 
14 lines changed or deleted 9 lines changed or added

This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/