ecore-drm: add safety checks to all EAPI functions
authorMike Blumenkrantz <zmike@osg.samsung.com>
Fri, 24 Apr 2015 16:51:34 +0000 (12:51 -0400)
committerMike Blumenkrantz <zmike@osg.samsung.com>
Fri, 24 Apr 2015 16:53:01 +0000 (12:53 -0400)
src/lib/ecore_drm/ecore_drm_device.c
src/lib/ecore_drm/ecore_drm_evdev.c
src/lib/ecore_drm/ecore_drm_fb.c
src/lib/ecore_drm/ecore_drm_inputs.c
src/lib/ecore_drm/ecore_drm_launcher.c
src/lib/ecore_drm/ecore_drm_output.c
src/lib/ecore_drm/ecore_drm_sprites.c
src/lib/ecore_drm/ecore_drm_tty.c

index f0908e2714f2ef26e05342861ba712896b6976b3..9919486cc6209f4ed3371938a52215c3edf53ce8 100644 (file)
@@ -334,7 +334,7 @@ EAPI Eina_Bool
 ecore_drm_device_close(Ecore_Drm_Device *dev)
 {
    /* check for valid device */
-   if (!dev) return EINA_FALSE;
+   EINA_SAFETY_ON_NULL_RETURN_VAL(dev, EINA_FALSE);
 
    /* delete udev watch */
    if (dev->watch) eeze_udev_watch_del(dev->watch);
@@ -404,7 +404,7 @@ ecore_drm_device_master_drop(Ecore_Drm_Device *dev)
 EAPI int 
 ecore_drm_device_fd_get(Ecore_Drm_Device *dev)
 {
-   if (!dev) return -1;
+   EINA_SAFETY_ON_NULL_RETURN_VAL(dev, -1);
    return dev->drm.fd;
 }
 
@@ -412,7 +412,7 @@ EAPI void
 ecore_drm_device_window_set(Ecore_Drm_Device *dev, unsigned int window)
 {
    /* check for valid device */
-   if ((!dev) || (dev->drm.fd < 0)) return;
+   EINA_SAFETY_ON_TRUE_RETURN((!dev) || (dev->drm.fd < 0));
 
    dev->window = window;
 }
@@ -421,7 +421,7 @@ EAPI const char *
 ecore_drm_device_name_get(Ecore_Drm_Device *dev)
 {
    /* check for valid device */
-   if ((!dev) || (dev->drm.fd < 0)) return NULL;
+   EINA_SAFETY_ON_TRUE_RETURN_VAL((!dev) || (dev->drm.fd < 0), NULL);
 
    return dev->drm.name;
 }
@@ -437,7 +437,7 @@ ecore_drm_device_pointer_xy_get(Ecore_Drm_Device *dev, int *x, int *y)
    if (y) *y = 0;
 
    /* check for valid device */
-   if ((!dev) || (dev->drm.fd < 0)) return;
+   EINA_SAFETY_ON_TRUE_RETURN((!dev) || (dev->drm.fd < 0));
 
    EINA_LIST_FOREACH(dev->seats, l, seat)
      {
@@ -508,6 +508,7 @@ ecore_drm_device_output_find(Ecore_Drm_Device *dev, int x, int y)
    Eina_List *l;
 
    EINA_SAFETY_ON_NULL_RETURN_VAL(dev, NULL);
+   EINA_SAFETY_ON_TRUE_RETURN_VAL((x < 0) || (y < 0), NULL);
 
    EINA_LIST_FOREACH(dev->outputs, l, output)
      {
index 04275fdb70ecda9e8a6c788eb13c8c30cc8409b7..f56e372453756b3700ec5742973f44f06b1695e3 100644 (file)
@@ -879,7 +879,8 @@ ecore_drm_inputs_device_axis_size_set(Ecore_Drm_Evdev *edev, int w, int h)
    const char *vals;
    enum libinput_config_status status;
 
-   if ((w == 0) || (h == 0)) return;
+   EINA_SAFETY_ON_NULL_RETURN(edev);
+   EINA_SAFETY_ON_TRUE_RETURN((w == 0) || (h == 0));
 
    if ((!libinput_device_config_calibration_has_matrix(edev->device)) || 
        (libinput_device_config_calibration_get_default_matrix(edev->device, cal) != 0))
index a3e3b37f859a147792934db9fe58a278f315aeaa..982f962f7ccb372eb31c8a668f5c83911d9cabdc 100644 (file)
@@ -55,6 +55,8 @@ ecore_drm_fb_create(Ecore_Drm_Device *dev, int width, int height)
    struct drm_mode_destroy_dumb darg;
    struct drm_mode_map_dumb marg;
 
+   EINA_SAFETY_ON_NULL_RETURN_VAL(dev, NULL);
+   EINA_SAFETY_ON_TRUE_RETURN_VAL((width < 1) || (height < 1), NULL);
    if (!(fb = calloc(1, sizeof(Ecore_Drm_Fb)))) return NULL;
 
    memset(&carg, 0, sizeof(struct drm_mode_create_dumb));
@@ -139,6 +141,8 @@ EAPI void
 ecore_drm_fb_dirty(Ecore_Drm_Fb *fb, Eina_Rectangle *rects, unsigned int count)
 {
    EINA_SAFETY_ON_NULL_RETURN(fb);
+   EINA_SAFETY_ON_NULL_RETURN(rects);
+   EINA_SAFETY_ON_TRUE_RETURN(!count);
 
 #ifdef DRM_MODE_FEATURE_DIRTYFB
    drmModeClip *clip;
index bfd237cc2bbb0f54a19ab05b65a4013111803b93..1b517b616f1bb0160a9bb306f2752c2fa8d101e6 100644 (file)
@@ -292,6 +292,7 @@ ecore_drm_inputs_destroy(Ecore_Drm_Device *dev)
    Ecore_Drm_Seat *seat;
    Ecore_Drm_Evdev *edev;
 
+   EINA_SAFETY_ON_NULL_RETURN(dev);
    EINA_LIST_FREE(dev->seats, seat)
      {
         EINA_LIST_FREE(seat->devices, edev)
index 8166fe480441a4bd8cf6e00e308db8cd8c5073e6..e66918a6f0eacdf8b24990d995a0009d5baca98d 100644 (file)
@@ -56,6 +56,7 @@ _ecore_drm_launcher_device_flags_set(int fd, int flags)
 EAPI Eina_Bool 
 ecore_drm_launcher_connect(Ecore_Drm_Device *dev)
 {
+   EINA_SAFETY_ON_NULL_RETURN_VAL(dev, EINA_FALSE);
    /* try to connect to logind */
    if (!(logind = _ecore_drm_logind_connect(dev)))
      {
@@ -86,6 +87,7 @@ ecore_drm_launcher_connect(Ecore_Drm_Device *dev)
 EAPI void 
 ecore_drm_launcher_disconnect(Ecore_Drm_Device *dev)
 {
+   EINA_SAFETY_ON_NULL_RETURN(dev);
    if (dev->tty.switch_hdlr) ecore_event_handler_del(dev->tty.switch_hdlr);
    dev->tty.switch_hdlr = NULL;
 
index dbcd088caf2c0c00ad10701805f01bcb19675815..b564f1062633dd1b9c1a2206221457d93a2f7602 100644 (file)
@@ -721,6 +721,7 @@ ecore_drm_outputs_create(Ecore_Drm_Device *dev)
    int i = 0, x = 0, y = 0;
 
    EINA_SAFETY_ON_NULL_RETURN_VAL(dev, EINA_FALSE);
+   EINA_SAFETY_ON_TRUE_RETURN_VAL(dev->drm.fd < 0, EINA_FALSE);
 
    /* DBG("Create outputs for %d", dev->drm.fd); */
 
@@ -788,7 +789,7 @@ ecore_drm_output_free(Ecore_Drm_Output *output)
 EAPI void 
 ecore_drm_output_cursor_size_set(Ecore_Drm_Output *output, int handle, int w, int h)
 {
-   if (!output) return;
+   EINA_SAFETY_ON_NULL_RETURN(output);
    drmModeSetCursor(output->dev->drm.fd, output->crtc_id, handle, w, h);
 }
 
@@ -800,9 +801,10 @@ ecore_drm_output_enable(Ecore_Drm_Output *output)
    int x = 0, y = 0;
 
    EINA_SAFETY_ON_NULL_RETURN_VAL(output, EINA_FALSE);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(output->dev, EINA_FALSE);
    EINA_SAFETY_ON_NULL_RETURN_VAL(output->current_mode, EINA_FALSE);
 
-   if (!(dev = output->dev)) return EINA_FALSE;
+   dev = output->dev;
 
    output->enabled = EINA_TRUE;
    if (!dev->current)
@@ -847,6 +849,8 @@ ecore_drm_output_disable(Ecore_Drm_Output *output)
 EAPI void 
 ecore_drm_output_fb_release(Ecore_Drm_Output *output, Ecore_Drm_Fb *fb)
 {
+   EINA_SAFETY_ON_NULL_RETURN(output);
+   EINA_SAFETY_ON_NULL_RETURN(fb);
    _ecore_drm_output_fb_release(output, fb);
 }
 
@@ -859,9 +863,10 @@ ecore_drm_output_repaint(Ecore_Drm_Output *output)
    int ret = 0;
 
    EINA_SAFETY_ON_NULL_RETURN(output);
+   EINA_SAFETY_ON_NULL_RETURN(output->dev);
    EINA_SAFETY_ON_TRUE_RETURN(output->pending_destroy);
 
-   if (!(dev = output->dev)) return;
+   dev = output->dev;
 
    /* DBG("Output Repaint: %d %d", output->crtc_id, output->conn_id); */
 
@@ -942,7 +947,7 @@ ecore_drm_output_size_get(Ecore_Drm_Device *dev, int output, int *w, int *h)
 
    if (w) *w = 0;
    if (h) *h = 0;
-   if (!dev) return;
+   EINA_SAFETY_ON_NULL_RETURN(dev);
 
    if (!(fb = drmModeGetFB(dev->drm.fd, output))) return;
    if (w) *w = fb->width;
@@ -961,7 +966,7 @@ ecore_drm_outputs_geometry_get(Ecore_Drm_Device *dev, int *x, int *y, int *w, in
    if (y) *y = 0;
    if (w) *w = 0;
    if (h) *h = 0;
-   if (!dev) return;
+   EINA_SAFETY_ON_NULL_RETURN(dev);
 
    EINA_LIST_FOREACH(dev->outputs, l, output)
      {
@@ -1032,6 +1037,7 @@ EAPI void
 ecore_drm_output_dpms_set(Ecore_Drm_Output *output, int level)
 {
    EINA_SAFETY_ON_NULL_RETURN(output);
+   EINA_SAFETY_ON_NULL_RETURN(output->dev);
    EINA_SAFETY_ON_NULL_RETURN(output->dpms);
 
    drmModeConnectorSetProperty(output->dev->drm.fd, output->conn_id,
@@ -1042,6 +1048,7 @@ EAPI void
 ecore_drm_output_gamma_set(Ecore_Drm_Output *output, uint16_t size, uint16_t *r, uint16_t *g, uint16_t *b)
 {
    EINA_SAFETY_ON_NULL_RETURN(output);
+   EINA_SAFETY_ON_NULL_RETURN(output->dev);
    EINA_SAFETY_ON_NULL_RETURN(output->crtc);
 
    if (output->gamma != size) return;
@@ -1065,6 +1072,7 @@ ecore_drm_output_crtc_buffer_get(Ecore_Drm_Output *output)
    unsigned int id = 0;
 
    EINA_SAFETY_ON_NULL_RETURN_VAL(output, 0);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(output->dev, 0);
    EINA_SAFETY_ON_NULL_RETURN_VAL(output->crtc, 0);
 
    if (!(crtc = drmModeGetCrtc(output->dev->drm.fd, output->crtc_id)))
index ee9d909024febf73e278d4921ae3bd8df792852b..d3fa71dcde6475ed40940a384287889b9a005256 100644 (file)
@@ -21,7 +21,7 @@ ecore_drm_sprites_create(Ecore_Drm_Device *dev)
    unsigned int i = 0;
 
    /* check for valid device */
-   if ((!dev) || (dev->drm.fd < 0)) return EINA_FALSE;
+   EINA_SAFETY_ON_TRUE_RETURN_VAL((!dev) || (dev->drm.fd < 0), EINA_FALSE);
 
    /* get plane resources */
    if (!(res = drmModeGetPlaneResources(dev->drm.fd))) return EINA_FALSE;
@@ -66,7 +66,7 @@ ecore_drm_sprites_destroy(Ecore_Drm_Device *dev)
    Ecore_Drm_Sprite *sprite;
 
    /* check for valid device */
-   if (!dev) return;
+   EINA_SAFETY_ON_NULL_RETURN(dev);
 
    EINA_LIST_FREE(dev->sprites, sprite)
      {
@@ -82,7 +82,7 @@ ecore_drm_sprites_destroy(Ecore_Drm_Device *dev)
 EAPI void 
 ecore_drm_sprites_fb_set(Ecore_Drm_Sprite *sprite, int fb_id, int flags)
 {
-   if ((!sprite) || (!sprite->output)) return;
+   EINA_SAFETY_ON_TRUE_RETURN((!sprite) || (!sprite->output));
 
    if (fb_id)
      {
@@ -106,6 +106,8 @@ ecore_drm_sprites_crtc_supported(Ecore_Drm_Output *output, unsigned int supporte
    Ecore_Drm_Device *dev;
    unsigned int c = 0;
 
+   EINA_SAFETY_ON_NULL_RETURN_VAL(output, EINA_FALSE);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(output->dev, EINA_FALSE);
    dev = output->dev;
 
    for (c = 0; c < dev->crtc_count; c++)
index e7f394d2fb5a0161482d552045d067c8da415b8d..b21773d0199ee20b2330a64e8b60920572998441 100644 (file)
@@ -135,7 +135,7 @@ ecore_drm_tty_open(Ecore_Drm_Device *dev, const char *name)
    char tty[32] = "<stdin>";
 
    /* check for valid device */
-   if ((!dev) || (!dev->drm.name)) return EINA_FALSE;
+   EINA_SAFETY_ON_TRUE_RETURN_VAL((!dev) || (!dev->drm.name), EINA_FALSE);
 
    /* assign default tty fd of -1 */
    dev->tty.fd = -1;
@@ -226,7 +226,7 @@ EAPI Eina_Bool
 ecore_drm_tty_close(Ecore_Drm_Device *dev)
 {
    /* check for valid device */
-   if ((!dev) || (!dev->drm.name)) return EINA_FALSE;
+   EINA_SAFETY_ON_TRUE_RETURN_VAL((!dev) || (!dev->drm.name), EINA_FALSE);
 
    _ecore_drm_tty_restore(dev);
 
@@ -247,7 +247,7 @@ EAPI Eina_Bool
 ecore_drm_tty_release(Ecore_Drm_Device *dev)
 {
    /* check for valid device */
-   if ((!dev) || (!dev->drm.name) || (dev->tty.fd < 0)) return EINA_FALSE;
+   EINA_SAFETY_ON_TRUE_RETURN_VAL((!dev) || (!dev->drm.name) || (dev->tty.fd < 0), EINA_FALSE);
 
    /* send ioctl for vt release */
    if (ioctl(dev->tty.fd, VT_RELDISP, 1) < 0) 
@@ -263,7 +263,7 @@ EAPI Eina_Bool
 ecore_drm_tty_acquire(Ecore_Drm_Device *dev)
 {
    /* check for valid device */
-   if ((!dev) || (!dev->drm.name) || (dev->tty.fd < 0)) return EINA_FALSE;
+   EINA_SAFETY_ON_TRUE_RETURN_VAL((!dev) || (!dev->drm.name) || (dev->tty.fd < 0), EINA_FALSE);
 
    /* send ioctl for vt acquire */
    if (ioctl(dev->tty.fd, VT_RELDISP, VT_ACKACQ) < 0) 
@@ -279,7 +279,7 @@ EAPI int
 ecore_drm_tty_get(Ecore_Drm_Device *dev)
 {
    /* check for valid device */
-   if ((!dev) || (!dev->drm.name) || (dev->tty.fd < 0)) return -1;
+   EINA_SAFETY_ON_TRUE_RETURN_VAL((!dev) || (!dev->drm.name) || (dev->tty.fd < 0), -1);
 
    return dev->tty.fd;
 }