| 36 | |
| 37 | |
| 38 | void cwd_init( void ) |
| 39 | { |
| 40 | int buffer_size = PATH_MAX; |
| 41 | char * cwd_buffer = 0; |
| 42 | int error; |
| 43 | |
| 44 | assert( !cwd_ ); |
| 45 | |
| 46 | do |
| 47 | { |
| 48 | char * const buffer = BJAM_MALLOC_RAW( buffer_size ); |
| 49 | cwd_buffer = getcwd( buffer, buffer_size ); |
| 50 | error = errno; |
| 51 | if ( cwd_buffer ) |
| 52 | { |
| 53 | /* We store the path using its canonical/long/key format. */ |
| 54 | OBJECT * const cwd = object_new( cwd_buffer ); |
| 55 | cwd_ = path_as_key( cwd ); |
| 56 | object_free( cwd ); |
| 57 | } |
| 58 | buffer_size *= 2; |
| 59 | BJAM_FREE_RAW( buffer ); |
| 60 | } |
| 61 | while ( !cwd_ && error == ERANGE ); |
| 62 | |
| 63 | if ( !cwd_ ) |
| 64 | { |
| 65 | perror( "can not get current working directory" ); |
| 66 | exit( EXITBAD ); |
| 67 | } |
| 68 | } |
| 69 | |
| 70 | |
| 71 | OBJECT * cwd( void ) |
no test coverage detected