Merge remote-tracking branch 'origin/master' into windows
[scilab.git] / scilab / modules / fileio / src / c / scicurdir.c
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) INRIA
4  * Copyright (C) ENPC
5  * Copyright (C) DIGITEO - 2009 - Allan CORNET
6  *
7  * Copyright (C) 2012 - 2016 - Scilab Enterprises
8  *
9  * This file is hereby licensed under the terms of the GNU GPL v2.0,
10  * pursuant to article 5.3.4 of the CeCILL v.2.1.
11  * This file was originally licensed under the terms of the CeCILL v2.1,
12  * and continues to be available under such terms.
13  * For more information, see the COPYING file which you should have received
14  * along with this program.
15  *
16  */
17 #include <string.h>
18 #ifdef _MSC_VER
19 #include <windows.h>
20 #include <direct.h>
21 #include <errno.h>
22 #else
23 #include <errno.h>
24 #include <unistd.h>
25 #define GETCWD(x,y) getcwd(x,y)
26 #endif
27 #include "os_string.h"
28 #include "sciprint.h"
29 #include "scicurdir.h"
30 #include "sci_malloc.h"
31 #include "localization.h"
32 #include "charEncoding.h"
33 #include "configvariable_interface.h"
34 #include "PATH_MAX.h"
35 /*--------------------------------------------------------------------------*/
36 int scichdir(const char *path)
37 {
38     if (path == NULL)
39     {
40         return 1;
41     }
42
43 #ifndef _MSC_VER
44
45     if (chdir(path) == -1)
46     {
47         if ( getWarningMode() )
48         {
49             sciprint(_("Can't go to directory %s: %s\n"), path, strerror(errno));
50         }
51         return 1;
52     }
53
54 #else
55     if (_chdir(path) )
56     {
57         switch (errno)
58         {
59             case ENOENT:
60             {
61                 if ( getWarningMode() )
62                 {
63                     sciprint(_("Can't go to directory %s.\n"), path);
64                 }
65             }
66             break;
67             case EINVAL:
68             {
69                 if ( getWarningMode() )
70                 {
71                     sciprint(_("Invalid buffer.\n"));
72                 }
73             }
74             break;
75             default:
76             {
77                 if ( getWarningMode() )
78                 {
79                     sciprint(_("Unknown error.\n"));
80                 }
81             }
82         }
83         return 1;
84     }
85 #endif
86     return 0;
87 }
88 /*--------------------------------------------------------------------------*/
89 char * scigetcwd(int *err)
90 {
91     char currentDir[PATH_MAX + 1];
92 #ifndef _MSC_VER
93     if (GETCWD(currentDir, PATH_MAX) == NULL)
94 #else
95     if (_getcwd(currentDir, PATH_MAX) == NULL )
96 #endif
97     {
98         if (getWarningMode())
99         {
100             sciprint(_("Can't get current directory.\n"));
101         }
102         *err = 1;
103     }
104
105     *err = 0;
106
107     return os_strdup(currentDir);
108 }
109 /*--------------------------------------------------------------------------*/