chiark / gitweb /
libudev: enumerate - add_device() -> add_syspath()
[elogind.git] / udev / lib / test-libudev.c
index 5e9897c715bf00b54589242e8c1a0a94fbc5fd08..5d19d5dd75b0110779a072085028d97ea183d914 100644 (file)
@@ -19,6 +19,7 @@
 
 #include <stdio.h>
 #include <stdarg.h>
+#include <stdlib.h>
 #include <unistd.h>
 #include <errno.h>
 #include <string.h>
@@ -72,23 +73,19 @@ static void print_device(struct udev_device *device)
                printf("devnum:    %u:%u\n", major(devnum), minor(devnum));
 
        count = 0;
-       list_entry = udev_device_get_devlinks_list_entry(device);
-       while (list_entry != NULL) {
+       udev_list_entry_foreach(list_entry, udev_device_get_devlinks_list_entry(device)) {
                printf("link:      '%s'\n", udev_list_entry_get_name(list_entry));
                count++;
-               list_entry = udev_list_entry_get_next(list_entry);
        }
        if (count > 0)
                printf("found %i links\n", count);
 
        count = 0;
-       list_entry = udev_device_get_properties_list_entry(device);
-       while (list_entry != NULL) {
+       udev_list_entry_foreach(list_entry, udev_device_get_properties_list_entry(device)) {
                printf("property:  '%s=%s'\n",
                       udev_list_entry_get_name(list_entry),
                       udev_list_entry_get_value(list_entry));
                count++;
-               list_entry = udev_list_entry_get_next(list_entry);
        }
        if (count > 0)
                printf("found %i properties\n", count);
@@ -168,10 +165,9 @@ static int test_enumerate_print_list(struct udev_enumerate *enumerate)
                device = udev_device_new_from_syspath(udev_enumerate_get_udev(enumerate),
                                                      udev_list_entry_get_name(list_entry));
                if (device != NULL) {
-                       printf("device:    '%s' (%s) '%s'\n",
+                       printf("device: '%s' (%s)\n",
                               udev_device_get_syspath(device),
-                              udev_device_get_subsystem(device),
-                              udev_device_get_sysname(device));
+                              udev_device_get_subsystem(device));
                        udev_device_unref(device);
                        count++;
                }
@@ -230,6 +226,49 @@ static int test_monitor(struct udev *udev, const char *socket_path)
        return 0;
 }
 
+static int test_queue(struct udev *udev)
+{
+       struct udev_queue *udev_queue;
+       unsigned long long int seqnum;
+       struct udev_list_entry *list_entry;
+
+       udev_queue = udev_queue_new(udev);
+       if (udev_queue == NULL)
+               return -1;
+       seqnum = udev_queue_get_kernel_seqnum(udev_queue);
+       printf("seqnum kernel: %llu\n", seqnum);
+       seqnum = udev_queue_get_udev_seqnum(udev_queue);
+       printf("seqnum udev  : %llu\n", seqnum);
+
+       if (udev_queue_get_queue_is_empty(udev_queue))
+               printf("queue is empty\n");
+       printf("get queue list\n");
+       udev_list_entry_foreach(list_entry, udev_queue_get_queued_list_entry(udev_queue))
+               printf("queued: '%s' [%s]\n", udev_list_entry_get_name(list_entry), udev_list_entry_get_value(list_entry));
+       printf("\n");
+       printf("get queue list again\n");
+       udev_list_entry_foreach(list_entry, udev_queue_get_queued_list_entry(udev_queue))
+               printf("queued: '%s' [%s]\n", udev_list_entry_get_name(list_entry), udev_list_entry_get_value(list_entry));
+       printf("\n");
+       printf("get failed list\n");
+       udev_list_entry_foreach(list_entry, udev_queue_get_failed_list_entry(udev_queue))
+               printf("failed: '%s'\n", udev_list_entry_get_name(list_entry));
+       printf("\n");
+
+       list_entry = udev_queue_get_queued_list_entry(udev_queue);
+       if (list_entry != NULL) {
+               printf("event [%llu] is queued\n", seqnum);
+               seqnum = strtoull(udev_list_entry_get_value(list_entry), NULL, 10);
+               if (udev_queue_get_seqnum_is_finished(udev_queue, seqnum))
+                       printf("event [%llu] is not finished\n", seqnum);
+               else
+                       printf("event [%llu] is finished\n", seqnum);
+       }
+       printf("\n");
+       udev_queue_unref(udev_queue);
+       return 0;
+}
+
 int main(int argc, char *argv[], char *envp[])
 {
        struct udev *udev = NULL;
@@ -323,7 +362,7 @@ int main(int argc, char *argv[], char *envp[])
        test_enumerate_print_list(udev_enumerate);
        udev_enumerate_unref(udev_enumerate);
 
-       printf("enumerate '!block'\n");
+       printf("enumerate 'not block'\n");
        udev_enumerate = udev_enumerate_new(udev);
        if (udev_enumerate == NULL)
                return -1;
@@ -351,6 +390,8 @@ int main(int argc, char *argv[], char *envp[])
        test_enumerate_print_list(udev_enumerate);
        udev_enumerate_unref(udev_enumerate);
 
+       test_queue(udev);
+
        test_monitor(udev, socket);
 out:
        udev_unref(udev);