]> git.lyx.org Git - lyx.git/blob - src/support/getcwd.C
ws cleanup
[lyx.git] / src / support / getcwd.C
1 #include <config.h>
2
3 #include <cerrno>
4 #include <unistd.h>
5
6 #include "support/lyxlib.h"
7
8 namespace {
9
10 inline
11 char * l_getcwd(char * buffer, size_t size)
12 {
13 #ifndef __EMX__
14         return ::getcwd(buffer, size);
15 #else
16         return ::_getcwd2(buffer, size);
17 #endif
18 }
19
20 } // namespace anon
21
22
23 // Returns current working directory
24 string const lyx::getcwd()
25 {
26         int n = 256;    // Assume path is less than 256 chars
27         char * err;
28         char * tbuf = new char[n];
29
30         // Safe. Hopefully all getcwds behave this way!
31         while (((err = l_getcwd(tbuf, n)) == 0) && (errno == ERANGE)) {
32                 // Buffer too small, double the buffersize and try again
33                 delete[] tbuf;
34                 n = 2 * n;
35                 tbuf = new char[n];
36         }
37
38         string result;
39         if (err) result = tbuf;
40         delete[] tbuf;
41         return result;
42 }