// replaced qprintf with Sys_Printf
#include "cmdlib.h"
+#include "globaldefs.h"
#include "mathlib.h"
#include "inout.h"
#include <sys/types.h>
#include <sys/stat.h>
-#ifdef _WIN32
+#if GDEF_OS_WINDOWS
#include <direct.h>
#include <windows.h>
#endif
-#if defined ( __linux__ ) || defined ( __APPLE__ )
+#if GDEF_OS_LINUX || GDEF_OS_MACOS
#include <unistd.h>
#endif
#define MAX_EX_ARGC 1024
int ex_argc;
char *ex_argv[MAX_EX_ARGC];
-#ifdef _WIN32
+#if GDEF_OS_WINDOWS
#include "io.h"
void ExpandWildcards( int *argc, char ***argv ){
struct _finddata_t fileinfo;
}
strncpy( qdir, path, c + len + count - path );
Sys_Printf( "qdir: %s\n", qdir );
- for ( i = 0; i < strlen( qdir ); i++ )
+ for ( i = 0; i < (int) strlen( qdir ); i++ )
{
if ( qdir[i] == '\\' ) {
qdir[i] = '/';
if ( *c == '/' || *c == '\\' ) {
strncpy( gamedir, path, c + 1 - path );
- for ( i = 0; i < strlen( gamedir ); i++ )
+ for ( i = 0; i < (int) strlen( gamedir ); i++ )
{
if ( gamedir[i] == '\\' ) {
gamedir[i] = '/';
char *ExpandPath( const char *path ){
static char full[1024];
- if ( !qdir ) {
- Error( "ExpandPath called without qdir set" );
- }
if ( path[0] == '/' || path[0] == '\\' || path[1] == ':' ) {
strcpy( full, path );
return full;
return full;
}
-char *ExpandGamePath( const char *path ){
- static char full[1024];
- if ( !qdir ) {
- Error( "ExpandGamePath called without qdir set" );
- }
- if ( path[0] == '/' || path[0] == '\\' || path[1] == ':' ) {
- strcpy( full, path );
- return full;
- }
- sprintf( full, "%s%s", gamedir, path );
- return full;
-}
-
-char *ExpandPathAndArchive( const char *path ){
- char *expanded;
- char archivename[1024];
-
- expanded = ExpandPath( path );
-
- if ( archive ) {
- sprintf( archivename, "%s/%s", archivedir, path );
- QCopyFile( expanded, archivename );
- }
- return expanded;
-}
-
-
char *copystring( const char *s ){
char *b;
b = safe_malloc( strlen( s ) + 1 );
void Q_getwd( char *out ){
int i = 0;
-#ifdef WIN32
+#if GDEF_OS_WINDOWS
_getcwd( out, 256 );
strcat( out, "\\" );
#else
// Gef: Changed from getwd() to getcwd() to avoid potential buffer overflow
- getcwd( out, 256 );
+ if ( !getcwd( out, 256 ) ) {
+ *out = 0;
+ }
strcat( out, "/" );
#endif
while ( out[i] != 0 )
void Q_mkdir( const char *path ){
-#ifdef WIN32
- if ( _mkdir( path ) != -1 ) {
- return;
- }
+ char parentbuf[256];
+ const char *p = NULL;
+ int retry = 2;
+ while ( retry-- )
+ {
+#if GDEF_OS_WINDOWS
+ const char *q = NULL;
+ if ( _mkdir( path ) != -1 ) {
+ return;
+ }
+ if ( errno == ENOENT ) {
+ p = strrchr( path, '/' );
+ q = strrchr( path, '\\' );
+ if ( q && ( !p || q < p ) ) {
+ p = q;
+ }
+ }
#else
- if ( mkdir( path, 0777 ) != -1 ) {
- return;
- }
+ if ( mkdir( path, 0777 ) != -1 ) {
+ return;
+ }
+ if ( errno == ENOENT ) {
+ p = strrchr( path, '/' );
+ }
#endif
+ if ( p ) {
+ strncpy( parentbuf, path, sizeof( parentbuf ) );
+ if ( (int) ( p - path ) < (int) sizeof( parentbuf ) ) {
+ parentbuf[p - path] = 0;
+ Sys_Printf( "mkdir: %s: creating parent %s first\n", path, parentbuf );
+ Q_mkdir( parentbuf );
+ continue;
+ }
+ }
+ break;
+ }
if ( errno != EEXIST ) {
Error( "mkdir %s: %s",path, strerror( errno ) );
}
============================================================================
*/
-#ifdef _SGI_SOURCE
-#define __BIG_ENDIAN__
-#endif
-
-#ifdef __BIG_ENDIAN__
+#if GDEF_ARCH_ENDIAN_BIG
short LittleShort( short l ){
byte b1,b2;
char c;
char dir[1024];
-#ifdef _WIN32
+#if GDEF_OS_WINDOWS
int olddrive = -1;
if ( path[1] == ':' ) {
}
}
-#ifdef _WIN32
+#if GDEF_OS_WINDOWS
if ( olddrive != -1 ) {
_chdrive( olddrive );
}
}
void Sys_Sleep( int n ){
-#ifdef WIN32
+#if GDEF_OS_WINDOWS
Sleep( n );
#endif
-#if defined ( __linux__ ) || defined ( __APPLE__ )
+#if GDEF_OS_LINUX || GDEF_OS_MACOS
usleep( n * 1000 );
#endif
}