61#define MimeFilename "mime.xml"
111 "<?xml version=\"1.0\"?>"
168#if !defined(WIZARDSTOOLKIT_EMBEDDABLE_SUPPORT)
226 const unsigned char *magic,
const size_t length,
ExceptionInfo *exception)
260 if ((magic == (
const unsigned char *) NULL) || (length == 0))
265 while (p != (
const MimeInfo *) NULL)
268 if (mime_info != (
const MimeInfo *) NULL)
274 if ((p->
pattern != (
char *) NULL) && (filename != (
char *) NULL))
285 if ((
size_t) (p->
offset+4) > length)
288 value=(ssize_t) (*q++);
291 if (p->
value == value)
303 if ((
size_t) (p->
offset+4) > length)
311 value=(ssize_t) (*q++);
316 value=(ssize_t) (*q++) << 8;
321 if (p->
value == value)
333 if ((
size_t) (p->
offset+4) > length)
341 value=(ssize_t) (*q++);
342 value|=((ssize_t) *q++) << 8;
343 value|=((ssize_t) *q++) << 16;
344 value|=((ssize_t) *q++) << 24;
348 value=(ssize_t) (*q++) << 24;
349 value|=((ssize_t) *q++) << 16;
350 value|=((ssize_t) *q++) << 8;
351 value|=((ssize_t) *q++);
355 if (p->
value == value)
368 for (i=0; i <= (ssize_t) p->
extent; i++)
383 if (mime_info != (
const MimeInfo *) NULL)
420#if defined(__cplusplus) || defined(c_plusplus)
432 if (strcasecmp((*p)->path,(*q)->path) == 0)
433 return(strcasecmp((*p)->type,(*q)->type));
434 return(strcasecmp((*p)->path,(*q)->path));
437#if defined(__cplusplus) || defined(c_plusplus)
456 assert(pattern != (
char *) NULL);
458 assert(number_aliases != (
size_t *) NULL);
460 p=
GetMimeInfo((
char *) NULL,(
unsigned char *)
"*",0,exception);
465 if (aliases == (
const MimeInfo **) NULL)
473 for (i=0; p != (
const MimeInfo *) NULL; )
483 *number_aliases=(size_t) i;
517#if defined(__cplusplus) || defined(c_plusplus)
529 return(strcasecmp(p,q));
532#if defined(__cplusplus) || defined(c_plusplus)
551 assert(pattern != (
char *) NULL);
553 assert(number_aliases != (
size_t *) NULL);
555 p=
GetMimeInfo((
char *) NULL,(
unsigned char *)
"*",0,exception);
557 return((
char **) NULL);
560 if (aliases == (
char **) NULL)
561 return((
char **) NULL);
565 for (i=0; p != (
const MimeInfo *) NULL; )
573 qsort((
void *) aliases,(
size_t) i,
sizeof(*aliases),
MimeCompare);
574 aliases[i]=(
char *) NULL;
575 *number_aliases=(size_t) i;
604 assert(mime_info != (
MimeInfo *) NULL);
634 assert(mime_info != (
MimeInfo *) NULL);
636 return(mime_info->
type);
717 if (file == (
const FILE *) NULL)
720 if (mime_info == (
const MimeInfo **) NULL)
723 path=(
const char *) NULL;
724 for (i=0; i < (ssize_t) number_aliases; i++)
728 if ((path == (
const char *) NULL) ||
729 (strcasecmp(path,mime_info[i]->path) != 0))
731 if (mime_info[i]->path != (
char *) NULL)
732 (
void) fprintf(file,
"\nPath: %s\n\n",mime_info[i]->path);
733 (void) fprintf(file,
"Type Description\n");
734 (void) fprintf(file,
"-------------------------------------------------"
735 "------------------------------\n");
737 path=mime_info[i]->
path;
738 (void) fprintf(file,
"%s",mime_info[i]->type);
739 if (strlen(mime_info[i]->type) <= 25)
741 for (j=(ssize_t) strlen(mime_info[i]->type); j <= 27; j++)
742 (
void) fprintf(file,
" ");
746 (void) fprintf(file,
"\n");
747 for (j=0; j <= 27; j++)
748 (
void) fprintf(file,
" ");
750 if (mime_info[i]->description != (
char *) NULL)
751 (void) fprintf(file,
"%s",mime_info[i]->description);
752 (void) fprintf(file,
"\n");
791 const char *xml,
const char *filename,
const size_t depth,
812 "Loading mime map \"%s\" ...",filename);
813 if (xml == (
const char *) NULL)
826 if (attribute != (
const char *) NULL)
830 ConfigureError,
"include element nested too deeply `%s'",filename);
846 if (xml != (
char *) NULL)
867 (void) memset(mime_info,0,
sizeof(*mime_info));
871 if (attribute != (
const char *) NULL)
875 if (attribute != (
const char *) NULL)
878 if (attribute != (
const char *) NULL)
882 if (attribute != (
const char *) NULL)
899 for (p=token; *p !=
'\0'; )
904 if (isdigit((
int) ((
unsigned char) *p)) != 0)
909 *q++=(
unsigned char) strtol(p,&end,8);
916 case 'b': *q=
'\b';
break;
917 case 'f': *q=
'\f';
break;
918 case 'n': *q=
'\n';
break;
919 case 'r': *q=
'\r';
break;
920 case 't': *q=
'\t';
break;
921 case 'v': *q=
'\v';
break;
922 case 'a': *q=
'a';
break;
923 case '?': *q=
'\?';
break;
924 default: *q=(
unsigned char) (*p);
break;
931 *q++=(
unsigned char) (*p++);
936 mime_info->
value=strtol((
char *) mime_info->
magic,(
char **) NULL,0);
939 if (attribute != (
const char *) NULL)
940 mime_info->
mask=strtol(attribute,(
char **) NULL,0);
942 if (attribute != (
const char *) NULL)
949 mime_info->
extent=(size_t) strtol(c+1,(
char **) NULL,0);
952 if (attribute != (
const char *) NULL)
955 if (attribute != (
const char *) NULL)
956 mime_info->
priority=strtol(attribute,(
char **) NULL,0);
958 if (attribute != (
const char *) NULL)
961 if (attribute != (
const char *) NULL)
966 "memory allocation failed `%s'",filename);
1023 if (p->
magic != (
unsigned char *) NULL)
1025 if (p->
pattern != (
char *) NULL)
1029 if (p->
type != (
char *) NULL)
1031 if (p->
path != (
char *) NULL)
1034 return((
void *) NULL);
1088 mime_info=
GetMimeInfo(filename,(
unsigned char *)
" ",1,exception);
1090 if (mime_info != (
const MimeInfo *) NULL)
#define ThrowFatalException(severity, tag)
WizardExport ExceptionInfo * AcquireExceptionInfo(void)
WizardExport ExceptionInfo * DestroyExceptionInfo(ExceptionInfo *exception)
WizardExport WizardBooleanType ThrowWizardException(ExceptionInfo *exception, const char *module, const char *function, const size_t line, const ExceptionType severity, const char *format,...)
WizardExport WizardBooleanType IsLinkedListEmpty(const LinkedListInfo *list_info)
WizardExport void ResetLinkedListIterator(LinkedListInfo *list_info)
WizardExport size_t GetNumberOfElementsInLinkedList(const LinkedListInfo *list_info)
WizardExport WizardBooleanType AppendValueToLinkedList(LinkedListInfo *list_info, const void *value)
WizardExport WizardBooleanType InsertValueInLinkedList(LinkedListInfo *list_info, const size_t index, const void *value)
WizardExport void * RemoveElementByValueFromLinkedList(LinkedListInfo *list_info, const void *value)
WizardExport LinkedListInfo * NewLinkedList(const size_t capacity)
WizardExport void * GetNextValueInLinkedList(LinkedListInfo *list_info)
WizardExport LinkedListInfo * DestroyLinkedList(LinkedListInfo *list_info, void *(*relinquish_value)(void *))
WizardExport ssize_t FormatLocaleString(char *string, const size_t length, const char *format,...)
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 * AcquireQuantumMemory(const size_t count, const size_t quantum)
WizardExport void * RelinquishWizardMemory(void *memory)
WizardExport const char * GetMimeDescription(const MimeInfo *mime_info)
WizardExport const char * GetMimeType(const MimeInfo *mime_info)
static int MimeCompare(const void *x, const void *y)
WizardExport WizardBooleanType MimeComponentGenesis(void)
static const char * MimeMap
static WizardBooleanType IsMimeCacheInstantiated(ExceptionInfo *)
WizardExport char ** GetMimeList(const char *pattern, size_t *number_aliases, ExceptionInfo *exception)
static LinkedListInfo * AcquireMimeCache(const char *filename, ExceptionInfo *exception)
static int MimeInfoCompare(const void *x, const void *y)
WizardExport void MimeComponentTerminus(void)
static void * DestroyMimeElement(void *mime_info)
WizardExport WizardBooleanType ListMimeInfo(FILE *file, ExceptionInfo *exception)
WizardExport const MimeInfo * GetMimeInfo(const char *filename, const unsigned char *magic, const size_t length, ExceptionInfo *exception)
WizardExport const MimeInfo ** GetMimeInfoList(const char *pattern, size_t *number_aliases, ExceptionInfo *exception)
static LinkedListInfo * mime_cache
WizardExport char * WizardToMime(const char *wizard)
static WizardBooleanType LoadMimeCache(LinkedListInfo *, const char *, const char *, const size_t, ExceptionInfo *)
static SemaphoreInfo * mime_semaphore
WizardExport ssize_t ParseWizardOption(const WizardOption option, const WizardBooleanType list, const char *options)
WizardExport void RelinquishSemaphoreInfo(SemaphoreInfo **semaphore_info)
WizardExport SemaphoreInfo * AcquireSemaphoreInfo(void)
WizardExport void LockSemaphoreInfo(SemaphoreInfo *semaphore_info)
WizardExport void UnlockSemaphoreInfo(SemaphoreInfo *semaphore_info)
WizardExport void ActivateSemaphoreInfo(SemaphoreInfo **semaphore_info)
WizardExport char * DestroyString(char *string)
WizardExport WizardBooleanType SubstituteString(char **string, const char *search, const char *replace)
WizardExport void LocaleLower(char *string)
WizardExport char * ConstantString(const char *source)
WizardExport size_t ConcatenateWizardString(char *destination, const char *source, const size_t length)
WizardExport char * AcquireString(const char *source)
WizardExport unsigned char * GetStringInfoDatum(const StringInfo *string_info)
WizardExport size_t CopyWizardString(char *destination, const char *source, const size_t length)
WizardExport const char * GetStringInfoPath(const StringInfo *string_info)
WizardBooleanType stealth
#define DirectorySeparator
WizardExport WizardBooleanType GlobExpression(const char *expression, const char *pattern, const WizardBooleanType case_insensitive)
WizardExport WizardBooleanType IsWizardTrue(const char *value)
WizardExport void GetPathComponent(const char *path, PathType type, char *component)
unsigned int WizardStatusType
WizardPrivate char * FileToXML(const char *, const size_t)
WizardExport XMLTreeInfo * DestroyXMLTree(XMLTreeInfo *xml_info)
WizardExport const char * GetXMLTreeAttribute(XMLTreeInfo *xml_info, const char *tag)
WizardExport XMLTreeInfo * NewXMLTree(const char *xml, ExceptionInfo *exception)
WizardExport XMLTreeInfo * GetNextXMLTreeTag(XMLTreeInfo *xml_info)
WizardExport XMLTreeInfo * GetXMLTreeChild(XMLTreeInfo *xml_info, const char *tag)