eina: Eina_Module - check whether the file exists or not, before memory allocation...
authorShinwoo Kim <kimcinoo.efl@gmail.com>
Mon, 21 Jul 2014 17:31:04 +0000 (19:31 +0200)
committerCedric BAIL <c.bail@partner.samsung.com>
Mon, 21 Jul 2014 17:33:27 +0000 (19:33 +0200)
Summary:
I got an issue from emotion_basic_example, because my machine has following directories.

/usr/local/lib/emotion/modules/
├── gstreamer
│   ├── linux-gnu-i686-1.7.99
│   ├── linux-gnu-i686-1.8.0
│   └── linux-gnu-i686-1.8.99
└── gstreamer1
    ├── linux-gnu-i686-1.8.99
    └── v-1.10

The defined MODULE_ARCH is v-1.10, and the _emotion_modules which is returned by eina_module_arch_list_get(); has two items.
Because eina_module_new(); creates Eina_Module, even though the "/usr/local/lib/emotion/modules/gstreamer/v-1.10/module.so"
does not exist.

Test Plan: Create directory without MODULE_ARCH, run emotion_basic_example, and check whether it works properly or not.

Reviewers: raster, seoz, Hermet, woohyun, jpeg, cedric

Subscribers: cedric, seoz

Differential Revision: https://phab.enlightenment.org/D1200

Signed-off-by: Cedric BAIL <c.bail@partner.samsung.com>
src/lib/eina/eina_module.c
src/lib/eina/eina_module.h

index 2be0a40343383d1ea41c0c09ec5266aa5722db84..a836d71f90776588fe64940fc48a291875f13473 100644 (file)
@@ -257,7 +257,9 @@ EAPI Eina_Module *eina_module_new(const char *file)
    size_t len;
 
    EINA_SAFETY_ON_NULL_RETURN_VAL(file, NULL);
-   /* TODO check that the file exists. Update doc too */
+
+   /* check that the file exists. */
+   if (access(file, F_OK)) return NULL;
 
    len = strlen(file);
    EINA_SAFETY_ON_FALSE_RETURN_VAL(len > 0, NULL);
index f48ca27244fb4669afb4b21854a9c91d75f6460b..f6fabdc30d98a35c85b427ba51a8e8238630de6c 100644 (file)
@@ -112,9 +112,9 @@ extern EAPI Eina_Error EINA_ERROR_MODULE_INIT_FAILED;
  * @brief Return a new module.
  *
  * @param file The name of the file module to load.
- * @return A new module. If @p file is @c NULL, the function 
- * returns @c NULL, otherwise, it allocates an Eina_Module, stores
- * a duplicate string of @p file, sets its reference to @c 0 and
+ * @return A new module. If @p file is @c NULL, or if it does not exist,
+ * the function returns @c NULL, otherwise, it allocates an Eina_Module,
+ * stores a duplicate string of @p file, sets its reference to @c 0 and
  * its handle to @c NULL.
  *
  * When the new module is not needed anymore, use eina_module_free()