]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - tools/iio/iio_event_monitor.c
tools:iio:iio_utils: add error handling
[karo-tx-linux.git] / tools / iio / iio_event_monitor.c
index 427c271ac0d655988a54c30f475572927592916b..1316527f3c3c8fc799ef400ee116bbbbf5894f00 100644 (file)
@@ -265,21 +265,28 @@ int main(int argc, char **argv)
                /* If we can't find a IIO device by name assume device_name is a
                   IIO chrdev */
                chrdev_name = strdup(device_name);
+               if (!chrdev_name)
+                       return -ENOMEM;
        }
 
        fd = open(chrdev_name, 0);
        if (fd == -1) {
-               fprintf(stdout, "Failed to open %s\n", chrdev_name);
                ret = -errno;
+               fprintf(stdout, "Failed to open %s\n", chrdev_name);
                goto error_free_chrdev_name;
        }
 
        ret = ioctl(fd, IIO_GET_EVENT_FD_IOCTL, &event_fd);
-
-       close(fd);
-
        if (ret == -1 || event_fd == -1) {
+               ret = -errno;
                fprintf(stdout, "Failed to retrieve event fd\n");
+               if (close(fd) == -1)
+                       perror("Failed to close character device file");
+
+               goto error_free_chrdev_name;
+       }
+
+       if (close(fd) == -1)  {
                ret = -errno;
                goto error_free_chrdev_name;
        }
@@ -291,8 +298,8 @@ int main(int argc, char **argv)
                                printf("nothing available\n");
                                continue;
                        } else {
-                               perror("Failed to read event from device");
                                ret = -errno;
+                               perror("Failed to read event from device");
                                break;
                        }
                }
@@ -300,7 +307,9 @@ int main(int argc, char **argv)
                print_event(&event);
        }
 
-       close(event_fd);
+       if (close(event_fd) == -1)
+               perror("Failed to close event file");
+
 error_free_chrdev_name:
        free(chrdev_name);
 error_ret: