mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 13:37:05 +00:00
+ Got rid of zip lib requirement in G3D...
Still can re-enable code by defining _HAVE_ZIP...
+ Remove silly X11 lib dependency from G3D
Code doesn't seem to do anything yet anyway, and even if, we don't want it :p
+ Fix another weird G3D build problem...
+ Remove some __asm usage in g3d, which is not available on Win64
My editor also decided to remove a ton of trailing white spaces...tss...
+ Reapply G3D fixes for 64bit VC
+ not use SSE specific header when SSE not enabled in *nix
+ Updated project files
+ New vmap_assembler VC90/VC80 Project
+ vmap assembler binaries updates
NOTE: Old vmap fikes expected work (as tests show) with new library version.
But better use new generated versions. Its different in small parts to bad or good...
(based on Lynx3d's repo commit 44798d3)
Signed-off-by: VladimirMangos <vladimir@getmangos.com>
254 lines
7.1 KiB
C++
254 lines
7.1 KiB
C++
/**
|
|
@file fileutils.h
|
|
|
|
@maintainer Morgan McGuire, http://graphics.cs.williams.edu
|
|
|
|
@author 2002-06-06
|
|
@edited 2010-02-06
|
|
|
|
Copyright 2000-2010, Morgan McGuire.
|
|
All rights reserved.
|
|
*/
|
|
|
|
#ifndef G3D_fileUtils_h
|
|
#define G3D_fileUtils_h
|
|
|
|
#include "G3D/platform.h"
|
|
#include <string>
|
|
#include <stdio.h>
|
|
#include "G3D/Array.h"
|
|
#include "G3D/Set.h"
|
|
#include "G3D/g3dmath.h"
|
|
|
|
#ifdef G3D_WIN32
|
|
// For chdir, mkdir, etc.
|
|
# include <direct.h>
|
|
#endif
|
|
|
|
namespace G3D {
|
|
|
|
namespace _internal {
|
|
extern Set<std::string> currentFilesUsed;
|
|
}
|
|
|
|
/** Returns all the files used by G3D and GLG3D during the current execution. */
|
|
Array<std::string> filesUsed();
|
|
|
|
std::string readWholeFile(
|
|
const std::string& filename);
|
|
|
|
|
|
/** Reads from a zip file and decompresses the desired contents
|
|
into memory. Does not support recursive zip calls (i.e. a .zip
|
|
stored within another .zip)
|
|
|
|
@param file the path, of the format C:\\...\\something.zip\\...\\desiredfile.ext
|
|
@param data a pointer to the memory where the file will be stored
|
|
@param length the size of the file decompressed to memory */
|
|
void zipRead(const std::string& file,
|
|
void*& data,
|
|
size_t& length);
|
|
|
|
|
|
/** Closes the contents of a zip file that had been decompressed to
|
|
memory. Must be called in tandem with zipRead() to avoid memory
|
|
leaks.
|
|
|
|
@param data the pointer to the decompressed file in memory */
|
|
void zipClose(void* data);
|
|
|
|
|
|
/**
|
|
@param flush If true (default), the file is ready for reading as soon
|
|
as the function returns. If false, the function returns immediately and
|
|
writes the file in the background.
|
|
*/
|
|
void writeWholeFile(
|
|
const std::string& filename,
|
|
const std::string& str,
|
|
bool flush = true);
|
|
|
|
/**
|
|
Creates the directory (which may optionally end in a /)
|
|
and any parents needed to reach it.
|
|
*/
|
|
void createDirectory(
|
|
const std::string& dir);
|
|
|
|
/**
|
|
Fully qualifies a filename. The filename may contain wildcards,
|
|
in which case the wildcards will be preserved in the returned value.
|
|
*/
|
|
std::string resolveFilename(const std::string& filename);
|
|
|
|
/**
|
|
Appends all files matching filespec to the files array. The names
|
|
will not contain paths unless includePath == true. These may be
|
|
relative to the current directory unless the filespec is fully qualified
|
|
(can be done with resolveFilename).
|
|
Wildcards can only appear to the right of the last slash in filespec.
|
|
Works with .zip files used as paths, if filespec is passed in the form
|
|
C:\\...\\something.zip\\* Does not work recursively with zipfiles (a
|
|
.zip within a .zip will not work)
|
|
*/
|
|
void getFiles(
|
|
const std::string& filespec,
|
|
Array<std::string>& files,
|
|
bool includePath = false);
|
|
|
|
/**
|
|
Appends all directories matching filespec to the files array. The names
|
|
will not contain paths unless includePath == true. These may be
|
|
relative to the current directory unless the filespec is fully qualified
|
|
(can be done with resolveFilename).
|
|
Does not append special directories "." or "..".
|
|
Works with .zip files used as paths, if filespec is passed in the form
|
|
C:\\...\\something.zip\\* Does not work recursively with zipfiles (a
|
|
.zip within a .zip will not work)
|
|
*/
|
|
void getDirs(
|
|
const std::string& filespec,
|
|
Array<std::string>& files,
|
|
bool includePath = false);
|
|
|
|
|
|
/** Returns true if the specified path exists and is a directory */
|
|
bool isDirectory(const std::string& filespec);
|
|
|
|
|
|
/** Returns true if the specified filename exists and is a zipfile */
|
|
bool isZipfile(const std::string& filename);
|
|
|
|
|
|
/** Returns the length of the file. If
|
|
filename specifies a path that contains a zipfile, but the
|
|
contents within are specified correctly, returns the
|
|
uncompressed size of the requested file. Returns -1 if
|
|
the file does not exist.
|
|
|
|
@param filename the path to test, may contain .zip
|
|
*/
|
|
int64 fileLength(const std::string& filename);
|
|
|
|
/**
|
|
Copies the file
|
|
*/
|
|
void copyFile(
|
|
const std::string& source,
|
|
const std::string& dest);
|
|
|
|
/** Returns a temporary file that is open for read/write access. This
|
|
tries harder than the ANSI tmpfile, so it may succeed when that fails. */
|
|
FILE* createTempFile();
|
|
|
|
/**
|
|
Returns true if the given file (or directory) exists.
|
|
|
|
\param filename the path to test. must not end in a trailing slash.
|
|
\param lookInZipfiles if the path does not exist, calls zipfileExists()
|
|
\param trustCache If true and \a lookInZipfiles is true, cache directory and zipfile contents
|
|
so that subsequent calls to the same directory are fast.
|
|
|
|
\sa G3D::clearFileSystemCache, G3D::zipfileExists
|
|
*/
|
|
bool fileExists
|
|
(const std::string& filename,
|
|
bool lookInZipfiles = true,
|
|
bool trustCache = true);
|
|
|
|
|
|
/** Clears the cache used by fileExists */
|
|
void clearFileSystemCache();
|
|
|
|
/**
|
|
Returns true if the given file (or directory) exists
|
|
within a zipfile. Called if fileExists initially
|
|
returns false and the lookInZipfiles flag has been set.
|
|
Must not end in a trailing slash. Does not work for recursive
|
|
zipfiles (.zips within another .zip)
|
|
|
|
@param filename the path to test
|
|
@param outZipfile the path to the .zip file
|
|
@param outInternalFile the path (within the .zip) where the desired file is located, if valid
|
|
|
|
*/
|
|
bool zipfileExists
|
|
(const std::string& filename,
|
|
std::string& outZipfile,
|
|
std::string& outInternalFile);
|
|
|
|
bool zipfileExists(const std::string& filename);
|
|
|
|
/**
|
|
Parses a filename into four useful pieces.
|
|
|
|
Examples:
|
|
|
|
c:\\a\\b\\d.e
|
|
root = "c:\\"
|
|
path = "a" "b"
|
|
base = "d"
|
|
ext = "e"
|
|
|
|
/a/b/d.e
|
|
root = "/"
|
|
path = "a" "b"
|
|
base = "d"
|
|
ext = "e"
|
|
|
|
/a/b
|
|
root = "/"
|
|
path = "a"
|
|
base = "b"
|
|
ext = "e"
|
|
|
|
*/
|
|
void parseFilename(
|
|
const std::string& filename,
|
|
std::string& drive,
|
|
Array<std::string>& path,
|
|
std::string& base,
|
|
std::string& ext);
|
|
|
|
|
|
/**
|
|
Returns the part of the filename that includes the base and ext from
|
|
parseFilename (i.e. everything to the right of the path).
|
|
*/
|
|
std::string filenameBaseExt(const std::string& filename);
|
|
|
|
/**
|
|
Returns the extension on a filename.
|
|
*/
|
|
std::string filenameExt(const std::string& filename);
|
|
|
|
|
|
/** Returns the portion of a filename to the left of the last period
|
|
and to the right of the last slash or colon.
|
|
*/
|
|
std::string filenameBase(const std::string& filename);
|
|
|
|
/** Creates a unique filename base in the current directory using the
|
|
specified prefix and suffix.*/
|
|
std::string generateFilenameBase(const std::string& prefix = "", const std::string& suffix = "");
|
|
|
|
/**
|
|
Returns the drive (if Win32) and path from a filename, including
|
|
a slash if there was one.
|
|
<CODE>filenamePath(f) + filenameBaseExt(f) == f</CODE>
|
|
*/
|
|
std::string filenamePath(const std::string& filename);
|
|
|
|
/** Returns true if '*' or '?' appears in the string */
|
|
bool filenameContainsWildcards(const std::string& filename);
|
|
|
|
/** Returns true if dst does not exist or src is newer than dst. Works on both files and directories. */
|
|
bool fileIsNewer(const std::string& src, const std::string& dst);
|
|
|
|
/** Appends file onto dirname, ensuring a / if needed. */
|
|
std::string pathConcat(const std::string& dirname, const std::string& file);
|
|
|
|
} // namespace
|
|
|
|
#endif
|
|
|