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