chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fake also kernel-name if we renamed a netif
[elogind.git]
/
udevinitsend.c
diff --git
a/udevinitsend.c
b/udevinitsend.c
index 05c39b99b3c15356c1ffe9714a06fea5d3439b0d..26ae5c84185b5a18c74793909427d5229961a624 100644
(file)
--- a/
udevinitsend.c
+++ b/
udevinitsend.c
@@
-23,6
+23,7
@@
#include <stdio.h>
#include <stddef.h>
#include <stdio.h>
#include <stdio.h>
#include <stddef.h>
#include <stdio.h>
+#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
@@
-38,16
+39,21
@@
#include "udev.h"
#include "udev_version.h"
#include "udevd.h"
#include "udev.h"
#include "udev_version.h"
#include "udevd.h"
+#include "udev_utils.h"
#include "logging.h"
#include "logging.h"
+static int log = 0;
#ifdef USE_LOG
#ifdef USE_LOG
-void log_message (int
level
, const char *format, ...)
+void log_message (int
priority
, const char *format, ...)
{
va_list args;
{
va_list args;
+ if (priority > log)
+ return;
+
va_start(args, format);
va_start(args, format);
- vsyslog(
level
, format, args);
+ vsyslog(
priority
, format, args);
va_end(args);
}
#endif
va_end(args);
}
#endif
@@
-58,17
+64,18
@@
void log_message (int level, const char *format, ...)
* Scan a file, write all variables into the msgbuf and
* fires the message to udevd.
*/
* Scan a file, write all variables into the msgbuf and
* fires the message to udevd.
*/
-static int udevsend(char *filename, int sock, int
ignore_loops
)
+static int udevsend(char *filename, int sock, int
disable_loop_detection
)
{
{
+ static struct udevd_msg usend_msg;
+ int usend_msg_len;
+ int bufpos = 0;
struct stat statbuf;
struct stat statbuf;
- int fd
, bufpos
;
+ int fd;
char *fdmap, *ls, *le, *ch;
char *fdmap, *ls, *le, *ch;
- struct udevd_msg usend_msg;
- int retval = 0;
- int usend_msg_len;
struct sockaddr_un saddr;
socklen_t addrlen;
struct sockaddr_un saddr;
socklen_t addrlen;
-
+ int retval = 0;
+
if (stat(filename,&statbuf) < 0) {
dbg("cannot stat %s: %s\n", filename, strerror(errno));
return 1;
if (stat(filename,&statbuf) < 0) {
dbg("cannot stat %s: %s\n", filename, strerror(errno));
return 1;
@@
-91,24
+98,23
@@
static int udevsend(char *filename, int sock, int ignore_loops)
strcpy(&saddr.sun_path[1], UDEVD_SOCK_PATH);
addrlen = offsetof(struct sockaddr_un, sun_path) + strlen(saddr.sun_path+1) + 1;
strcpy(&saddr.sun_path[1], UDEVD_SOCK_PATH);
addrlen = offsetof(struct sockaddr_un, sun_path) + strlen(saddr.sun_path+1) + 1;
- memset(usend_msg.envbuf, 0, UEVENT_BUFFER_SIZE+256);
- bufpos = 0;
memset(&usend_msg, 0x00, sizeof(struct udevd_msg));
strcpy(usend_msg.magic, UDEV_MAGIC);
memset(&usend_msg, 0x00, sizeof(struct udevd_msg));
strcpy(usend_msg.magic, UDEV_MAGIC);
+ usend_msg.type = UDEVD_UEVENT_INITSEND;
ls = fdmap;
ch = le = ls;
while (*ch && ch < fdmap + statbuf.st_size) {
ls = fdmap;
ch = le = ls;
while (*ch && ch < fdmap + statbuf.st_size) {
- le = strchr(ch,'\n');
+ le = strchr(ch,
'\n');
if (!le)
break;
if (!le)
break;
- ch = strchr(ch,'=');
+ ch = strchr(ch,
'=');
if (!ch)
break;
/* prevent loops in the scripts we execute */
if (strncmp(ls, "UDEVD_EVENT=", 12) == 0) {
if (!ch)
break;
/* prevent loops in the scripts we execute */
if (strncmp(ls, "UDEVD_EVENT=", 12) == 0) {
- if (!
ignore_loops
) {
+ if (!
disable_loop_detection
) {
dbg("event already handled by udev\n");
retval = -1;
break;
dbg("event already handled by udev\n");
retval = -1;
break;
@@
-161,8
+167,14
@@
int main(int argc, char *argv[], char *envp[])
char *event_file = NULL;
DIR *dirstream;
struct dirent *direntry;
char *event_file = NULL;
DIR *dirstream;
struct dirent *direntry;
- int retval = 1, ignore_loops = 0;
+ int retval = 1;
+ int disable_loop_detection = 0;
int sock;
int sock;
+ const char *env;
+
+ env = getenv("UDEV_LOG");
+ if (env)
+ log = log_priority(env);
logging_init("udevinitsend");
dbg("version %s", UDEV_VERSION);
logging_init("udevinitsend");
dbg("version %s", UDEV_VERSION);
@@
-186,14
+198,10
@@
int main(int argc, char *argv[], char *envp[])
break;
case 'l':
break;
case 'l':
- dbg("
ignoring loops
\n");
-
ignore_loops
= 1;
+ dbg("
disable loop detection, ignore UDEVD_EVENT
\n");
+
disable_loop_detection
= 1;
break;
break;
- case 'V':
- printf("udevinitsend, version 0.1\n");
- return 0;
-
case 'h':
retval = 0;
}
case 'h':
retval = 0;
}
@@
-217,11
+225,11
@@
int main(int argc, char *argv[], char *envp[])
if (!strcmp(direntry->d_name,".") ||
!strcmp(direntry->d_name,".."))
continue;
if (!strcmp(direntry->d_name,".") ||
!strcmp(direntry->d_name,".."))
continue;
- retval = udevsend(direntry->d_name, sock,
ignore_loops
);
+ retval = udevsend(direntry->d_name, sock,
disable_loop_detection
);
}
closedir(dirstream);
} else if (event_file) {
}
closedir(dirstream);
} else if (event_file) {
- retval = udevsend(event_file, sock,
ignore_loops
);
+ retval = udevsend(event_file, sock,
disable_loop_detection
);
}
if (sock != -1)
}
if (sock != -1)