php-internal-docs 8.4.8
Unofficial docs for php/php-src
Loading...
Searching...
No Matches
file.h
Go to the documentation of this file.
1/*
2 * Copyright (c) Ian F. Darwin 1986-1995.
3 * Software written by Ian F. Darwin and others;
4 * maintained 1995-present by Christos Zoulas and others.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 * notice immediately at the beginning of the file, without modification,
11 * this list of conditions, and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
20 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 * SUCH DAMAGE.
27 */
28/*
29 * file.h - definitions for file(1) program
30 * @(#)$File: file.h,v 1.248 2023/07/28 14:38:25 christos Exp $
31 */
32
33#ifndef __file_h__
34#define __file_h__
35
36#include "config.h"
37
38#ifdef HAVE_STDINT_H
39#include <stdint.h>
40#endif
41
42#ifdef HAVE_INTTYPES_H
43#include <inttypes.h>
44#endif
45
46#ifndef __STDC_LIMIT_MACROS
47#define __STDC_LIMIT_MACROS
48#endif
49#ifndef __STDC_FORMAT_MACROS
50#define __STDC_FORMAT_MACROS
51#endif
52
53#ifdef _WIN32
54# ifdef PRIu32
55# ifdef _WIN64
56# define SIZE_T_FORMAT PRIu64
57# else
58# define SIZE_T_FORMAT PRIu32
59# endif
60# define INT64_T_FORMAT PRIi64
61# define INTMAX_T_FORMAT PRIiMAX
62# else
63# ifdef _WIN64
64# define SIZE_T_FORMAT "I64"
65# else
66# define SIZE_T_FORMAT ""
67# endif
68# define INT64_T_FORMAT "I64"
69# define INTMAX_T_FORMAT "I64"
70# endif
71#else
72# define SIZE_T_FORMAT "z"
73# define INT64_T_FORMAT "ll"
74# define INTMAX_T_FORMAT "j"
75#endif
76
77#include <stdio.h> /* Include that here, to make sure __P gets defined */
78#include <errno.h>
79#include <fcntl.h> /* For open and flags */
80
81#include <sys/types.h>
82#ifndef WIN32
83#include <sys/param.h>
84#endif
85/* Do this here and now, because struct stat gets re-defined on solaris */
86#include <sys/stat.h>
87#include <stdarg.h>
88
89#define ENABLE_CONDITIONALS
90
91#ifndef MAGIC
92#define MAGIC "/etc/magic"
93#endif
94
95#if defined(__EMX__) || defined (WIN32)
96#define PATHSEP ';'
97#else
98#define PATHSEP ':'
99#endif
100
101#define file_private static
102
103#if HAVE_VISIBILITY && !defined(WIN32)
104#define file_public __attribute__ ((__visibility__("default")))
105#ifndef file_protected
106#define file_protected __attribute__ ((__visibility__("hidden")))
107#endif
108#else
109#define file_public
110#ifndef file_protected
111#define file_protected
112#endif
113#endif
114
115#ifndef __arraycount
116#define __arraycount(a) (sizeof(a) / sizeof(a[0]))
117#endif
118
119#ifndef __GNUC_PREREQ__
120#ifdef __GNUC__
121#define __GNUC_PREREQ__(x, y) \
122 ((__GNUC__ == (x) && __GNUC_MINOR__ >= (y)) || \
123 (__GNUC__ > (x)))
124#else
125#define __GNUC_PREREQ__(x, y) 0
126#endif
127#endif
128
129#ifndef __GNUC__
130#ifndef __attribute__
131#define __attribute__(a)
132#endif
133#endif
134
135#ifndef MIN
136#define MIN(a,b) (((a) < (b)) ? (a) : (b))
137#endif
138
139#ifndef MAX
140#define MAX(a,b) (((a) > (b)) ? (a) : (b))
141#endif
142
143#ifndef O_CLOEXEC
144# define O_CLOEXEC 0
145#endif
146
147#ifndef FD_CLOEXEC
148# define FD_CLOEXEC 1
149#endif
150
151
152/*
153 * Dec 31, 23:59:59 9999
154 * we need to make sure that we don't exceed 9999 because some libc
155 * implementations like muslc crash otherwise. If you are unlucky
156 * to be running on a system with a 32 bit time_t, then it is even less.
157 */
158#define MAX_CTIME \
159 CAST(time_t, sizeof(time_t) > 4 ? 0x3afff487cfULL : 0x7fffffffULL)
160
161#define FILE_BADSIZE CAST(size_t, ~0ul)
162#define MAXDESC 64 /* max len of text description/MIME type */
163#define MAXMIME 80 /* max len of text MIME type */
164#define MAXstring 128 /* max len of "string" types */
165
166#define MAGICNO 0xF11E041C
167#define VERSIONNO 18
168#define FILE_MAGICSIZE 376
169
170#define FILE_GUID_SIZE sizeof("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")
171
172#define FILE_LOAD 0
173#define FILE_CHECK 1
174#define FILE_COMPILE 2
175#define FILE_LIST 3
176
177struct buffer {
178 int fd;
180 const void *fbuf;
181 size_t flen;
183 void *ebuf;
184 size_t elen;
185};
186
188 uint8_t b;
189 uint16_t h;
190 uint32_t l;
191 uint64_t q;
192 uint8_t hs[2]; /* 2 bytes of a fixed-endian "short" */
193 uint8_t hl[4]; /* 4 bytes of a fixed-endian "long" */
194 uint8_t hq[8]; /* 8 bytes of a fixed-endian "quad" */
195 char s[MAXstring]; /* the search string or regex pattern */
196 unsigned char us[MAXstring];
197 uint64_t guid[2];
198 float f;
199 double d;
200};
201
202struct magic {
203 /* Word 1 */
204 uint16_t cont_level; /* level of ">" */
205 uint8_t flag;
206#define INDIR 0x01 /* if '(...)' appears */
207#define OFFADD 0x02 /* if '>&' or '>...(&' appears */
208#define INDIROFFADD 0x04 /* if '>&(' appears */
209#define UNSIGNED 0x08 /* comparison is unsigned */
210#define NOSPACE 0x10 /* suppress space character before output */
211#define BINTEST 0x20 /* test is for a binary type (set only
212 for top-level tests) */
213#define TEXTTEST 0x40 /* for passing to file_softmagic */
214#define OFFNEGATIVE 0x80 /* relative to the end of file */
216 uint8_t factor;
217
218 /* Word 2 */
219 uint8_t reln; /* relation (0=eq, '>'=gt, etc) */
220 uint8_t vallen; /* length of string value, if any */
221 uint8_t type; /* comparison type (FILE_*) */
222 uint8_t in_type; /* type of indirection */
223#define FILE_INVALID 0
224#define FILE_BYTE 1
225#define FILE_SHORT 2
226#define FILE_DEFAULT 3
227#define FILE_LONG 4
228#define FILE_STRING 5
229#define FILE_DATE 6
230#define FILE_BESHORT 7
231#define FILE_BELONG 8
232#define FILE_BEDATE 9
233#define FILE_LESHORT 10
234#define FILE_LELONG 11
235#define FILE_LEDATE 12
236#define FILE_PSTRING 13
237#define FILE_LDATE 14
238#define FILE_BELDATE 15
239#define FILE_LELDATE 16
240#define FILE_REGEX 17
241#define FILE_BESTRING16 18
242#define FILE_LESTRING16 19
243#define FILE_SEARCH 20
244#define FILE_MEDATE 21
245#define FILE_MELDATE 22
246#define FILE_MELONG 23
247#define FILE_QUAD 24
248#define FILE_LEQUAD 25
249#define FILE_BEQUAD 26
250#define FILE_QDATE 27
251#define FILE_LEQDATE 28
252#define FILE_BEQDATE 29
253#define FILE_QLDATE 30
254#define FILE_LEQLDATE 31
255#define FILE_BEQLDATE 32
256#define FILE_FLOAT 33
257#define FILE_BEFLOAT 34
258#define FILE_LEFLOAT 35
259#define FILE_DOUBLE 36
260#define FILE_BEDOUBLE 37
261#define FILE_LEDOUBLE 38
262#define FILE_BEID3 39
263#define FILE_LEID3 40
264#define FILE_INDIRECT 41
265#define FILE_QWDATE 42
266#define FILE_LEQWDATE 43
267#define FILE_BEQWDATE 44
268#define FILE_NAME 45
269#define FILE_USE 46
270#define FILE_CLEAR 47
271#define FILE_DER 48
272#define FILE_GUID 49
273#define FILE_OFFSET 50
274#define FILE_BEVARINT 51
275#define FILE_LEVARINT 52
276#define FILE_MSDOSDATE 53
277#define FILE_LEMSDOSDATE 54
278#define FILE_BEMSDOSDATE 55
279#define FILE_MSDOSTIME 56
280#define FILE_LEMSDOSTIME 57
281#define FILE_BEMSDOSTIME 58
282#define FILE_OCTAL 59
283#define FILE_NAMES_SIZE 60 /* size of array to contain all names */
285#define IS_LIBMAGIC_STRING(t) \
286 ((t) == FILE_STRING || \
287 (t) == FILE_PSTRING || \
288 (t) == FILE_BESTRING16 || \
289 (t) == FILE_LESTRING16 || \
290 (t) == FILE_REGEX || \
291 (t) == FILE_SEARCH || \
292 (t) == FILE_INDIRECT || \
293 (t) == FILE_NAME || \
294 (t) == FILE_USE || \
295 (t) == FILE_OCTAL)
297#define FILE_FMT_NONE 0
298#define FILE_FMT_NUM 1 /* "cduxXi" */
299#define FILE_FMT_STR 2 /* "s" */
300#define FILE_FMT_QUAD 3 /* "ll" */
301#define FILE_FMT_FLOAT 4 /* "eEfFgG" */
302#define FILE_FMT_DOUBLE 5 /* "eEfFgG" */
303
304 /* Word 3 */
305 uint8_t in_op; /* operator for indirection */
306 uint8_t mask_op; /* operator for mask */
307#ifdef ENABLE_CONDITIONALS
308 uint8_t cond; /* conditional type */
309#else
310 uint8_t dummy;
311#endif
312 uint8_t factor_op;
313#define FILE_FACTOR_OP_PLUS '+'
314#define FILE_FACTOR_OP_MINUS '-'
315#define FILE_FACTOR_OP_TIMES '*'
316#define FILE_FACTOR_OP_DIV '/'
317#define FILE_FACTOR_OP_NONE '\0'
319#define FILE_OPS "&|^+-*/%"
320#define FILE_OPAND 0
321#define FILE_OPOR 1
322#define FILE_OPXOR 2
323#define FILE_OPADD 3
324#define FILE_OPMINUS 4
325#define FILE_OPMULTIPLY 5
326#define FILE_OPDIVIDE 6
327#define FILE_OPMODULO 7
328#define FILE_OPS_MASK 0x07 /* mask for above ops */
329#define FILE_UNUSED_1 0x08
330#define FILE_UNUSED_2 0x10
331#define FILE_OPSIGNED 0x20
332#define FILE_OPINVERSE 0x40
333#define FILE_OPINDIRECT 0x80
334
335#ifdef ENABLE_CONDITIONALS
336#define COND_NONE 0
337#define COND_IF 1
338#define COND_ELIF 2
339#define COND_ELSE 3
340#endif /* ENABLE_CONDITIONALS */
341
342 /* Word 4 */
343 int32_t offset; /* offset to magic number */
344 /* Word 5 */
345 int32_t in_offset; /* offset from indirection */
346 /* Word 6 */
347 uint32_t lineno; /* line number in magic file */
348 /* Word 7,8 */
349 union {
350 uint64_t _mask; /* for use with numeric and date types */
351 struct {
352 uint32_t _count; /* repeat/line count */
353 uint32_t _flags; /* modifier flags */
354 } _s; /* for use with string types */
355 } _u;
356#define num_mask _u._mask
357#define str_range _u._s._count
358#define str_flags _u._s._flags
359 /* Words 9-24 */
360 union VALUETYPE value; /* either number or string */
361 /* Words 25-40 */
362 char desc[MAXDESC]; /* description */
363 /* Words 41-60 */
364 char mimetype[MAXMIME]; /* MIME type */
365 /* Words 61-62 */
366 char apple[8]; /* APPLE CREATOR/TYPE */
367 /* Words 63-78 */
368 char ext[64]; /* Popular extensions */
369};
371#define BIT(A) (1 << (A))
372#define STRING_COMPACT_WHITESPACE BIT(0)
373#define STRING_COMPACT_OPTIONAL_WHITESPACE BIT(1)
374#define STRING_IGNORE_LOWERCASE BIT(2)
375#define STRING_IGNORE_UPPERCASE BIT(3)
376#define REGEX_OFFSET_START BIT(4)
377#define STRING_TEXTTEST BIT(5)
378#define STRING_BINTEST BIT(6)
379#define PSTRING_1_BE BIT(7)
380#define PSTRING_1_LE BIT(7)
381#define PSTRING_2_BE BIT(8)
382#define PSTRING_2_LE BIT(9)
383#define PSTRING_4_BE BIT(10)
384#define PSTRING_4_LE BIT(11)
385#define REGEX_LINE_COUNT BIT(11)
386#define PSTRING_LEN \
387 (PSTRING_1_BE|PSTRING_2_LE|PSTRING_2_BE|PSTRING_4_LE|PSTRING_4_BE)
388#define PSTRING_LENGTH_INCLUDES_ITSELF BIT(12)
389#define STRING_TRIM BIT(13)
390#define STRING_FULL_WORD BIT(14)
391#define CHAR_COMPACT_WHITESPACE 'W'
392#define CHAR_COMPACT_OPTIONAL_WHITESPACE 'w'
393#define CHAR_IGNORE_LOWERCASE 'c'
394#define CHAR_IGNORE_UPPERCASE 'C'
395#define CHAR_REGEX_OFFSET_START 's'
396#define CHAR_TEXTTEST 't'
397#define CHAR_TRIM 'T'
398#define CHAR_FULL_WORD 'f'
399#define CHAR_BINTEST 'b'
400#define CHAR_PSTRING_1_BE 'B'
401#define CHAR_PSTRING_1_LE 'B'
402#define CHAR_PSTRING_2_BE 'H'
403#define CHAR_PSTRING_2_LE 'h'
404#define CHAR_PSTRING_4_BE 'L'
405#define CHAR_PSTRING_4_LE 'l'
406#define CHAR_PSTRING_LENGTH_INCLUDES_ITSELF 'J'
407#define STRING_IGNORE_CASE (STRING_IGNORE_LOWERCASE|STRING_IGNORE_UPPERCASE)
408#define STRING_DEFAULT_RANGE 100
410#define INDIRECT_RELATIVE BIT(0)
411#define CHAR_INDIRECT_RELATIVE 'r'
412
413/* list of magic entries */
414struct mlist {
415 struct magic *magic; /* array of magic entries */
416 size_t nmagic; /* number of entries in array */
417 void *map; /* internal resources used by entry */
418 struct mlist *next, *prev;
419};
420
421#ifdef __cplusplus
422#define CAST(T, b) static_cast<T>(b)
423#define RCAST(T, b) reinterpret_cast<T>(b)
424#define CCAST(T, b) const_cast<T>(b)
425#else
426#define CAST(T, b) ((T)(b))
427#define RCAST(T, b) ((T)(uintptr_t)(b))
428#define CCAST(T, b) ((T)(uintptr_t)(b))
429#endif
432 int32_t off;
433 int got_match;
434#ifdef ENABLE_CONDITIONALS
436 int last_cond; /* used for error checking by parse() */
437#endif
438};
440struct cont {
441 size_t len;
442 struct level_info *li;
443};
445#define MAGIC_SETS 2
447struct magic_set {
448 struct mlist *mlist[MAGIC_SETS]; /* list of regular entries */
449 struct cont c;
450 struct out {
451 char *buf; /* Accumulation buffer */
452 size_t blen; /* Length of buffer */
453 char *pbuf; /* Printable buffer */
454 } o;
455 uint32_t offset; /* a copy of m->offset while we */
456 /* are working on the magic entry */
457 uint32_t eoffset; /* offset from end of file */
458 int error;
459 int flags; /* Control magic tests. */
460 int event_flags; /* Note things that happened. */
461#define EVENT_HAD_ERR 0x01
462 const char *file;
463 size_t line; /* current magic line number */
464 mode_t mode; /* copy of current stat mode */
465
466 /* data for searches */
467 struct {
468 const char *s; /* start of search in original source */
469 size_t s_len; /* length of search region */
470 size_t offset; /* starting offset in source: XXX - should this be off_t? */
471 size_t rm_len; /* match length */
472 } search;
473
474 /* FIXME: Make the string dynamically allocated so that e.g.
475 strings matched in files can be longer than MAXstring */
476 union VALUETYPE ms_value; /* either number or string */
477 uint16_t indir_max;
478 uint16_t name_max;
482 uint16_t regex_max;
483 size_t bytes_max; /* number of bytes to read from file */
484 size_t encoding_max; /* bytes to look for encoding */
485 size_t elf_shsize_max;
486#ifndef FILE_BYTES_MAX
487# define FILE_BYTES_MAX (7 * 1024 * 1024)/* how much of the file to look at */
488#endif /* above 0x6ab0f4 map offset for HelveticaNeue.dfont */
489#define FILE_ELF_NOTES_MAX 256
490#define FILE_ELF_PHNUM_MAX 2048
491#define FILE_ELF_SHNUM_MAX 32768
492#define FILE_ELF_SHSIZE_MAX (128 * 1024 * 1024)
493#define FILE_INDIR_MAX 50
494#define FILE_NAME_MAX 50
495#define FILE_REGEX_MAX 8192
496#define FILE_ENCODING_MAX (64 * 1024)
497#if defined(HAVE_NEWLOCALE) && defined(HAVE_USELOCALE) && defined(HAVE_FREELOCALE)
498#define USE_C_LOCALE
499 locale_t c_lc_ctype;
500#define file_locale_used
501#else
502#define file_locale_used __attribute__((__unused__))
503#endif
504};
505
506/* Type for Unicode characters */
507typedef unsigned long file_unichar_t;
508
509struct stat;
510#define FILE_T_LOCAL 1
511#define FILE_T_WINDOWS 2
512file_protected const char *file_fmtdatetime(char *, size_t, uint64_t, int);
513file_protected const char *file_fmtdate(char *, size_t, uint16_t);
514file_protected const char *file_fmttime(char *, size_t, uint16_t);
515file_protected const char *file_fmtvarint(char *, size_t, const unsigned char *,
516 int);
517file_protected const char *file_fmtnum(char *, size_t, const char *, int);
520file_protected int file_buffer(struct magic_set *, php_stream *, zend_stat_t *, const char *, const void *,
521 size_t);
522file_protected int file_fsmagic(struct magic_set *, const char *, zend_stat_t *);
523file_protected int file_pipe2file(struct magic_set *, int, const void *,
524 size_t);
525file_protected int file_vprintf(struct magic_set *, const char *, va_list)
526 __attribute__((__format__(__printf__, 2, 0)));
528file_protected char *file_copystr(char *, size_t, size_t, const char *);
529file_protected int file_checkfmt(char *, size_t, const char *);
530file_protected size_t file_printedlen(const struct magic_set *);
531file_protected int file_print_guid(char *, size_t, const uint64_t *);
532file_protected int file_parse_guid(const char *, uint64_t *);
533file_protected int file_replace(struct magic_set *, const char *, const char *);
534file_protected int file_printf(struct magic_set *, const char *, ...)
535 __attribute__((__format__(__printf__, 2, 3)));
537file_protected int file_tryelf(struct magic_set *, const struct buffer *);
538file_protected int file_trycdf(struct magic_set *, const struct buffer *);
539#ifdef PHP_FILEINFO_UNCOMPRESS
540file_protected int file_zmagic(struct magic_set *, const struct buffer *,
541 const char *);
542#endif
543file_protected int file_ascmagic(struct magic_set *, const struct buffer *,
544 int);
546 const struct buffer *, file_unichar_t *, size_t, const char *, const char *, int);
547file_protected int file_encoding(struct magic_set *, const struct buffer *,
548 file_unichar_t **, size_t *, const char **, const char **, const char **);
549file_protected int file_is_json(struct magic_set *, const struct buffer *);
550file_protected int file_is_csv(struct magic_set *, const struct buffer *, int,
551 const char *);
552file_protected int file_is_simh(struct magic_set *, const struct buffer *);
553file_protected int file_is_tar(struct magic_set *, const struct buffer *);
554file_protected int file_softmagic(struct magic_set *, const struct buffer *,
555 uint16_t *, uint16_t *, int, int);
556file_protected int file_apprentice(struct magic_set *, const char *, int);
557file_protected size_t file_magic_strength(const struct magic *, size_t);
558file_protected int buffer_apprentice(struct magic_set *, struct magic **,
559 size_t *, size_t);
560file_protected int file_magicfind(struct magic_set *, const char *,
561 struct mlist *);
562file_protected uint64_t file_signextend(struct magic_set *, struct magic *,
563 uint64_t);
564file_protected uintmax_t file_varint2uintmax_t(const unsigned char *, int,
565 size_t *);
566
569file_protected void file_oomem(struct magic_set *, size_t);
570file_protected void file_error(struct magic_set *, int, const char *, ...)
571 __attribute__((__format__(__printf__, 3, 4)));
572file_protected void file_magerror(struct magic_set *, const char *, ...)
573 __attribute__((__format__(__printf__, 2, 3)));
574file_protected void file_magwarn(struct magic_set *, const char *, ...)
575 __attribute__((__format__(__printf__, 2, 3)));
576file_protected void file_mdump(struct magic *);
577file_protected void file_showstr(FILE *, const char *, size_t);
578file_protected size_t file_mbswidth(struct magic_set *, const char *);
580file_protected ssize_t sread(int, void *, size_t, int);
581file_protected int file_check_mem(struct magic_set *, unsigned int);
582file_protected int file_looks_utf8(const unsigned char *, size_t,
583 file_unichar_t *, size_t *);
585 const struct magic *);
587 const struct magic *, const char *);
588file_protected char * file_printable(struct magic_set *, char *, size_t,
589 const char *, size_t);
590#ifdef __EMX__
591file_protected int file_os2_apptype(struct magic_set *, const char *,
592 const void *, size_t);
593#endif /* __EMX__ */
596file_protected char *file_strtrim(char *);
597
598file_protected void buffer_init(struct buffer *, int, const zend_stat_t *,
599 const void *, size_t);
600file_protected void buffer_fini(struct buffer *);
601file_protected int buffer_fill(const struct buffer *);
602
603
605typedef struct {
606 char *buf;
607 size_t blen;
608 uint32_t offset;
610
613
614#ifndef COMPILE_ONLY
615extern const char *file_names[];
616extern const size_t file_nnames;
617#endif
618
619#ifndef strlcpy
620size_t strlcpy(char *, const char *, size_t);
621#endif
622#ifndef strlcat
623size_t strlcat(char *, const char *, size_t);
624#endif
625#ifndef HAVE_STRCASESTR
626char *strcasestr(const char *, const char *);
627#endif
628#ifndef HAVE_GETLINE
629ssize_t getline(char **, size_t *, FILE *);
630ssize_t getdelim(char **, size_t *, int, FILE *);
631#endif
632#ifndef HAVE_CTIME_R
633char *ctime_r(const time_t *, char *);
634#endif
635#ifndef HAVE_ASCTIME_R
636char *asctime_r(const struct tm *, char *);
637#endif
638
639#if defined(HAVE_MMAP) && defined(HAVE_SYS_MMAN_H) && !defined(QUICK)
640#define QUICK
641#endif
642
643#ifndef O_BINARY
644#define O_BINARY 0
645#endif
646#ifndef O_NONBLOCK
647#define O_NONBLOCK 0
648#endif
649
650#ifndef __cplusplus
651#if defined(__GNUC__) && (__GNUC__ >= 3)
652#define FILE_RCSID(id) \
653static const char rcsid[] __attribute__((__used__)) = id;
654#else
655#define FILE_RCSID(id) \
656static const char *rcsid(const char *p) { \
657 return rcsid(p = id); \
658}
659#endif
660#else
661#define FILE_RCSID(id)
662#endif
663#ifndef __RCSID
664#define __RCSID(a)
665#endif
666
667#endif /* __file_h__ */
const size_t file_nnames
Definition apprentice.c:115
file_protected void file_showstr(FILE *fp, const char *s, size_t len)
file_protected size_t file_pstring_length_size(struct magic_set *ms, const struct magic *m)
file_protected size_t file_pstring_get_length(struct magic_set *ms, const struct magic *m, const char *ss)
const char * file_names[FILE_NAMES_SIZE]
Definition apprentice.c:114
stat(string $filename)
file_protected int file_looks_utf8(const unsigned char *buf, size_t nbytes, file_unichar_t *ubuf, size_t *ulen)
Definition encoding.c:350
unsigned long file_unichar_t
Definition file.h:506
ssize_t getdelim(char **, size_t *, int, FILE *)
#define file_protected
Definition file.h:111
file_protected int file_printf(struct magic_set *, const char *,...) __attribute__((__format__(__printf__
#define MAXstring
Definition file.h:164
file_protected int file_is_csv(struct magic_set *, const struct buffer *, int, const char *)
Definition is_csv.c:133
file_protected char * file_strtrim(char *)
Definition funcs.c:844
#define MAXDESC
Definition file.h:162
file_protected int file_encoding(struct magic_set *, const struct buffer *, file_unichar_t **, size_t *, const char **, const char **, const char **)
Definition encoding.c:75
file_protected int file_is_tar(struct magic_set *, const struct buffer *)
Definition is_tar.c:63
file_protected const char * file_getbuffer(struct magic_set *)
Definition funcs.c:548
file_protected const char * file_fmttime(char *, size_t, uint16_t)
Definition print.c:333
file_protected void file_ms_free(struct magic_set *)
Definition apprentice.c:526
file_protected void file_protected void file_protected void file_magwarn(struct magic_set *, const char *,...) __attribute__((__format__(__printf__
file_protected uintmax_t file_varint2uintmax_t(const unsigned char *, int, size_t *)
file_protected void buffer_init(struct buffer *, int, const zend_stat_t *, const void *, size_t)
Definition buffer.c:42
file_protected int buffer_apprentice(struct magic_set *, struct magic **, size_t *, size_t)
file_protected int file_protected int file_reset(struct magic_set *, int)
Definition funcs.c:523
file_protected size_t file_mbswidth(struct magic_set *, const char *)
file_protected int file_magicfind(struct magic_set *, const char *, struct mlist *)
file_protected void file_protected void file_protected void file_protected void file_mdump(struct magic *)
Definition print.c:50
file_protected int file_trycdf(struct magic_set *, const struct buffer *)
Definition readcdf.c:530
file_protected void buffer_fini(struct buffer *)
Definition buffer.c:58
file_protected int file_ascmagic(struct magic_set *, const struct buffer *, int)
Definition ascmagic.c:71
file_protected int file_is_json(struct magic_set *, const struct buffer *)
Definition is_json.c:422
file_protected void file_badread(struct magic_set *)
Definition funcs.c:243
file_protected int file_clear_closexec(int)
Definition funcs.c:835
char * asctime_r(const struct tm *, char *)
ssize_t getline(char **, size_t *, FILE *)
file_protected int file_softmagic(struct magic_set *, const struct buffer *, uint16_t *, uint16_t *, int, int)
Definition softmagic.c:119
file_protected void file_protected void file_magerror(struct magic_set *, const char *,...) __attribute__((__format__(__printf__
file_protected const char * file_fmtvarint(char *, size_t, const unsigned char *, int)
Definition print.c:264
file_protected const char * file_fmtnum(char *, size_t, const char *, int)
Definition print.c:353
#define MAGIC_SETS
Definition file.h:444
file_protected int file_pipe2file(struct magic_set *, int, const void *, size_t)
file_protected int file_tryelf(struct magic_set *, const struct buffer *)
file_protected int file_fsmagic(struct magic_set *, const char *, zend_stat_t *)
Definition fsmagic.c:90
file_protected const char * file_fmtdatetime(char *, size_t, uint64_t, int)
Definition print.c:272
file_protected ssize_t sread(int, void *, size_t, int)
file_protected int file_is_simh(struct magic_set *, const struct buffer *)
Definition is_simh.c:149
file_protected int file_pipe_closexec(int *)
file_protected file_pushbuf_t * file_push_buffer(struct magic_set *)
Definition funcs.c:692
#define __attribute__(a)
Definition file.h:131
file_protected int file_vprintf(struct magic_set *, const char *, va_list) __attribute__((__format__(__printf__
file_protected int file_buffer(struct magic_set *, php_stream *, zend_stat_t *, const char *, const void *, size_t)
file_protected int file_parse_guid(const char *, uint64_t *)
Definition funcs.c:769
file_protected void file_error(struct magic_set *, int, const char *,...) __attribute__((__format__(__printf__
file_protected int file_print_guid(char *, size_t, const uint64_t *)
Definition funcs.c:794
char * ctime_r(const time_t *, char *)
file_protected char * file_printable(struct magic_set *, char *, size_t, const char *, size_t)
Definition funcs.c:738
file_protected int buffer_fill(const struct buffer *)
Definition buffer.c:66
file_protected void file_oomem(struct magic_set *, size_t)
Definition funcs.c:230
#define MAXMIME
Definition file.h:163
file_protected size_t file_magic_strength(const struct magic *, size_t)
file_protected char * file_pop_buffer(struct magic_set *, file_pushbuf_t *)
Definition funcs.c:714
file_protected int file_check_mem(struct magic_set *, unsigned int)
Definition funcs.c:626
file_protected int file_protected int file_separator(struct magic_set *)
Definition funcs.c:252
char * strcasestr(const char *, const char *)
Definition strcasestr.c:67
file_protected char * file_copystr(char *, size_t, size_t, const char *)
Definition funcs.c:55
file_protected int file_checkfmt(char *, size_t, const char *)
Definition funcs.c:94
file_protected int file_ascmagic_with_encoding(struct magic_set *, const struct buffer *, file_unichar_t *, size_t, const char *, const char *, int)
Definition ascmagic.c:105
file_protected void file_badseek(struct magic_set *)
Definition funcs.c:237
file_protected uint64_t file_signextend(struct magic_set *, struct magic *, uint64_t)
file_protected int file_apprentice(struct magic_set *, const char *, int)
Definition apprentice.c:663
file_protected const char * file_fmtdate(char *, size_t, uint16_t)
Definition print.c:314
file_protected struct magic_set * file_ms_alloc(int)
Definition apprentice.c:549
file_protected size_t file_printedlen(const struct magic_set *)
Definition funcs.c:649
file_protected int file_replace(struct magic_set *, const char *, const char *)
Definition funcs.c:655
zend_long offset
unsigned short mode_t
Definition ioutil.h:72
#define strlcpy
Definition php.h:159
#define strlcat
Definition php.h:169
struct _php_stream php_stream
Definition php_streams.h:96
Definition file.h:177
const void * fbuf
Definition file.h:180
int fd
Definition file.h:178
void * ebuf
Definition file.h:183
zend_off_t eoff
Definition file.h:182
zend_stat_t st
Definition file.h:179
size_t flen
Definition file.h:181
size_t elen
Definition file.h:184
Definition file.h:439
size_t len
Definition file.h:440
struct level_info * li
Definition file.h:441
uint32_t offset
Definition file.h:607
size_t blen
Definition file.h:606
char * buf
Definition file.h:605
int last_cond
Definition file.h:435
int32_t off
Definition file.h:431
int got_match
Definition file.h:432
int last_match
Definition file.h:434
char * buf
Definition file.h:450
size_t blen
Definition file.h:451
char * pbuf
Definition file.h:452
uint32_t eoffset
Definition file.h:456
uint16_t elf_phnum_max
Definition file.h:479
const char * file
Definition file.h:461
size_t elf_shsize_max
Definition file.h:484
const char * s
Definition file.h:467
uint16_t indir_max
Definition file.h:476
struct cont c
Definition file.h:448
union VALUETYPE ms_value
Definition file.h:475
uint16_t regex_max
Definition file.h:481
struct magic_set::out o
uint16_t elf_shnum_max
Definition file.h:478
int flags
Definition file.h:458
struct magic_set::@064260247024367202255202336305226346003333017071 search
uint32_t offset
Definition file.h:454
size_t rm_len
Definition file.h:470
uint16_t elf_notes_max
Definition file.h:480
struct mlist * mlist[MAGIC_SETS]
Definition file.h:447
size_t s_len
Definition file.h:468
size_t encoding_max
Definition file.h:483
uint16_t name_max
Definition file.h:477
int error
Definition file.h:457
mode_t mode
Definition file.h:463
size_t line
Definition file.h:462
int event_flags
Definition file.h:459
size_t bytes_max
Definition file.h:482
Definition file.h:202
uint8_t flag
Definition file.h:205
uint32_t _count
Definition file.h:351
uint64_t _mask
Definition file.h:349
uint16_t cont_level
Definition file.h:204
int32_t offset
Definition file.h:342
uint8_t cond
Definition file.h:307
uint8_t vallen
Definition file.h:219
union magic::@246006007063361057327255164362265067371243215034 _u
union VALUETYPE value
Definition file.h:359
uint32_t lineno
Definition file.h:346
uint8_t reln
Definition file.h:218
struct magic::@246006007063361057327255164362265067371243215034::@265150351115333023156244023063207374326341222346 _s
uint8_t factor
Definition file.h:215
uint8_t in_op
Definition file.h:304
char apple[8]
Definition file.h:365
char mimetype[MAXMIME]
Definition file.h:363
int32_t in_offset
Definition file.h:344
uint8_t mask_op
Definition file.h:305
uint8_t factor_op
Definition file.h:311
char ext[64]
Definition file.h:367
uint8_t in_type
Definition file.h:221
uint8_t type
Definition file.h:220
uint32_t _flags
Definition file.h:352
char desc[MAXDESC]
Definition file.h:361
Definition file.h:413
struct mlist * prev
Definition file.h:417
void * map
Definition file.h:416
size_t nmagic
Definition file.h:415
struct magic * magic
Definition file.h:414
struct mlist * next
Definition file.h:417
uint64_t guid[2]
Definition file.h:197
uint64_t q
Definition file.h:191
unsigned char us[MAXstring]
Definition file.h:196
float f
Definition file.h:198
uint8_t hq[8]
Definition file.h:194
uint8_t hs[2]
Definition file.h:192
uint16_t h
Definition file.h:189
uint32_t l
Definition file.h:190
uint8_t b
Definition file.h:188
uint8_t hl[4]
Definition file.h:193
double d
Definition file.h:199
char s[MAXstring]
Definition file.h:195
int32_t zend_off_t
Definition zend_long.h:44
struct stat zend_stat_t
Definition zend_stream.h:94