From: kay.sievers@vrfy.org Date: Sat, 16 Oct 2004 02:45:56 +0000 (-0700) Subject: [PATCH] swich attribute open() to simple stat() X-Git-Tag: 039~4 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=1946fec4deba1ea5505c286ef2dd4ff2c6863b1c [PATCH] swich attribute open() to simple stat() Here we switch to a simple stat() to recognize the file creation. This will make it possible to wait for files, which are unreadable. I've switched the timout back to 5 seconds cause the our /class/vc errors seems like a bug in the vc layer not a sysfs delay. --- diff --git a/wait_for_sysfs.c b/wait_for_sysfs.c index 25a3fb4ee..72368efac 100644 --- a/wait_for_sysfs.c +++ b/wait_for_sysfs.c @@ -47,7 +47,7 @@ void log_message(int level, const char *format, ...) } #endif -#define WAIT_MAX_SECONDS 10 +#define WAIT_MAX_SECONDS 5 #define WAIT_LOOP_PER_SECOND 20 /* wait for specific file to show up, normally the "dev"-file */ @@ -60,7 +60,7 @@ static int wait_for_class_device_attributes(struct sysfs_class_device *class_dev { .subsystem = "net", .file = "ifindex" }, { .subsystem = "scsi_host", .file = "unique_id" }, { .subsystem = "scsi_device", .file = NULL }, - { .subsystem = "pcmcia_socket", .file = NULL }, /* all files are unreadable in empty slot :( */ + { .subsystem = "pcmcia_socket", .file = "card_type" }, { .subsystem = "usb_host", .file = NULL }, { .subsystem = "bluetooth", .file = "address" }, { .subsystem = "firmware", .file = "data" }, @@ -86,11 +86,14 @@ static int wait_for_class_device_attributes(struct sysfs_class_device *class_dev break; } } - dbg("looking at class '%s' for specific file '%s'", class_dev->classname, file); + + dbg("looking at class '%s' for specific file '%s'", class_dev->classname, class_dev->path); loop = WAIT_MAX_SECONDS * WAIT_LOOP_PER_SECOND; while (--loop) { - if (sysfs_get_classdev_attr(class_dev, file) != NULL) { + struct stat stats; + + if (stat(class_dev->path, &stats) == 0) { dbg("class '%s' specific file '%s' found", class_dev->classname, file); return 0; }