File Browser: initial version
[scilab.git] / scilab / modules / commons / src / c / fileutils.c
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
4  *
5  * This file must be used under the terms of the CeCILL.
6  * This source file is licensed as described in the file COPYING, which
7  * you should have received as part of this distribution.  The terms
8  * are also available at
9  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10  *
11  */
12
13 #ifdef _MSC_VER
14 #include <Windows.h>
15 #include <stdio.h>
16 #include "charEncoding.h"
17 #else
18 #include <sys/types.h>
19 #include <dirent.h>
20 #endif
21
22 #include "PATH_MAX.h"
23 #include <string.h>
24 #include "fileutils.h"
25 #include "MALLOC.h"
26
27 /*--------------------------------------------------------------------------*/
28 #ifdef _MSC_VER
29 int isEmptyDirectory(char * dirName)
30 {
31     wchar_t *wcpath = NULL;
32         wchar_t wdirpath[PATH_MAX + FILENAME_MAX + 1];
33     HANDLE hFile;
34     WIN32_FIND_DATAW FileInformation;
35     int ret = 1;
36
37     wcpath = to_wide_string(dirName);
38         swprintf(wdirpath, wcslen(wcpath) + 2 + 1, L"%s\\*", wcpath);
39         FREE(wcpath);
40
41     hFile = FindFirstFileW(wdirpath, &FileInformation);
42     
43     if (hFile == INVALID_HANDLE_VALUE)
44     {
45         return 0;
46     }
47
48     do
49     {
50         if (!wcscmp(FileInformation.cFileName, L".") || !wcscmp(FileInformation.cFileName, L".."))
51         {
52             continue;
53         }
54
55         ret = 0;
56         break;
57     } while (FindNextFileW(hFile, &FileInformation) == TRUE);
58
59     FindClose(hFile);
60         
61     return ret;
62 }
63 /*--------------------------------------------------------------------------*/
64 #else
65 /*--------------------------------------------------------------------------*/
66 int isEmptyDirectory(char * dirName)
67 {
68     DIR *dir = NULL;
69 #ifdef __APPLE__
70     struct dirent *ptr;
71     struct dirent *result;
72 #else
73     struct dirent64 *ptr;
74     struct dirent64 *result;
75 #endif
76     int ret = 1;
77
78     dir = opendir(dirName);
79     if (dir == NULL)
80     {
81         return 0;
82     }
83
84 #ifdef __APPLE__
85     ptr = MALLOC(sizeof(struct dirent) + (PATH_MAX + 1));
86 #else
87     ptr = MALLOC(sizeof(struct dirent64) + (PATH_MAX + 1));
88 #endif
89     if (ptr == NULL)
90     {
91         closedir(dir);
92         return 0;
93     }
94
95 #ifdef __APPLE__
96     while ((readdir_r(dir, ptr, &result) == 0)  && (result != NULL))
97 #else
98         while ((readdir64_r(dir, ptr, &result) == 0)  && (result != NULL))
99 #endif
100         {
101             if (!strcmp(ptr->d_name, ".") || !strcmp(ptr->d_name, ".."))
102             {
103                 continue;
104             }
105
106             ret = 0;
107             break;
108         }
109
110     FREE(ptr);
111     closedir(dir);
112
113     return ret;
114 }
115 #endif