53#if defined(WIZARDSTOOLKIT_THREAD_SUPPORT)
56#if defined(WIZARDSTOOLKIT_WINDOWS_SUPPORT)
118#if defined(WIZARDSTOOLKIT_THREAD_SUPPORT)
119 return((
size_t) pthread_self());
120#elif defined(WIZARDSTOOLKIT_WINDOWS_SUPPORT)
121 return((
size_t) GetCurrentThreadId());
123 return((
size_t) getpid());
148 assert(file_info != (
FileInfo *) NULL);
154 for (i=0; i < 10; i++)
157 if (file_info->
file == -1)
162 if (file_info->
file == -1)
168 if (close(file_info->
file) == -1)
170 "unable to close file `%s': %s",path,strerror(errno));
171 file_info->
file=(-1);
183#if defined(WIZARDSTOOLKIT_WINDOWS_SUPPORT)
188 handle=OpenProcess(PROCESS_ALL_ACCESS,FALSE,(DWORD) pid);
190 if (handle != (HANDLE) NULL)
203 FileError,
"unable to remove file `%s': %s",path,
211 pid=(ssize_t) getpid();
215 if (close(file_info->
file) == -1)
217 "unable to close file `%s': %s",path,strerror(errno));
218 file_info->
file=(-1);
269 assert(relative_path != (
char *) NULL);
276 "memory allocation failed `%s'",strerror(errno));
279 (void) memset(file_info,0,
sizeof(*file_info));
281 file_info->
file=(-1);
283 file_info->
timestamp=time((time_t *) NULL);
285 if (path != (
char *) NULL)
292 *file_info->
path=
'\0';
294 if (home != (
char *) NULL)
304 if (home == (
char *) NULL)
306 if (home != (
char *) NULL)
313#if defined(WIZARDSTOOLKIT_WINDOWS_SUPPORT)
314 (void) mkdir(file_info->
path);
316 (void) mkdir(file_info->
path,0700);
350 "Invalid file mode `%s'",path);
355 if (file_info->
file < 0)
392 if (file_info->
file >= 0)
393 if (close(file_info->
file) == -1)
396 "unable to close file `%s': %s",file_info->
path,strerror(errno));
399 file_info->
file=(-1);
403 "unable to close file `%s': %s",file_info->
path,strerror(errno));
434 assert(file_info != (
FileInfo *) NULL);
438 if (file_info->
file >= 0)
439 if (close(file_info->
file) == -1)
441 "unable to close file `%s': %s",file_info->
path,strerror(errno));
442 file_info->
file=(-1);
444 if (file_info->
path != (
char *) NULL)
478 assert(file_info != (
FileInfo *) NULL);
480 return(file_info->
file);
508 assert(file_info != (
FileInfo *) NULL);
510 return(file_info->
path);
538 assert(file_info != (
FileInfo *) NULL);
571 assert(file_info != (
FileInfo *) NULL);
575 return((
int) (*buffer));
615 assert(file_info != (
FileInfo *) NULL);
618 for (i=0; i < (ssize_t) length; i+=count)
620 count=read(file_info->
file,(
unsigned char *) data+i,
Min(length-i,(
size_t)
629 if (i < (ssize_t) length)
661 unsigned short *value)
669 assert(file_info != (
FileInfo *) NULL);
671 *buffer=(
unsigned char)
'\0';
675 *value=(
unsigned short) (buffer[1] << 8);
676 *value|=(
unsigned short) buffer[0];
715 assert(file_info != (
FileInfo *) NULL);
717 *buffer=(
unsigned char)
'\0';
721 *value=((size_t) buffer[3]) << 24;
722 *value|=((size_t) buffer[2]) << 16;
723 *value|=((size_t) buffer[1]) << 8;
724 *value|=((size_t) buffer[0]);
763 assert(file_info != (
FileInfo *) NULL);
765 *buffer=(
unsigned char)
'\0';
816 "unable to remove file `%s': %s",path,strerror(errno));
852 const void *data,
const size_t length)
860 assert(file_info != (
FileInfo *) NULL);
863 for (i=0; i < (ssize_t) length; i+=count)
865 count=write(file_info->
file,(
unsigned char *) data+i,length-i);
873 if (i < (ssize_t) length)
905 const unsigned short value)
910 assert(file_info != (
FileInfo *) NULL);
912 buffer[0]=(
unsigned char) value;
913 buffer[1]=(
unsigned char) (value >> 8);
950 assert(file_info != (
FileInfo *) NULL);
951 buffer[0]=(
unsigned char) value;
952 buffer[1]=(
unsigned char) (value >> 8);
953 buffer[2]=(
unsigned char) (value >> 16);
954 buffer[3]=(
unsigned char) (value >> 24);
991 assert(file_info != (
FileInfo *) NULL);
992 buffer[0]=(
unsigned char) value;
993 buffer[1]=(
unsigned char) (value >> 8);
994 buffer[2]=(
unsigned char) (value >> 16);
995 buffer[3]=(
unsigned char) (value >> 24);
996 buffer[4]=(
unsigned char) (value >> 32);
997 buffer[5]=(
unsigned char) (value >> 40);
998 buffer[6]=(
unsigned char) (value >> 48);
999 buffer[7]=(
unsigned char) (value >> 56);
#define WizardMaxBufferExtent
WizardExport WizardBooleanType ThrowWizardException(ExceptionInfo *exception, const char *module, const char *function, const size_t line, const ExceptionType severity, const char *format,...)
WizardExport WizardBooleanType ReadFile64Bits(FileInfo *file_info, WizardSizeType *value)
WizardExport const char * GetFilePath(const FileInfo *file_info)
static WizardBooleanType AcquireFileLock(FileInfo *file_info, ExceptionInfo *exception)
static size_t GetWizardThreadId(void)
WizardExport FileInfo * AcquireFileInfo(const char *path, const char *relative_path, const FileMode mode, ExceptionInfo *exception)
WizardExport WizardBooleanType WriteFile32Bits(FileInfo *file_info, const size_t value)
WizardExport WizardBooleanType WriteFile64Bits(FileInfo *file_info, const WizardSizeType value)
static WizardBooleanType RelinquishFileLock(FileInfo *, ExceptionInfo *)
WizardExport WizardBooleanType DestroyFile(FileInfo *file_info, ExceptionInfo *exception)
WizardExport int ReadFileByte(FileInfo *file_info)
WizardExport WizardBooleanType WriteFile16Bits(FileInfo *file_info, const unsigned short value)
WizardExport const struct stat * GetFileProperties(const FileInfo *file_info)
WizardExport WizardBooleanType ReadFileChunk(FileInfo *file_info, void *data, const size_t length)
WizardExport int GetFileDescriptor(const FileInfo *file_info)
WizardExport WizardBooleanType WriteFileChunk(FileInfo *file_info, const void *data, const size_t length)
WizardExport WizardBooleanType ReadFile32Bits(FileInfo *file_info, size_t *value)
WizardExport FileInfo * DestroyFileInfo(FileInfo *file_info, ExceptionInfo *exception)
WizardExport WizardBooleanType ReadFile16Bits(FileInfo *file_info, unsigned short *value)
WizardBooleanType LogWizardEvent(const LogEventType type, const char *module, const char *function, const size_t line, const char *format,...)
#define GetWizardModule()
WizardExport void * AcquireWizardMemory(const size_t size)
WizardExport void * RelinquishWizardMemory(void *memory)
WizardExport void RelinquishSemaphoreInfo(SemaphoreInfo **semaphore_info)
WizardExport SemaphoreInfo * AcquireSemaphoreInfo(void)
WizardExport void LockSemaphoreInfo(SemaphoreInfo *semaphore_info)
WizardExport void UnlockSemaphoreInfo(SemaphoreInfo *semaphore_info)
WizardExport char * DestroyString(char *string)
WizardExport size_t ConcatenateWizardString(char *destination, const char *source, const size_t length)
WizardExport char * AcquireString(const char *source)
WizardExport char * GetEnvironmentValue(const char *name)
WizardExport size_t CopyWizardString(char *destination, const char *source, const size_t length)
SemaphoreInfo * semaphore
#define DirectorySeparator
static int open_utf8(const char *path, int flags, mode_t mode)
static int remove_utf8(const char *path)
WizardExport void WizardDelay(const WizardSizeType)
WizardExport void AppendFileExtension(const char *extension, char *filename)
unsigned int WizardStatusType