mirror of
https://github.com/systemd/systemd.git
synced 2024-12-23 21:35:11 +03:00
udevadm: print warning to stderr if udevadm is called by symlink
This commit is contained in:
parent
2b725651e5
commit
742f4cad0d
4
TODO
4
TODO
@ -3,7 +3,9 @@ These things would be nice to have:
|
||||
o rework rules to a match-action list, instead of a rules array
|
||||
|
||||
These things will change in future udev versions:
|
||||
o --device-id-of-file will print '5:8' instead of '5 8'
|
||||
|
||||
These things are deprecated and scheduled for removal in a future udev version:
|
||||
o DEVTYPE for disks is set by the kernel, remove it from the rules
|
||||
o "udevadm control" commands will only accept the --<command> syntax
|
||||
o symlink names to udevadm will no longer be resolved to old command names
|
||||
|
||||
|
@ -120,49 +120,52 @@ static const struct command cmds[] = {
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
const char *command;
|
||||
const char *command = argv[1];
|
||||
int i;
|
||||
const char *pos;
|
||||
const struct command *cmd;
|
||||
int rc;
|
||||
|
||||
/* get binary or symlink name */
|
||||
pos = strrchr(argv[0], '/');
|
||||
/* find command */
|
||||
if (command != NULL)
|
||||
for (i = 0; cmds[i].cmd != NULL; i++) {
|
||||
if (strcmp(cmds[i].name, command) == 0) {
|
||||
debug = cmds[i].debug;
|
||||
rc = cmds[i].cmd(argc-1, &argv[1]);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
/* try to find compat link, will be removed in a future release */
|
||||
command = argv[0];
|
||||
pos = strrchr(command, '/');
|
||||
if (pos != NULL)
|
||||
command = &pos[1];
|
||||
else
|
||||
command = argv[0];
|
||||
|
||||
/* the trailing part of the binary or symlink name is the command */
|
||||
/* the trailing part of the binary or link name is the command */
|
||||
if (strncmp(command, "udev", 4) == 0)
|
||||
command = &command[4];
|
||||
|
||||
if (command == NULL || command[0] == '\0')
|
||||
goto err_unknown;
|
||||
for (i = 0; cmds[i].cmd != NULL; i++) {
|
||||
if (strcmp(cmds[i].name, command) == 0) {
|
||||
char path[128];
|
||||
char prog[512];
|
||||
ssize_t len;
|
||||
|
||||
/* udevadm itself needs to strip its name from the passed options */
|
||||
if (strcmp(command, "adm") == 0) {
|
||||
command = argv[1];
|
||||
argv++;
|
||||
argc--;
|
||||
}
|
||||
|
||||
if (command == NULL)
|
||||
goto err_unknown;
|
||||
|
||||
/* allow command to be specified as an option */
|
||||
if (strncmp(command, "--", 2) == 0)
|
||||
command += 2;
|
||||
|
||||
/* find and execute command */
|
||||
for (cmd = cmds; cmd->name != NULL; cmd++) {
|
||||
if (strcmp(cmd->name, command) == 0) {
|
||||
debug = cmd->debug;
|
||||
rc = cmd->cmd(argc, argv);
|
||||
snprintf(path, sizeof(path), "/proc/%lu/exe", (unsigned long) getppid());
|
||||
len = readlink(path, prog, sizeof(prog));
|
||||
if (len > 0) {
|
||||
prog[len] = '\0';
|
||||
fprintf(stderr, "the program '%s' called '%s', it should use 'udevadm %s <options>', "
|
||||
"this will stop working in a future release\n", prog, argv[0], command);
|
||||
info("the program '%s' called '%s', it should use 'udevadm %s <options>', "
|
||||
"this will stop working in a future release\n", prog, argv[0], command);
|
||||
}
|
||||
debug = cmds[i].debug;
|
||||
rc = cmds[i].cmd(argc, argv);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
err_unknown:
|
||||
fprintf(stderr, "unknown command, try help\n\n");
|
||||
rc = 2;
|
||||
out:
|
||||
|
Loading…
Reference in New Issue
Block a user