ENH: merge in changes for beos support
This commit is contained in:
parent
de8ffcaef4
commit
3a32cec969
|
@ -59,6 +59,14 @@ IF(${CMAKE_GENERATOR} MATCHES "Visual Studio")
|
||||||
SET(CMAKE_COMPILER_IS_GNUCXX_RUN 1)
|
SET(CMAKE_COMPILER_IS_GNUCXX_RUN 1)
|
||||||
ENDIF(${CMAKE_GENERATOR} MATCHES "Visual Studio")
|
ENDIF(${CMAKE_GENERATOR} MATCHES "Visual Studio")
|
||||||
|
|
||||||
|
# The g++ that comes with BeOS 5 segfaults if you run "g++ -E"
|
||||||
|
# ("gcc -E" is fine), which throws up a system dialog box that hangs cmake
|
||||||
|
# until the user clicks "OK"...so for now, we just assume it's g++.
|
||||||
|
IF(BEOS)
|
||||||
|
SET(CMAKE_COMPILER_IS_GNUCXX 1)
|
||||||
|
SET(CMAKE_COMPILER_IS_GNUCXX_RUN 1)
|
||||||
|
ENDIF(BEOS)
|
||||||
|
|
||||||
IF(NOT CMAKE_COMPILER_IS_GNUCXX_RUN)
|
IF(NOT CMAKE_COMPILER_IS_GNUCXX_RUN)
|
||||||
# test to see if the cxx compiler is gnu
|
# test to see if the cxx compiler is gnu
|
||||||
SET(CMAKE_COMPILER_IS_GNUCXX_RUN 1)
|
SET(CMAKE_COMPILER_IS_GNUCXX_RUN 1)
|
||||||
|
|
|
@ -16,7 +16,10 @@ int main(int ac, char*av[]){
|
||||||
pthread_create(&tid[0], 0, runner, (void*)1);
|
pthread_create(&tid[0], 0, runner, (void*)1);
|
||||||
pthread_create(&tid[1], 0, runner, (void*)2);
|
pthread_create(&tid[1], 0, runner, (void*)2);
|
||||||
|
|
||||||
|
#if defined(__BEOS__) && !defined(__ZETA__) // (no usleep on BeOS 5.)
|
||||||
usleep(1); // for strange behavior on single-processor sun
|
usleep(1); // for strange behavior on single-processor sun
|
||||||
|
#endif
|
||||||
|
|
||||||
pthread_join(tid[0], 0);
|
pthread_join(tid[0], 0);
|
||||||
pthread_join(tid[1], 0);
|
pthread_join(tid[1], 0);
|
||||||
if(ac > 1000){return *av[0];}
|
if(ac > 1000){return *av[0];}
|
||||||
|
|
|
@ -48,6 +48,10 @@
|
||||||
|
|
||||||
#include <memory> // auto_ptr
|
#include <memory> // auto_ptr
|
||||||
|
|
||||||
|
#if defined(__BEOS__)
|
||||||
|
#include <be/kernel/OS.h> /* disable_debugger() API. */
|
||||||
|
#endif
|
||||||
|
|
||||||
#define DEBUGOUT std::cout << __LINE__ << " "; std::cout
|
#define DEBUGOUT std::cout << __LINE__ << " "; std::cout
|
||||||
#define DEBUGERR std::cerr << __LINE__ << " "; std::cerr
|
#define DEBUGERR std::cerr << __LINE__ << " "; std::cerr
|
||||||
|
|
||||||
|
@ -589,6 +593,8 @@ void cmCTest::BlockTestErrorDiagnostics()
|
||||||
cmSystemTools::PutEnv("DASHBOARD_TEST_FROM_CTEST=" CMake_VERSION);
|
cmSystemTools::PutEnv("DASHBOARD_TEST_FROM_CTEST=" CMake_VERSION);
|
||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);
|
SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);
|
||||||
|
#elif defined(__BEOS__)
|
||||||
|
disable_debugger(1);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,10 @@
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#if defined(__BEOS__)
|
||||||
|
#include <unistd.h> /* prevents a conflict with a #define later on... */
|
||||||
|
#endif
|
||||||
|
|
||||||
/* end standard C headers. */
|
/* end standard C headers. */
|
||||||
|
|
||||||
/* flex integer type definitions */
|
/* flex integer type definitions */
|
||||||
|
|
|
@ -22,6 +22,10 @@
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#if defined(__BEOS__)
|
||||||
|
#include <unistd.h> /* prevents a conflict with a #define later on... */
|
||||||
|
#endif
|
||||||
|
|
||||||
/* end standard C headers. */
|
/* end standard C headers. */
|
||||||
|
|
||||||
/* flex integer type definitions */
|
/* flex integer type definitions */
|
||||||
|
|
|
@ -1946,6 +1946,9 @@ void cmMakefile::AddDefaultDefinitions()
|
||||||
#if defined(__QNXNTO__)
|
#if defined(__QNXNTO__)
|
||||||
this->AddDefinition("QNXNTO", "1");
|
this->AddDefinition("QNXNTO", "1");
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(__BEOS__)
|
||||||
|
this->AddDefinition("BEOS", "1");
|
||||||
|
#endif
|
||||||
|
|
||||||
char temp[1024];
|
char temp[1024];
|
||||||
sprintf(temp, "%d", cmVersion::GetMinorVersion());
|
sprintf(temp, "%d", cmVersion::GetMinorVersion());
|
||||||
|
|
|
@ -1432,7 +1432,12 @@ int cmSystemToolsGZStructOpen(void* call_data, const char *pathname,
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !defined(_WIN32) || defined(__CYGWIN__)
|
#if defined(__BEOS__) && !defined(__ZETA__) // no fchmod on BeOS 5...do pathname instead.
|
||||||
|
if ((oflags & O_CREAT) && chmod(pathname, mode))
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
#elif !defined(_WIN32) || defined(__CYGWIN__)
|
||||||
if ((oflags & O_CREAT) && fchmod(fd, mode))
|
if ((oflags & O_CREAT) && fchmod(fd, mode))
|
||||||
{
|
{
|
||||||
return -1;
|
return -1;
|
||||||
|
|
|
@ -319,7 +319,112 @@ const char* DynamicLoader::LastError()
|
||||||
#endif //_WIN32
|
#endif //_WIN32
|
||||||
|
|
||||||
// ---------------------------------------------------------------
|
// ---------------------------------------------------------------
|
||||||
// 4. Implementation for default UNIX machines.
|
// 4. Implementation for BeOS
|
||||||
|
#ifdef __BEOS__
|
||||||
|
#include <string.h> // for strerror()
|
||||||
|
#include <be/kernel/image.h>
|
||||||
|
#include <be/support/Errors.h>
|
||||||
|
#define DYNAMICLOADER_DEFINED 1
|
||||||
|
|
||||||
|
namespace KWSYS_NAMESPACE
|
||||||
|
{
|
||||||
|
|
||||||
|
static image_id last_dynamic_err = B_OK;
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
DynamicLoader::LibraryHandle DynamicLoader::OpenLibrary(const char* libname )
|
||||||
|
{
|
||||||
|
// image_id's are integers, errors are negative. Add one just in case we
|
||||||
|
// get a valid image_id of zero (is that even possible?).
|
||||||
|
image_id rc = load_add_on(libname);
|
||||||
|
if (rc < 0)
|
||||||
|
{
|
||||||
|
last_dynamic_err = rc;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return rc+1;
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
int DynamicLoader::CloseLibrary(DynamicLoader::LibraryHandle lib)
|
||||||
|
{
|
||||||
|
if (!lib)
|
||||||
|
{
|
||||||
|
last_dynamic_err = B_BAD_VALUE;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// The function dlclose() returns 0 on success, and non-zero on error.
|
||||||
|
status_t rc = unload_add_on(lib-1);
|
||||||
|
if (rc != B_OK)
|
||||||
|
{
|
||||||
|
last_dynamic_err = rc;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
DynamicLoader::SymbolPointer DynamicLoader::GetSymbolAddress(
|
||||||
|
DynamicLoader::LibraryHandle lib, const char* sym)
|
||||||
|
{
|
||||||
|
// Hack to cast pointer-to-data to pointer-to-function.
|
||||||
|
union
|
||||||
|
{
|
||||||
|
void* pvoid;
|
||||||
|
DynamicLoader::SymbolPointer psym;
|
||||||
|
} result;
|
||||||
|
|
||||||
|
result.psym = NULL;
|
||||||
|
|
||||||
|
if (!lib)
|
||||||
|
{
|
||||||
|
last_dynamic_err = B_BAD_VALUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// !!! FIXME: BeOS can do function-only lookups...does this ever
|
||||||
|
// !!! FIXME: actually _want_ a data symbol lookup, or was this union
|
||||||
|
// !!! FIXME: a leftover of dlsym()? (s/ANY/TEXT for functions only).
|
||||||
|
status_t rc = get_image_symbol(lib-1,sym,B_SYMBOL_TYPE_ANY,&result.pvoid);
|
||||||
|
if (rc != B_OK)
|
||||||
|
{
|
||||||
|
last_dynamic_err = rc;
|
||||||
|
result.psym = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result.psym;
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
const char* DynamicLoader::LibPrefix()
|
||||||
|
{
|
||||||
|
return "lib";
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
const char* DynamicLoader::LibExtension()
|
||||||
|
{
|
||||||
|
return ".so";
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
const char* DynamicLoader::LastError()
|
||||||
|
{
|
||||||
|
const char *retval = strerror(last_dynamic_err);
|
||||||
|
last_dynamic_err = B_OK;
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace KWSYS_NAMESPACE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------
|
||||||
|
// 5. Implementation for default UNIX machines.
|
||||||
// if nothing has been defined then use this
|
// if nothing has been defined then use this
|
||||||
#ifndef DYNAMICLOADER_DEFINED
|
#ifndef DYNAMICLOADER_DEFINED
|
||||||
#define DYNAMICLOADER_DEFINED 1
|
#define DYNAMICLOADER_DEFINED 1
|
||||||
|
|
|
@ -25,6 +25,8 @@
|
||||||
#if MAC_OS_X_VERSION_MAX_ALLOWED < 1030
|
#if MAC_OS_X_VERSION_MAX_ALLOWED < 1030
|
||||||
#include <mach-o/dyld.h>
|
#include <mach-o/dyld.h>
|
||||||
#endif
|
#endif
|
||||||
|
#elif defined(__BEOS__)
|
||||||
|
#include <be/kernel/image.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace @KWSYS_NAMESPACE@
|
namespace @KWSYS_NAMESPACE@
|
||||||
|
@ -62,6 +64,8 @@ public:
|
||||||
#else
|
#else
|
||||||
typedef void* LibraryHandle;
|
typedef void* LibraryHandle;
|
||||||
#endif
|
#endif
|
||||||
|
#elif defined(__BEOS__)
|
||||||
|
typedef image_id LibraryHandle;
|
||||||
#else
|
#else
|
||||||
typedef void* LibraryHandle;
|
typedef void* LibraryHandle;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -108,6 +108,34 @@ public:
|
||||||
#define _chdir chdir
|
#define _chdir chdir
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(__BEOS__) && !defined(__ZETA__)
|
||||||
|
#include <be/kernel/OS.h>
|
||||||
|
#include <be/storage/Path.h>
|
||||||
|
|
||||||
|
// BeOS 5 doesn't have usleep(), but it has snooze(), which is identical.
|
||||||
|
static inline void usleep(unsigned int msec)
|
||||||
|
{
|
||||||
|
::snooze(msec);
|
||||||
|
}
|
||||||
|
|
||||||
|
// BeOS 5 also doesn't have realpath(), but its C++ API offers something close.
|
||||||
|
static inline char *realpath(const char *path, char *resolved_path)
|
||||||
|
{
|
||||||
|
const size_t maxlen = KWSYS_SYSTEMTOOLS_MAXPATH;
|
||||||
|
snprintf(resolved_path, maxlen, "%s", path);
|
||||||
|
BPath normalized(resolved_path, NULL, true);
|
||||||
|
const char *resolved = normalized.Path();
|
||||||
|
if (resolved != NULL) // NULL == No such file.
|
||||||
|
{
|
||||||
|
if (snprintf(resolved_path, maxlen, "%s", resolved) < maxlen)
|
||||||
|
{
|
||||||
|
return resolved_path;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NULL; // something went wrong.
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(_WIN32) && (defined(_MSC_VER) || defined(__WATCOMC__) || defined(__BORLANDC__) || defined(__MINGW32__))
|
#if defined(_WIN32) && (defined(_MSC_VER) || defined(__WATCOMC__) || defined(__BORLANDC__) || defined(__MINGW32__))
|
||||||
inline int Mkdir(const char* dir)
|
inline int Mkdir(const char* dir)
|
||||||
{
|
{
|
||||||
|
@ -291,7 +319,9 @@ void SystemTools::GetPath(kwsys_stl::vector<kwsys_stl::string>& path, const char
|
||||||
kwsys_stl::string::size_type endpos = pathEnv.find(pathSep, start);
|
kwsys_stl::string::size_type endpos = pathEnv.find(pathSep, start);
|
||||||
if(endpos != kwsys_stl::string::npos)
|
if(endpos != kwsys_stl::string::npos)
|
||||||
{
|
{
|
||||||
path.push_back(pathEnv.substr(start, endpos-start));
|
kwsys_stl::string convertedPath;
|
||||||
|
Realpath(pathEnv.substr(start, endpos-start).c_str(), convertedPath);
|
||||||
|
path.push_back(convertedPath);
|
||||||
start = endpos+1;
|
start = endpos+1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -17,6 +17,10 @@
|
||||||
#include KWSYS_HEADER(ios/iostream)
|
#include KWSYS_HEADER(ios/iostream)
|
||||||
#include KWSYS_HEADER(stl/string)
|
#include KWSYS_HEADER(stl/string)
|
||||||
|
|
||||||
|
#if defined(__BEOS__)
|
||||||
|
#include <be/kernel/OS.h> /* disable_debugger() API. */
|
||||||
|
#endif
|
||||||
|
|
||||||
// Work-around CMake dependency scanning limitation. This must
|
// Work-around CMake dependency scanning limitation. This must
|
||||||
// duplicate the above list of headers.
|
// duplicate the above list of headers.
|
||||||
#if 0
|
#if 0
|
||||||
|
@ -88,6 +92,8 @@ int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);
|
SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);
|
||||||
|
#elif defined(__BEOS__)
|
||||||
|
disable_debugger(1);
|
||||||
#endif
|
#endif
|
||||||
int res;
|
int res;
|
||||||
if( argc == 3 )
|
if( argc == 3 )
|
||||||
|
|
|
@ -46,7 +46,9 @@ ADD_LIBRARY(CMakeTestModule MODULE moduleFile.c)
|
||||||
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DTEST_C_FLAGS")
|
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DTEST_C_FLAGS")
|
||||||
ADD_LIBRARY(CMakeTestCLibraryShared SHARED testConly.c)
|
ADD_LIBRARY(CMakeTestCLibraryShared SHARED testConly.c)
|
||||||
SET_TARGET_PROPERTIES(CMakeTestCLibraryShared PROPERTIES FOO BAR)
|
SET_TARGET_PROPERTIES(CMakeTestCLibraryShared PROPERTIES FOO BAR)
|
||||||
SET_TARGET_PROPERTIES(CMakeTestCLibraryShared PROPERTIES LINK_FLAGS "-lm")
|
IF(NOT BEOS) # No libm on BeOS.
|
||||||
|
SET_TARGET_PROPERTIES(CMakeTestCLibraryShared PROPERTIES LINK_FLAGS "-lm")
|
||||||
|
ENDIF(NOT BEOS)
|
||||||
GET_TARGET_PROPERTY(FOO_BAR_VAR CMakeTestCLibraryShared FOO)
|
GET_TARGET_PROPERTY(FOO_BAR_VAR CMakeTestCLibraryShared FOO)
|
||||||
IF(${FOO_BAR_VAR} MATCHES "BAR")
|
IF(${FOO_BAR_VAR} MATCHES "BAR")
|
||||||
ELSE(${FOO_BAR_VAR} MATCHES "BAR")
|
ELSE(${FOO_BAR_VAR} MATCHES "BAR")
|
||||||
|
|
|
@ -46,7 +46,9 @@ ADD_LIBRARY(CMakeTestModule MODULE moduleFile.c)
|
||||||
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DTEST_C_FLAGS")
|
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DTEST_C_FLAGS")
|
||||||
ADD_LIBRARY(CMakeTestCLibraryShared SHARED testConly.c)
|
ADD_LIBRARY(CMakeTestCLibraryShared SHARED testConly.c)
|
||||||
SET_TARGET_PROPERTIES(CMakeTestCLibraryShared PROPERTIES FOO BAR)
|
SET_TARGET_PROPERTIES(CMakeTestCLibraryShared PROPERTIES FOO BAR)
|
||||||
SET_TARGET_PROPERTIES(CMakeTestCLibraryShared PROPERTIES LINK_FLAGS "-lm")
|
IF(NOT BEOS) # No libm on BeOS.
|
||||||
|
SET_TARGET_PROPERTIES(CMakeTestCLibraryShared PROPERTIES LINK_FLAGS "-lm")
|
||||||
|
ENDIF(NOT BEOS)
|
||||||
GET_TARGET_PROPERTY(FOO_BAR_VAR CMakeTestCLibraryShared FOO)
|
GET_TARGET_PROPERTY(FOO_BAR_VAR CMakeTestCLibraryShared FOO)
|
||||||
IF(${FOO_BAR_VAR} MATCHES "BAR")
|
IF(${FOO_BAR_VAR} MATCHES "BAR")
|
||||||
ELSE(${FOO_BAR_VAR} MATCHES "BAR")
|
ELSE(${FOO_BAR_VAR} MATCHES "BAR")
|
||||||
|
|
|
@ -46,7 +46,9 @@ ADD_LIBRARY(CMakeTestModule MODULE moduleFile.c)
|
||||||
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DTEST_C_FLAGS")
|
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DTEST_C_FLAGS")
|
||||||
ADD_LIBRARY(CMakeTestCLibraryShared SHARED testConly.c)
|
ADD_LIBRARY(CMakeTestCLibraryShared SHARED testConly.c)
|
||||||
SET_TARGET_PROPERTIES(CMakeTestCLibraryShared PROPERTIES FOO BAR)
|
SET_TARGET_PROPERTIES(CMakeTestCLibraryShared PROPERTIES FOO BAR)
|
||||||
SET_TARGET_PROPERTIES(CMakeTestCLibraryShared PROPERTIES LINK_FLAGS "-lm")
|
IF(NOT BEOS) # No libm on BeOS.
|
||||||
|
SET_TARGET_PROPERTIES(CMakeTestCLibraryShared PROPERTIES LINK_FLAGS "-lm")
|
||||||
|
ENDIF(NOT BEOS)
|
||||||
GET_TARGET_PROPERTY(FOO_BAR_VAR CMakeTestCLibraryShared FOO)
|
GET_TARGET_PROPERTY(FOO_BAR_VAR CMakeTestCLibraryShared FOO)
|
||||||
IF(${FOO_BAR_VAR} MATCHES "BAR")
|
IF(${FOO_BAR_VAR} MATCHES "BAR")
|
||||||
ELSE(${FOO_BAR_VAR} MATCHES "BAR")
|
ELSE(${FOO_BAR_VAR} MATCHES "BAR")
|
||||||
|
|
|
@ -135,6 +135,13 @@ CHECK_LIBRARY_EXISTS_CONCAT("ucb" gethostname HAVE_LIBUCB)
|
||||||
CHECK_LIBRARY_EXISTS_CONCAT("socket" connect HAVE_LIBSOCKET)
|
CHECK_LIBRARY_EXISTS_CONCAT("socket" connect HAVE_LIBSOCKET)
|
||||||
CHECK_LIBRARY_EXISTS("c" gethostbyname "" NOT_NEED_LIBNSL)
|
CHECK_LIBRARY_EXISTS("c" gethostbyname "" NOT_NEED_LIBNSL)
|
||||||
|
|
||||||
|
# Yellowtab Zeta needs different libraries than BeOS 5.
|
||||||
|
IF(BEOS)
|
||||||
|
SET(NOT_NEED_LIBNSL 1)
|
||||||
|
CHECK_LIBRARY_EXISTS_CONCAT("bind" gethostbyname HAVE_LIBBIND)
|
||||||
|
CHECK_LIBRARY_EXISTS_CONCAT("bnetapi" closesocket HAVE_LIBBNETAPI)
|
||||||
|
ENDIF(BEOS)
|
||||||
|
|
||||||
IF(NOT NOT_NEED_LIBNSL)
|
IF(NOT NOT_NEED_LIBNSL)
|
||||||
CHECK_LIBRARY_EXISTS_CONCAT("nsl" gethostbyname HAVE_LIBNSL)
|
CHECK_LIBRARY_EXISTS_CONCAT("nsl" gethostbyname HAVE_LIBNSL)
|
||||||
ENDIF(NOT NOT_NEED_LIBNSL)
|
ENDIF(NOT NOT_NEED_LIBNSL)
|
||||||
|
|
|
@ -197,11 +197,13 @@ void
|
||||||
th_set_mode(TAR *t, mode_t fmode)
|
th_set_mode(TAR *t, mode_t fmode)
|
||||||
{
|
{
|
||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
|
#ifndef __BEOS__
|
||||||
if (S_ISSOCK(fmode))
|
if (S_ISSOCK(fmode))
|
||||||
{
|
{
|
||||||
fmode &= ~S_IFSOCK;
|
fmode &= ~S_IFSOCK;
|
||||||
fmode |= S_IFIFO;
|
fmode |= S_IFIFO;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
/* Looks like on windows the st_mode is longer than 8 characters. */
|
/* Looks like on windows the st_mode is longer than 8 characters. */
|
||||||
int_to_oct(fmode & 07777777, (t)->th_buf.mode, 8);
|
int_to_oct(fmode & 07777777, (t)->th_buf.mode, 8);
|
||||||
|
|
|
@ -116,7 +116,7 @@ tar_set_file_perms(TAR *t, char *realname)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
/* change permissions */
|
/* change permissions */
|
||||||
if (!TH_ISSYM(t) && chmod(filename, mode) == -1)
|
if (!TH_ISSYM(t) && chmod(filename, mode & 07777) == -1)
|
||||||
{
|
{
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
perror("chmod()");
|
perror("chmod()");
|
||||||
|
@ -718,6 +718,7 @@ tar_extract_dir(TAR *t, char *realname)
|
||||||
char *filename;
|
char *filename;
|
||||||
char buf[T_BLOCKSIZE];
|
char buf[T_BLOCKSIZE];
|
||||||
char *pathname = 0;
|
char *pathname = 0;
|
||||||
|
size_t len = 0;
|
||||||
|
|
||||||
if (!TH_ISDIR(t))
|
if (!TH_ISDIR(t))
|
||||||
{
|
{
|
||||||
|
@ -750,14 +751,23 @@ tar_extract_dir(TAR *t, char *realname)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Strip trailing '/'...it confuses some Unixes (and BeOS)... */
|
||||||
|
strncpy(buf, filename, sizeof(buf)-1);
|
||||||
|
buf[sizeof(buf)-1] = 0;
|
||||||
|
len = strlen(buf);
|
||||||
|
if ((len > 0) && (buf[len-1] == '/'))
|
||||||
|
{
|
||||||
|
buf[len-1] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
printf(" ==> extracting: %s (mode %04o, directory)\n", filename,
|
printf(" ==> extracting: %s (mode %04o, directory)\n", filename,
|
||||||
mode);
|
mode);
|
||||||
#endif
|
#endif
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
if (mkdir(filename) == -1)
|
if (mkdir(buf) == -1)
|
||||||
#else
|
#else
|
||||||
if (mkdir(filename, mode) == -1)
|
if (mkdir(buf, mode & 07777) == -1)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
#ifdef __BORLANDC__
|
#ifdef __BORLANDC__
|
||||||
|
@ -772,7 +782,7 @@ tar_extract_dir(TAR *t, char *realname)
|
||||||
#endif
|
#endif
|
||||||
if (errno == EEXIST)
|
if (errno == EEXIST)
|
||||||
{
|
{
|
||||||
if (chmod(filename, mode) == -1)
|
if (chmod(filename, mode & 07777) == -1)
|
||||||
{
|
{
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
perror("chmod()");
|
perror("chmod()");
|
||||||
|
@ -860,7 +870,7 @@ tar_extract_fifo(TAR *t, char *realname)
|
||||||
printf(" ==> extracting: %s (fifo)\n", filename);
|
printf(" ==> extracting: %s (fifo)\n", filename);
|
||||||
#endif
|
#endif
|
||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
if (mkfifo(filename, mode) == -1)
|
if (mkfifo(filename, mode & 07777) == -1)
|
||||||
#else
|
#else
|
||||||
(void)mode;
|
(void)mode;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -99,8 +99,13 @@ static int libtar_gzopen(void* call_data, const char *pathname,
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !defined(_WIN32) || defined(__CYGWIN__)
|
#if defined(__BEOS__) && !defined(__ZETA__) // no fchmod on BeOS...do pathname instead.
|
||||||
if ((oflags & O_CREAT) && fchmod(fd, mode))
|
if ((oflags & O_CREAT) && chmod(pathname, mode & 07777))
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
#elif !defined(_WIN32) || defined(__CYGWIN__)
|
||||||
|
if ((oflags & O_CREAT) && fchmod(fd, mode & 07777))
|
||||||
{
|
{
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -100,6 +100,13 @@ mkdirhier(char *path)
|
||||||
if (*dirp == '\0')
|
if (*dirp == '\0')
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Don't try to build current or parent dir. It doesn't make sense anyhow,
|
||||||
|
* but it also returns EINVAL instead of EEXIST on BeOS!
|
||||||
|
*/
|
||||||
|
if ((strcmp(dirp, ".") == 0) || (strcmp(dirp, "..") == 0))
|
||||||
|
continue;
|
||||||
|
|
||||||
if (dst[0] != '\0')
|
if (dst[0] != '\0')
|
||||||
strcat(dst, "/");
|
strcat(dst, "/");
|
||||||
strcat(dst, dirp);
|
strcat(dst, dirp);
|
||||||
|
|
|
@ -10,6 +10,11 @@
|
||||||
|
|
||||||
#include "xmlrpc_config.h"
|
#include "xmlrpc_config.h"
|
||||||
|
|
||||||
|
#if defined(__BEOS__)
|
||||||
|
/* Some helpful system header has char==bool, then bool.h does int==bool. */
|
||||||
|
#define HAVE_BOOL 1
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "bool.h"
|
#include "bool.h"
|
||||||
#include "mallocvar.h"
|
#include "mallocvar.h"
|
||||||
#include "linklist.h"
|
#include "linklist.h"
|
||||||
|
|
14
bootstrap
14
bootstrap
|
@ -52,6 +52,13 @@ else
|
||||||
cmake_system_darwin=false
|
cmake_system_darwin=false
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Determine whether this is BeOS
|
||||||
|
if echo "${cmake_system}" | grep BeOS >/dev/null 2>&1; then
|
||||||
|
cmake_system_beos=true
|
||||||
|
else
|
||||||
|
cmake_system_beos=false
|
||||||
|
fi
|
||||||
|
|
||||||
# Choose the generator to use for bootstrapping.
|
# Choose the generator to use for bootstrapping.
|
||||||
if ${cmake_system_mingw}; then
|
if ${cmake_system_mingw}; then
|
||||||
# Bootstrapping from an MSYS prompt.
|
# Bootstrapping from an MSYS prompt.
|
||||||
|
@ -549,6 +556,13 @@ else
|
||||||
cmake_ld_flags=${LDFLAGS}
|
cmake_ld_flags=${LDFLAGS}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Add BeOS toolkits...
|
||||||
|
if ${cmake_system_beos}; then
|
||||||
|
cmake_ld_flags="${LDFLAGS} -lroot -lbe"
|
||||||
|
else
|
||||||
|
cmake_ld_flags=${LDFLAGS}
|
||||||
|
fi
|
||||||
|
|
||||||
# Test C compiler
|
# Test C compiler
|
||||||
cmake_c_compiler=
|
cmake_c_compiler=
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue