Release version 0.0.16
[platform/core/appfw/xdgmime.git] / xdgmime / src / xdgmimeglobs2.c
index e5ad349..c30aa86 100644 (file)
@@ -97,12 +97,12 @@ mime_type_info_add_file_name(mime_type_info *mti,
                const char *mime_type,
                const char *file_name)
 {
-       if(!mti) return;
+       if(!mti) return -1;
 
        if(!mti->mime_type) {
                mti->mime_type = strdup(mime_type);
        }
-       else { 
+       else {
                /* mime_type already exist, but mime_type is different! */
                if(strcmp(mti->mime_type, mime_type)) return -1;
        }
@@ -127,7 +127,7 @@ mime_type_info_add_file_name(mime_type_info *mti,
        }
 
        *pname = strdup(file_name);
-       
+
        return 0;
 }
 
@@ -161,8 +161,8 @@ mime_type_info_list_free(mime_type_info_list *mtil)
        mime_type_info **mti;
        char *tmp;
 
-       for(mti = mtil->mti_list; 
-                       *mti; 
+       for(mti = mtil->mti_list;
+                       *mti;
                        mti++) {
                mime_type_info_free(*mti);
        }
@@ -176,15 +176,15 @@ mime_type_info_list_add_file_name(mime_type_info_list *mtil,
                const char *mime_type,
                const char *file_name)
 {
-       if(!mtil) return;
+       if(!mtil || !mime_type || !file_name) return -1;
 
        mime_type_info **mti;
        int found = 0;
 
        for(mti = mtil->mti_list; mti < (mtil->mti_list + mtil->mti_list_size - 1) && *mti; mti++) {
                if((*mti)->mime_type && mime_type &&  /* NULL check */
-                       0 == strncmp((*mti)->mime_type, 
-                               mime_type, 
+                       0 == strncmp((*mti)->mime_type,
+                               mime_type,
                                strlen(mime_type))) {
                        /* found! */
                        found = 1;
@@ -225,19 +225,28 @@ mime_type_info_list_reload(mime_type_info_list *mtil)
        FILE *globs2 = NULL;
        struct stat globs2_stat;
        int r;
+       int fd;
        char buf[256];
 
        if(!mtil) return;
 
+       /* read globs2, and construct data structure */
+       globs2 = fopen(GLOBS2_PATH, "r");
+       if (!globs2) return;
+
        /* Check glob2's mtime.
         * If reconstruction is not needed, just exit function */
-       if( stat(GLOBS2_PATH, &globs2_stat) ||
-                       globs2_stat.st_mtime <= mtil->globs2_mtime ) return;
+       fd = fileno(globs2);
+       if (fstat(fd, &globs2_stat) ||
+                       globs2_stat.st_mtime <= mtil->globs2_mtime ) {
+               fclose(globs2);
+               return;
+       }
 
        /* clean old mtil */
        mime_type_info **mti;
-       for(mti = mtil->mti_list; 
-               *mti; 
+       for(mti = mtil->mti_list;
+               *mti;
                mti++) {
                mime_type_info_free(*mti);
                *mti = NULL;
@@ -246,8 +255,6 @@ mime_type_info_list_reload(mime_type_info_list *mtil)
        /* save globs2's mtime */
        mtil->globs2_mtime = globs2_stat.st_mtime;
 
-       /* read globs2, and construct data structure */
-       globs2 = fopen(GLOBS2_PATH, "r");
        char *weight, *mime_type, *file_name, *saveptr = NULL;
        while(fgets(buf, 255, globs2)) {
                /* skip comment */
@@ -256,7 +263,7 @@ mime_type_info_list_reload(mime_type_info_list *mtil)
                weight = strtok_r(buf, ":\n", &saveptr);        /* ignored */
                mime_type = strtok_r(NULL, ":\n", &saveptr);
                file_name = strtok_r(NULL, ":\n", &saveptr);
-               
+
                mime_type_info_list_add_file_name(mtil, mime_type, file_name);
        }
        fclose(globs2);
@@ -266,7 +273,7 @@ mime_type_info_list_reload(mime_type_info_list *mtil)
 }
 
 static const char **
-mime_type_info_list_get_file_names(mime_type_info_list *mtil, 
+mime_type_info_list_get_file_names(mime_type_info_list *mtil,
                const char *mime_type)
 {
 
@@ -286,7 +293,7 @@ mime_type_info_list_get_file_names(mime_type_info_list *mtil,
 }
 
 
-/* API 
+/* API
  * Get file names' list from mime type
  */
 API const char **