libudev-queue.c revision f503f6b22fa54d1a65156a51d8b3311190c73ae5
/*
* libudev - interface to udev device information
*
* Copyright (C) 2008 Kay Sievers <kay.sievers@vrfy.org>
* Copyright (C) 2009 Alan Jenkins <alan-jenkins@tuffmail.co.uk>
*
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*/
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <dirent.h>
#include <fcntl.h>
#include <limits.h>
#include "libudev.h"
#include "libudev-private.h"
struct udev_queue {
int refcount;
struct udev_list_node queue_list;
struct udev_list_node failed_list;
};
{
struct udev_queue *udev_queue;
return NULL;
if (udev_queue == NULL)
return NULL;
return udev_queue;
}
{
if (udev_queue == NULL)
return NULL;
udev_queue->refcount++;
return udev_queue;
}
{
if (udev_queue == NULL)
return;
udev_queue->refcount--;
if (udev_queue->refcount > 0)
return;
}
{
if (udev_queue == NULL)
return NULL;
return udev_queue->udev;
}
{
char filename[UTIL_PATH_SIZE];
unsigned long long int seqnum;
int fd;
char buf[32];
if (fd < 0)
return 0;
if (len <= 2)
return 0;
return seqnum;
}
{
unsigned long long int seqnum;
if (udev_queue == NULL)
return -EINVAL;
return seqnum;
}
{
return -1;
return 0;
}
{
unsigned short int len;
/* use fread to skip, fseek might drop buffered data */
return len;
}
return -1;
}
{
unsigned short int read_bytes = 0;
unsigned short int len;
return -1;
return -1;
/* if devpath was too long, skip unread characters */
if (read_bytes != len) {
char buf[skip_bytes];
return -1;
}
return read_bytes;
}
{
char filename[UTIL_PATH_SIZE];
util_strscpyl(filename, sizeof(filename), udev_get_dev_path(udev_queue->udev), "/.udev/queue.bin", NULL);
if (queue_file == NULL)
return NULL;
return NULL;
}
return queue_file;
}
{
unsigned long long int seqnum_udev;
if (queue_file == NULL)
return 0;
while (1) {
unsigned long long int seqnum;
break;
if (devpath_len < 0)
break;
if (devpath_len > 0)
}
return seqnum_udev;
}
{
unsigned long long int seqnum_start;
if (queue_file == NULL)
return 0;
return 1;
}
{
unsigned long long int seqnum_kernel;
unsigned long long int seqnum_udev = 0;
int queued = 0;
int is_empty = 0;
if (udev_queue == NULL)
return -EINVAL;
if (queue_file == NULL)
return 1;
while (1) {
unsigned long long int seqnum;
break;
if (devpath_len < 0)
break;
if (devpath_len > 0) {
queued++;
} else {
queued--;
}
}
if (queued > 0) {
goto out;
}
if (seqnum_udev < seqnum_kernel) {
goto out;
}
is_empty = 1;
out:
return is_empty;
}
{
unsigned long long int seqnum = 0;
int unfinished;
if (udev_queue == NULL)
return -EINVAL;
if (queue_file == NULL)
return 1;
return 1;
return -EOVERFLOW;
while (unfinished > 0) {
break;
if (devpath_len < 0)
break;
if (devpath_len == 0) {
unfinished--;
}
}
return (unfinished == 0);
}
{
return 0;
return 1;
}
{
unsigned long long int seqnum;
if (udev_queue == NULL)
return NULL;
if (queue_file == NULL)
return NULL;
while (1) {
char syspath[UTIL_PATH_SIZE];
char *s;
size_t l;
char seqnum_str[32];
struct udev_list_entry *list_entry;
break;
s = syspath;
if (len < 0)
break;
if (len > 0) {
} else {
break;
}
}
}
}
}
{
char path[UTIL_PATH_SIZE];
if (udev_queue == NULL)
return NULL;
return NULL;
char filename[UTIL_PATH_SIZE];
char syspath[UTIL_PATH_SIZE];
char *s;
size_t l;
continue;
s = syspath;
continue;
s[len] = '\0';
continue;
}
}