| /* | |
| * Copyright 2002. Vladimir Prus | |
| * Copyright 2005. Rene Rivera | |
| * Distributed under the Boost Software License, Version 1.0. | |
| * (See accompanying file LICENSE_1_0.txt or copy at | |
| * http://www.boost.org/LICENSE_1_0.txt) | |
| */ | |
| /* MinGW on Windows declares PATH_MAX in limits.h */ | |
| static OBJECT * cwd_; | |
| void cwd_init( void ) | |
| { | |
| int buffer_size = PATH_MAX; | |
| char * cwd_buffer = 0; | |
| int error; | |
| assert( !cwd_ ); | |
| do | |
| { | |
| char * const buffer = BJAM_MALLOC_RAW( buffer_size ); | |
| cwd_buffer = getcwd( buffer, buffer_size ); | |
| error = errno; | |
| if ( cwd_buffer ) | |
| { | |
| /* We store the path using its canonical/long/key format. */ | |
| OBJECT * const cwd = object_new( cwd_buffer ); | |
| cwd_ = path_as_key( cwd ); | |
| object_free( cwd ); | |
| } | |
| buffer_size *= 2; | |
| BJAM_FREE_RAW( buffer ); | |
| } | |
| while ( !cwd_ && error == ERANGE ); | |
| if ( !cwd_ ) | |
| { | |
| perror( "can not get current working directory" ); | |
| exit( EXITBAD ); | |
| } | |
| } | |
| OBJECT * cwd( void ) | |
| { | |
| assert( cwd_ ); | |
| return cwd_; | |
| } | |
| void cwd_done( void ) | |
| { | |
| assert( cwd_ ); | |
| object_free( cwd_ ); | |
| cwd_ = NULL; | |
| } | |