mirror of
https://github.com/moses-smt/mosesdecoder.git
synced 2024-11-10 10:59:21 +03:00
84 lines
1.5 KiB
C
84 lines
1.5 KiB
C
/*
|
|
* 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)
|
|
*/
|
|
|
|
#include "cwd.h"
|
|
|
|
#include "jam.h"
|
|
#include "mem.h"
|
|
#include "pathsys.h"
|
|
|
|
#include <assert.h>
|
|
#include <errno.h>
|
|
#include <limits.h>
|
|
|
|
/* MinGW on Windows declares PATH_MAX in limits.h */
|
|
#if defined( NT ) && !defined( __GNUC__ )
|
|
# include <direct.h>
|
|
# define PATH_MAX _MAX_PATH
|
|
#else
|
|
# include <unistd.h>
|
|
# if defined( __COMO__ )
|
|
# include <linux/limits.h>
|
|
# endif
|
|
#endif
|
|
|
|
#ifndef PATH_MAX
|
|
# define PATH_MAX 1024
|
|
#endif
|
|
|
|
|
|
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;
|
|
}
|