/ Hex Artifact Content
Login

Artifact 7999f2246c6347707e98f7078871ea8ca605df3f:


0000: 2f 2a 0a 2a 2a 20 32 30 30 34 20 4d 61 79 20 32  /*.** 2004 May 2
0010: 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 75 74 68  2.**.** The auth
0020: 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70  or disclaims cop
0030: 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73  yright to this s
0040: 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20  ource code.  In 
0050: 70 6c 61 63 65 20 6f 66 0a 2a 2a 20 61 20 6c 65  place of.** a le
0060: 67 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65  gal notice, here
0070: 20 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a   is a blessing:.
0080: 2a 2a 0a 2a 2a 20 20 20 20 4d 61 79 20 79 6f 75  **.**    May you
0090: 20 64 6f 20 67 6f 6f 64 20 61 6e 64 20 6e 6f 74   do good and not
00a0: 20 65 76 69 6c 2e 0a 2a 2a 20 20 20 20 4d 61 79   evil..**    May
00b0: 20 79 6f 75 20 66 69 6e 64 20 66 6f 72 67 69 76   you find forgiv
00c0: 65 6e 65 73 73 20 66 6f 72 20 79 6f 75 72 73 65  eness for yourse
00d0: 6c 66 20 61 6e 64 20 66 6f 72 67 69 76 65 20 6f  lf and forgive o
00e0: 74 68 65 72 73 2e 0a 2a 2a 20 20 20 20 4d 61 79  thers..**    May
00f0: 20 79 6f 75 20 73 68 61 72 65 20 66 72 65 65 6c   you share freel
0100: 79 2c 20 6e 65 76 65 72 20 74 61 6b 69 6e 67 20  y, never taking 
0110: 6d 6f 72 65 20 74 68 61 6e 20 79 6f 75 20 67 69  more than you gi
0120: 76 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ve..**.*********
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73  *****.**.** This
0180: 20 68 65 61 64 65 72 20 66 69 6c 65 20 64 65 66   header file def
0190: 69 6e 65 64 20 4f 53 2d 73 70 65 63 69 66 69 63  ined OS-specific
01a0: 20 66 65 61 74 75 72 65 73 20 66 6f 72 20 55 6e   features for Un
01b0: 69 78 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 5f  ix..*/.#ifndef _
01c0: 53 51 4c 49 54 45 5f 4f 53 5f 55 4e 49 58 5f 48  SQLITE_OS_UNIX_H
01d0: 5f 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54  _.#define _SQLIT
01e0: 45 5f 4f 53 5f 55 4e 49 58 5f 48 5f 0a 0a 2f 2a  E_OS_UNIX_H_../*
01f0: 0a 2a 2a 20 48 65 6c 70 66 75 6c 20 68 69 6e 74  .** Helpful hint
0200: 3a 20 20 54 6f 20 67 65 74 20 74 68 69 73 20 74  :  To get this t
0210: 6f 20 63 6f 6d 70 69 6c 65 20 6f 6e 20 48 50 2f  o compile on HP/
0220: 55 58 2c 20 61 64 64 20 2d 44 5f 49 4e 43 4c 55  UX, add -D_INCLU
0230: 44 45 5f 50 4f 53 49 58 5f 53 4f 55 52 43 45 0a  DE_POSIX_SOURCE.
0240: 2a 2a 20 74 6f 20 74 68 65 20 63 6f 6d 70 69 6c  ** to the compil
0250: 65 72 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e  er command line.
0260: 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65  .*/../*.** These
0270: 20 23 64 65 66 69 6e 65 73 20 73 68 6f 75 6c 64   #defines should
0280: 20 65 6e 61 62 6c 65 20 3e 32 47 42 20 66 69 6c   enable >2GB fil
0290: 65 20 73 75 70 70 6f 72 74 20 6f 6e 20 50 6f 73  e support on Pos
02a0: 69 78 20 69 66 20 74 68 65 0a 2a 2a 20 75 6e 64  ix if the.** und
02b0: 65 72 6c 79 69 6e 67 20 6f 70 65 72 61 74 69 6e  erlying operatin
02c0: 67 20 73 79 73 74 65 6d 20 73 75 70 70 6f 72 74  g system support
02d0: 73 20 69 74 2e 20 20 49 66 20 74 68 65 20 4f 53  s it.  If the OS
02e0: 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61 72 67 65 20   lacks.** large 
02f0: 66 69 6c 65 20 73 75 70 70 6f 72 74 2c 20 6f 72  file support, or
0300: 20 69 66 20 74 68 65 20 4f 53 20 69 73 20 77 69   if the OS is wi
0310: 6e 64 6f 77 73 2c 20 74 68 65 73 65 20 73 68 6f  ndows, these sho
0320: 75 6c 64 20 62 65 20 6e 6f 2d 6f 70 73 2e 0a 2a  uld be no-ops..*
0330: 2a 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20  *.** Large file 
0340: 73 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64  support can be d
0350: 69 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  isabled using th
0360: 65 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42  e -DSQLITE_DISAB
0370: 4c 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a  LE_LFS switch.**
0380: 20 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   on the compiler
0390: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20   command line.  
03a0: 54 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72  This is necessar
03b0: 79 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d  y if you are com
03c0: 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72  piling.** on a r
03d0: 65 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65  ecent machine (e
03e0: 78 3a 20 52 65 64 48 61 74 20 37 2e 32 29 20 62  x: RedHat 7.2) b
03f0: 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75 72  ut you want your
0400: 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a 2a   code to work.**
0410: 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61 63   on an older mac
0420: 68 69 6e 65 20 28 65 78 3a 20 52 65 64 48 61 74  hine (ex: RedHat
0430: 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75 20 63   6.0).  If you c
0440: 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 48 61 74  ompile on RedHat
0450: 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f 75 74 20   7.2.** without 
0460: 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20 4c 46 53  this option, LFS
0470: 20 69 73 20 65 6e 61 62 6c 65 2e 20 20 42 75 74   is enable.  But
0480: 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74 20 65 78   LFS does not ex
0490: 69 73 74 20 69 6e 20 74 68 65 20 6b 65 72 6e 65  ist in the kerne
04a0: 6c 0a 2a 2a 20 69 6e 20 52 65 64 48 61 74 20 36  l.** in RedHat 6
04b0: 2e 30 2c 20 73 6f 20 74 68 65 20 63 6f 64 65 20  .0, so the code 
04c0: 77 6f 6e 27 74 20 77 6f 72 6b 2e 20 20 48 65 6e  won't work.  Hen
04d0: 63 65 2c 20 66 6f 72 20 6d 61 78 69 6d 75 6d 20  ce, for maximum 
04e0: 62 69 6e 61 72 79 0a 2a 2a 20 70 6f 72 74 61 62  binary.** portab
04f0: 69 6c 69 74 79 20 79 6f 75 20 73 68 6f 75 6c 64  ility you should
0500: 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a 2a 0a 2a 2a   omit LFS..**.**
0510: 20 53 69 6d 69 6c 61 72 20 69 73 20 74 72 75 65   Similar is true
0520: 20 66 6f 72 20 4d 61 63 4f 53 2e 20 20 4c 46 53   for MacOS.  LFS
0530: 20 69 73 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74   is only support
0540: 65 64 20 6f 6e 20 4d 61 63 4f 53 20 39 20 61 6e  ed on MacOS 9 an
0550: 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e  d later..*/.#ifn
0560: 64 65 66 20 53 51 4c 49 54 45 5f 44 49 53 41 42  def SQLITE_DISAB
0570: 4c 45 5f 4c 46 53 0a 23 20 64 65 66 69 6e 65 20  LE_LFS.# define 
0580: 5f 4c 41 52 47 45 5f 46 49 4c 45 20 20 20 20 20  _LARGE_FILE     
0590: 20 20 31 0a 23 20 69 66 6e 64 65 66 20 5f 46 49    1.# ifndef _FI
05a0: 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54 53 0a 23  LE_OFFSET_BITS.#
05b0: 20 20 20 64 65 66 69 6e 65 20 5f 46 49 4c 45 5f     define _FILE_
05c0: 4f 46 46 53 45 54 5f 42 49 54 53 20 36 34 0a 23  OFFSET_BITS 64.#
05d0: 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20   endif.# define 
05e0: 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55 52 43  _LARGEFILE_SOURC
05f0: 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  E 1.#endif../*.*
0600: 2a 20 73 74 61 6e 64 61 72 64 20 69 6e 63 6c 75  * standard inclu
0610: 64 65 20 66 69 6c 65 73 2e 0a 2a 2f 0a 23 69 6e  de files..*/.#in
0620: 63 6c 75 64 65 20 3c 73 79 73 2f 74 79 70 65 73  clude <sys/types
0630: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79  .h>.#include <sy
0640: 73 2f 73 74 61 74 2e 68 3e 0a 23 69 6e 63 6c 75  s/stat.h>.#inclu
0650: 64 65 20 3c 66 63 6e 74 6c 2e 68 3e 0a 23 69 6e  de <fcntl.h>.#in
0660: 63 6c 75 64 65 20 3c 75 6e 69 73 74 64 2e 68 3e  clude <unistd.h>
0670: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 4f 73 46 69  ../*.** The OsFi
0680: 6c 65 20 73 74 72 75 63 74 75 72 65 20 69 73 20  le structure is 
0690: 61 20 6f 70 65 72 61 74 69 6e 67 2d 73 79 73 74  a operating-syst
06a0: 65 6d 20 69 6e 64 65 70 65 6e 64 69 6e 67 20 72  em independing r
06b0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 0a 2a 2a  epresentation.**
06c0: 20 6f 66 20 61 6e 20 6f 70 65 6e 20 66 69 6c 65   of an open file
06d0: 20 68 61 6e 64 6c 65 2e 20 20 49 74 20 69 73 20   handle.  It is 
06e0: 64 65 66 69 6e 65 64 20 64 69 66 66 65 72 65 6e  defined differen
06f0: 74 6c 79 20 66 6f 72 20 65 61 63 68 20 61 72 63  tly for each arc
0700: 68 69 74 65 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  hitecture..**.**
0710: 20 54 68 69 73 20 69 73 20 74 68 65 20 64 65 66   This is the def
0720: 69 6e 69 74 69 6f 6e 20 66 6f 72 20 55 6e 69 78  inition for Unix
0730: 2e 0a 2a 2a 0a 2a 2a 20 4f 73 46 69 6c 65 2e 6c  ..**.** OsFile.l
0740: 6f 63 6b 74 79 70 65 20 74 61 6b 65 73 20 6f 6e  ocktype takes on
0750: 65 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  e of the values 
0760: 53 48 41 52 45 44 5f 4c 4f 43 4b 2c 20 52 45 53  SHARED_LOCK, RES
0770: 45 52 56 45 44 5f 4c 4f 43 4b 2c 0a 2a 2a 20 50  ERVED_LOCK,.** P
0780: 45 4e 44 49 4e 47 5f 4c 4f 43 4b 20 6f 72 20 45  ENDING_LOCK or E
0790: 58 43 4c 55 53 49 56 45 5f 4c 4f 43 4b 2e 0a 2a  XCLUSIVE_LOCK..*
07a0: 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
07b0: 20 4f 73 46 69 6c 65 20 4f 73 46 69 6c 65 3b 0a   OsFile OsFile;.
07c0: 73 74 72 75 63 74 20 4f 73 46 69 6c 65 20 7b 0a  struct OsFile {.
07d0: 20 20 73 74 72 75 63 74 20 6f 70 65 6e 43 6e 74    struct openCnt
07e0: 20 2a 70 4f 70 65 6e 3b 20 20 20 20 2f 2a 20 49   *pOpen;    /* I
07f0: 6e 66 6f 20 61 62 6f 75 74 20 61 6c 6c 20 6f 70  nfo about all op
0800: 65 6e 20 66 64 27 73 20 6f 6e 20 74 68 69 73 20  en fd's on this 
0810: 69 6e 6f 64 65 20 2a 2f 0a 20 20 73 74 72 75 63  inode */.  struc
0820: 74 20 6c 6f 63 6b 49 6e 66 6f 20 2a 70 4c 6f 63  t lockInfo *pLoc
0830: 6b 3b 20 20 20 2f 2a 20 49 6e 66 6f 20 61 62 6f  k;   /* Info abo
0840: 75 74 20 6c 6f 63 6b 73 20 6f 6e 20 74 68 69 73  ut locks on this
0850: 20 69 6e 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20   inode */.  int 
0860: 66 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  fd;             
0870: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66 69 6c        /* The fil
0880: 65 20 64 65 73 63 72 69 70 74 6f 72 20 2a 2f 0a  e descriptor */.
0890: 20 20 69 6e 74 20 6c 6f 63 6b 74 79 70 65 3b 20    int locktype; 
08a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
08b0: 68 65 20 74 79 70 65 20 6f 66 20 6c 6f 63 6b 20  he type of lock 
08c0: 68 65 6c 64 20 6f 6e 20 74 68 69 73 20 66 64 20  held on this fd 
08d0: 2a 2f 0a 20 20 69 6e 74 20 64 69 72 66 64 3b 20  */.  int dirfd; 
08e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
08f0: 2a 20 46 69 6c 65 20 64 65 73 63 72 69 70 74 6f  * File descripto
0900: 72 20 66 6f 72 20 74 68 65 20 64 69 72 65 63 74  r for the direct
0910: 6f 72 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ory */.};../*.**
0920: 20 4d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20   Maximum number 
0930: 6f 66 20 63 68 61 72 61 63 74 65 72 73 20 69 6e  of characters in
0940: 20 61 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c   a temporary fil
0950: 65 20 6e 61 6d 65 0a 2a 2f 0a 23 64 65 66 69 6e  e name.*/.#defin
0960: 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 4e 41 4d  e SQLITE_TEMPNAM
0970: 45 5f 53 49 5a 45 20 32 30 30 0a 0a 2f 2a 0a 2a  E_SIZE 200../*.*
0980: 2a 20 4d 69 6e 69 6d 75 6d 20 69 6e 74 65 72 76  * Minimum interv
0990: 61 6c 20 73 75 70 70 6f 72 74 65 64 20 62 79 20  al supported by 
09a0: 73 71 6c 69 74 65 33 4f 73 53 6c 65 65 70 28 29  sqlite3OsSleep()
09b0: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
09c0: 28 48 41 56 45 5f 55 53 4c 45 45 50 29 20 26 26  (HAVE_USLEEP) &&
09d0: 20 48 41 56 45 5f 55 53 4c 45 45 50 0a 23 20 64   HAVE_USLEEP.# d
09e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49 4e  efine SQLITE_MIN
09f0: 5f 53 4c 45 45 50 5f 4d 53 20 31 0a 23 65 6c 73  _SLEEP_MS 1.#els
0a00: 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  e.# define SQLIT
0a10: 45 5f 4d 49 4e 5f 53 4c 45 45 50 5f 4d 53 20 31  E_MIN_SLEEP_MS 1
0a20: 30 30 30 0a 23 65 6e 64 69 66 0a 0a 0a 23 65 6e  000.#endif...#en
0a30: 64 69 66 20 2f 2a 20 5f 53 51 4c 49 54 45 5f 4f  dif /* _SQLITE_O
0a40: 53 5f 55 4e 49 58 5f 48 5f 20 2a 2f 0a           S_UNIX_H_ */.