/** * \file getcwd.C * This file is part of LyX, the document processor. * Licence details can be found in the file COPYING. * * \author Lars Gullik Bjønnes * * Full author contact details are available in file CREDITS */ #include #include #include #include "support/lyxlib.h" namespace { inline char * l_getcwd(char * buffer, size_t size) { #ifndef __EMX__ return ::getcwd(buffer, size); #else return ::_getcwd2(buffer, size); #endif } } // namespace anon // Returns current working directory string const lyx::support::getcwd() { int n = 256; // Assume path is less than 256 chars char * err; char * tbuf = new char[n]; // Safe. Hopefully all getcwds behave this way! while (((err = l_getcwd(tbuf, n)) == 0) && (errno == ERANGE)) { // Buffer too small, double the buffersize and try again delete[] tbuf; n = 2 * n; tbuf = new char[n]; } string result; if (err) result = tbuf; delete[] tbuf; return result; }