utf: commons 2
[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.1-en.txt
10  *
11  */
12
13 #include <string.h>
14
15 #ifdef _MSC_VER
16 #include <Windows.h>
17 #include <stdio.h>
18 #include "charEncoding.h"
19 #else
20 #include <sys/types.h>
21 #include <dirent.h>
22 #endif
23
24 #include "sci_malloc.h"
25 #include "os_string.h"
26
27 #include "PATH_MAX.h"
28 #include "scicurdir.h"
29
30
31 #include "fileutils.h"
32
33 /*--------------------------------------------------------------------------*/
34 #ifdef _MSC_VER
35 int isEmptyDirectory(char *dirName)
36 {
37     char *path = NULL;
38     char dirpath[PATH_MAX + FILENAME_MAX + 1];
39     HANDLE hFile;
40     WIN32_FIND_DATAA FileInformation;
41     int ret = 1;
42
43     os_sprintf(dirpath, PATH_MAX + FILENAME_MAX + 1, "%s\\*", dirName);
44
45     hFile = FindFirstFile(dirpath, &FileInformation);
46
47     if (hFile == INVALID_HANDLE_VALUE)
48     {
49         return 0;
50     }
51
52     do
53     {
54         if (!strcmp(FileInformation.cFileName, ".") || !strcmp(FileInformation.cFileName, ".."))
55         {
56             continue;
57         }
58
59         ret = 0;
60         break;
61     }
62     while (FindNextFile(hFile, &FileInformation) == TRUE);
63
64     FindClose(hFile);
65
66     return ret;
67 }
68
69 /*--------------------------------------------------------------------------*/
70 #else
71 /*--------------------------------------------------------------------------*/
72 int isEmptyDirectory(char *dirName)
73 {
74     DIR *dir = NULL;
75
76 #ifdef __USE_LARGEFILE64
77     struct dirent64 *ptr;
78     struct dirent64 *result;
79 #else
80     struct dirent *ptr;
81     struct dirent *result;
82 #endif
83     int ret = 1;
84
85     dir = opendir(dirName);
86     if (dir == NULL)
87     {
88         return 0;
89     }
90
91 #ifdef __USE_LARGEFILE64
92     ptr = MALLOC(sizeof(struct dirent64) + (PATH_MAX + 1));
93 #else
94     ptr = MALLOC(sizeof(struct dirent) + (PATH_MAX + 1));
95 #endif
96     if (ptr == NULL)
97     {
98         closedir(dir);
99         return 0;
100     }
101
102 #ifdef __USE_LARGEFILE64
103     while ((readdir64_r(dir, ptr, &result) == 0) && (result != NULL))
104 #else
105     while ((readdir_r(dir, ptr, &result) == 0) && (result != NULL))
106 #endif
107     {
108         if (!strcmp(ptr->d_name, ".") || !strcmp(ptr->d_name, ".."))
109         {
110             continue;
111         }
112
113         ret = 0;
114         break;
115     }
116
117     FREE(ptr);
118     closedir(dir);
119
120     return ret;
121 }
122 #endif
123 /*--------------------------------------------------------------------------*/
124 char *getCWD()
125 {
126     int err = 0;
127     char *str;
128
129     str = scigetcwd(&err);
130
131     if (err)
132     {
133         return NULL;
134     }
135     else
136     {
137         return str;
138     }
139 }
140
141 /*--------------------------------------------------------------------------*/