/ Hex Artifact Content
Login

Artifact 4c51809f56daf21efbe26fc932998e865a5bc211:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 36 0a 2a 2a 0a 2a 2a 20 54 68  mber 16.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
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 2a 2a 2a 2a 2a 2a 0a 2a 2a 0a 2a  ***********.**.*
0180: 2a 20 54 68 69 73 20 68 65 61 64 65 72 20 66 69  * This header fi
0190: 6c 65 20 28 74 6f 67 65 74 68 65 72 20 77 69 74  le (together wit
01a0: 68 20 69 73 20 63 6f 6d 70 61 6e 69 6f 6e 20 43  h is companion C
01b0: 20 73 6f 75 72 63 65 2d 63 6f 64 65 20 66 69 6c   source-code fil
01c0: 65 0a 2a 2a 20 22 6f 73 2e 63 22 29 20 61 74 74  e.** "os.c") att
01d0: 65 6d 70 74 20 74 6f 20 61 62 73 74 72 61 63 74  empt to abstract
01e0: 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
01f0: 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d  operating system
0200: 20 73 6f 20 74 68 61 74 0a 2a 2a 20 74 68 65 20   so that.** the 
0210: 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 20 77  SQLite library w
0220: 69 6c 6c 20 77 6f 72 6b 20 6f 6e 20 62 6f 74 68  ill work on both
0230: 20 50 4f 53 49 58 20 61 6e 64 20 77 69 6e 64 6f   POSIX and windo
0240: 77 73 20 73 79 73 74 65 6d 73 2e 0a 2a 2f 0a 23  ws systems..*/.#
0250: 69 66 6e 64 65 66 20 5f 53 51 4c 49 54 45 5f 4f  ifndef _SQLITE_O
0260: 53 5f 48 5f 0a 23 64 65 66 69 6e 65 20 5f 53 51  S_H_.#define _SQ
0270: 4c 49 54 45 5f 4f 53 5f 48 5f 0a 0a 2f 2a 0a 2a  LITE_OS_H_../*.*
0280: 2a 20 48 65 6c 70 66 75 6c 20 68 69 6e 74 3a 20  * Helpful hint: 
0290: 20 54 6f 20 67 65 74 20 74 68 69 73 20 74 6f 20   To get this to 
02a0: 63 6f 6d 70 69 6c 65 20 6f 6e 20 48 50 2f 55 58  compile on HP/UX
02b0: 2c 20 61 64 64 20 2d 44 5f 49 4e 43 4c 55 44 45  , add -D_INCLUDE
02c0: 5f 50 4f 53 49 58 5f 53 4f 55 52 43 45 0a 2a 2a  _POSIX_SOURCE.**
02d0: 20 74 6f 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   to the compiler
02e0: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 0a 2a   command line..*
02f0: 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 23  /../*.** These #
0300: 64 65 66 69 6e 65 73 20 73 68 6f 75 6c 64 20 65  defines should e
0310: 6e 61 62 6c 65 20 3e 32 47 42 20 66 69 6c 65 20  nable >2GB file 
0320: 73 75 70 70 6f 72 74 20 6f 6e 20 50 6f 73 69 78  support on Posix
0330: 20 69 66 20 74 68 65 0a 2a 2a 20 75 6e 64 65 72   if the.** under
0340: 6c 79 69 6e 67 20 6f 70 65 72 61 74 69 6e 67 20  lying operating 
0350: 73 79 73 74 65 6d 20 73 75 70 70 6f 72 74 73 20  system supports 
0360: 69 74 2e 20 20 49 66 20 74 68 65 20 4f 53 20 6c  it.  If the OS l
0370: 61 63 6b 73 0a 2a 2a 20 6c 61 72 67 65 20 66 69  acks.** large fi
0380: 6c 65 20 73 75 70 70 6f 72 74 2c 20 6f 72 20 69  le support, or i
0390: 66 20 74 68 65 20 4f 53 20 69 73 20 77 69 6e 64  f the OS is wind
03a0: 6f 77 73 2c 20 74 68 65 73 65 20 73 68 6f 75 6c  ows, these shoul
03b0: 64 20 62 65 20 6e 6f 2d 6f 70 73 2e 0a 2a 2a 0a  d be no-ops..**.
03c0: 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20 73 75  ** Large file su
03d0: 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64 69 73  pport can be dis
03e0: 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65 20  abled using the 
03f0: 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45  -DSQLITE_DISABLE
0400: 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a 20 6f  _LFS switch.** o
0410: 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 63  n the compiler c
0420: 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20 54 68  ommand line.  Th
0430: 69 73 20 69 73 20 6e 65 63 65 73 73 61 72 79 20  is is necessary 
0440: 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d 70 69  if you are compi
0450: 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72 65 63  ling.** on a rec
0460: 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65 78 3a  ent machine (ex:
0470: 20 52 65 64 48 61 74 20 37 2e 32 29 20 62 75 74   RedHat 7.2) but
0480: 20 79 6f 75 20 77 61 6e 74 20 79 6f 75 72 20 63   you want your c
0490: 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a 2a 20 6f  ode to work.** o
04a0: 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61 63 68 69  n an older machi
04b0: 6e 65 20 28 65 78 3a 20 52 65 64 48 61 74 20 36  ne (ex: RedHat 6
04c0: 2e 30 29 2e 20 20 49 66 20 79 6f 75 20 63 6f 6d  .0).  If you com
04d0: 70 69 6c 65 20 6f 6e 20 52 65 64 48 61 74 20 37  pile on RedHat 7
04e0: 2e 32 0a 2a 2a 20 77 69 74 68 6f 75 74 20 74 68  .2.** without th
04f0: 69 73 20 6f 70 74 69 6f 6e 2c 20 4c 46 53 20 69  is option, LFS i
0500: 73 20 65 6e 61 62 6c 65 2e 20 20 42 75 74 20 4c  s enable.  But L
0510: 46 53 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  FS does not exis
0520: 74 20 69 6e 20 74 68 65 20 6b 65 72 6e 65 6c 0a  t in the kernel.
0530: 2a 2a 20 69 6e 20 52 65 64 48 61 74 20 36 2e 30  ** in RedHat 6.0
0540: 2c 20 73 6f 20 74 68 65 20 63 6f 64 65 20 77 6f  , so the code wo
0550: 6e 27 74 20 77 6f 72 6b 2e 20 20 48 65 6e 63 65  n't work.  Hence
0560: 2c 20 66 6f 72 20 6d 61 78 69 6d 75 6d 20 62 69  , for maximum bi
0570: 6e 61 72 79 0a 2a 2a 20 70 6f 72 74 61 62 69 6c  nary.** portabil
0580: 69 74 79 20 79 6f 75 20 73 68 6f 75 6c 64 20 6f  ity you should o
0590: 6d 69 74 20 4c 46 53 2e 0a 2a 2a 0a 2a 2a 20 53  mit LFS..**.** S
05a0: 69 6d 69 6c 61 72 20 69 73 20 74 72 75 65 20 66  imilar is true f
05b0: 6f 72 20 4d 61 63 4f 53 2e 20 20 4c 46 53 20 69  or MacOS.  LFS i
05c0: 73 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 65 64  s only supported
05d0: 20 6f 6e 20 4d 61 63 4f 53 20 39 20 61 6e 64 20   on MacOS 9 and 
05e0: 6c 61 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65  later..*/.#ifnde
05f0: 66 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45  f SQLITE_DISABLE
0600: 5f 4c 46 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c  _LFS.# define _L
0610: 41 52 47 45 5f 46 49 4c 45 20 20 20 20 20 20 20  ARGE_FILE       
0620: 31 0a 23 20 64 65 66 69 6e 65 20 5f 46 49 4c 45  1.# define _FILE
0630: 5f 4f 46 46 53 45 54 5f 42 49 54 53 20 36 34 0a  _OFFSET_BITS 64.
0640: 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47 45 46  # define _LARGEF
0650: 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a 23 65 6e  ILE_SOURCE 1.#en
0660: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 6d 70 6f  dif../*.** Tempo
0670: 72 61 72 79 20 66 69 6c 65 73 20 61 72 65 20 6e  rary files are n
0680: 61 6d 65 64 20 73 74 61 72 74 69 6e 67 20 77 69  amed starting wi
0690: 74 68 20 74 68 69 73 20 70 72 65 66 69 78 20 66  th this prefix f
06a0: 6f 6c 6c 6f 77 65 64 20 62 79 20 31 36 20 72 61  ollowed by 16 ra
06b0: 6e 64 6f 6d 0a 2a 2a 20 61 6c 70 68 61 6e 75 6d  ndom.** alphanum
06c0: 65 72 69 63 20 63 68 61 72 61 63 74 65 72 73 2c  eric characters,
06d0: 20 61 6e 64 20 6e 6f 20 66 69 6c 65 20 65 78 74   and no file ext
06e0: 65 6e 73 69 6f 6e 2e 20 54 68 65 79 20 61 72 65  ension. They are
06f0: 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 0a 2a   stored in the.*
0700: 2a 20 4f 53 27 73 20 73 74 61 6e 64 61 72 64 20  * OS's standard 
0710: 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 20 64  temporary file d
0720: 69 72 65 63 74 6f 72 79 2c 20 61 6e 64 20 61 72  irectory, and ar
0730: 65 20 64 65 6c 65 74 65 64 20 70 72 69 6f 72 20  e deleted prior 
0740: 74 6f 20 65 78 69 74 2e 0a 2a 2a 20 49 66 20 73  to exit..** If s
0750: 71 6c 69 74 65 20 69 73 20 62 65 69 6e 67 20 65  qlite is being e
0760: 6d 62 65 64 64 65 64 20 69 6e 20 61 6e 6f 74 68  mbedded in anoth
0770: 65 72 20 70 72 6f 67 72 61 6d 2c 20 79 6f 75 20  er program, you 
0780: 6d 61 79 20 77 69 73 68 20 74 6f 20 63 68 61 6e  may wish to chan
0790: 67 65 20 74 68 65 0a 2a 2a 20 70 72 65 66 69 78  ge the.** prefix
07a0: 20 74 6f 20 72 65 66 6c 65 63 74 20 79 6f 75 72   to reflect your
07b0: 20 70 72 6f 67 72 61 6d 27 73 20 6e 61 6d 65 2c   program's name,
07c0: 20 73 6f 20 74 68 61 74 20 69 66 20 79 6f 75 72   so that if your
07d0: 20 70 72 6f 67 72 61 6d 20 65 78 69 74 73 0a 2a   program exits.*
07e0: 2a 20 70 72 65 6d 61 74 75 72 65 6c 79 2c 20 6f  * prematurely, o
07f0: 6c 64 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c  ld temporary fil
0800: 65 73 20 63 61 6e 20 62 65 20 65 61 73 69 6c 79  es can be easily
0810: 20 69 64 65 6e 74 69 66 69 65 64 2e 20 54 68 69   identified. Thi
0820: 73 20 63 61 6e 20 62 65 20 64 6f 6e 65 0a 2a 2a  s can be done.**
0830: 20 75 73 69 6e 67 20 2d 44 54 45 4d 50 5f 46 49   using -DTEMP_FI
0840: 4c 45 5f 50 52 45 46 49 58 3d 6d 79 70 72 65 66  LE_PREFIX=mypref
0850: 69 78 5f 20 6f 6e 20 74 68 65 20 63 6f 6d 70 69  ix_ on the compi
0860: 6c 65 72 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  ler command line
0870: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 54 45 4d  ..*/.#ifndef TEM
0880: 50 5f 46 49 4c 45 5f 50 52 45 46 49 58 0a 23 20  P_FILE_PREFIX.# 
0890: 64 65 66 69 6e 65 20 54 45 4d 50 5f 46 49 4c 45  define TEMP_FILE
08a0: 5f 50 52 45 46 49 58 20 22 73 71 6c 69 74 65 5f  _PREFIX "sqlite_
08b0: 22 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ".#endif../*.** 
08c0: 46 69 67 75 72 65 20 6f 75 74 20 69 66 20 77 65  Figure out if we
08d0: 20 61 72 65 20 64 65 61 6c 69 6e 67 20 77 69 74   are dealing wit
08e0: 68 20 55 6e 69 78 2c 20 57 69 6e 64 6f 77 73 20  h Unix, Windows 
08f0: 6f 72 20 4d 61 63 4f 53 2e 0a 2a 2a 0a 2a 2a 20  or MacOS..**.** 
0900: 4e 2e 42 2e 20 4d 61 63 4f 53 20 6d 65 61 6e 73  N.B. MacOS means
0910: 20 4d 61 63 20 43 6c 61 73 73 69 63 20 28 6f 72   Mac Classic (or
0920: 20 43 61 72 62 6f 6e 29 2e 20 54 72 65 61 74 20   Carbon). Treat 
0930: 44 61 72 77 69 6e 20 28 4f 53 20 58 29 20 61 73  Darwin (OS X) as
0940: 20 55 6e 69 78 2e 0a 2a 2a 20 20 20 20 20 20 54   Unix..**      T
0950: 68 65 20 4d 61 63 4f 53 20 62 75 69 6c 64 20 69  he MacOS build i
0960: 73 20 64 65 73 69 67 6e 65 64 20 74 6f 20 75 73  s designed to us
0970: 65 20 43 6f 64 65 57 61 72 72 69 6f 72 20 28 74  e CodeWarrior (t
0980: 65 73 74 65 64 20 77 69 74 68 20 76 38 29 0a 2a  ested with v8).*
0990: 2f 0a 23 69 66 6e 64 65 66 20 4f 53 5f 55 4e 49  /.#ifndef OS_UNI
09a0: 58 0a 23 20 69 66 6e 64 65 66 20 4f 53 5f 57 49  X.# ifndef OS_WI
09b0: 4e 0a 23 20 20 69 66 6e 64 65 66 20 4f 53 5f 4d  N.#  ifndef OS_M
09c0: 41 43 0a 23 20 20 20 20 69 66 20 64 65 66 69 6e  AC.#    if defin
09d0: 65 64 28 5f 5f 4d 41 43 4f 53 5f 5f 29 0a 23 20  ed(__MACOS__).# 
09e0: 20 20 20 20 20 64 65 66 69 6e 65 20 4f 53 5f 4d       define OS_M
09f0: 41 43 20 31 0a 23 20 20 20 20 20 20 64 65 66 69  AC 1.#      defi
0a00: 6e 65 20 4f 53 5f 57 49 4e 20 30 0a 23 20 20 20  ne OS_WIN 0.#   
0a10: 20 20 20 64 65 66 69 6e 65 20 4f 53 5f 55 4e 49     define OS_UNI
0a20: 58 20 30 0a 23 20 20 20 20 65 6c 69 66 20 64 65  X 0.#    elif de
0a30: 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 7c 7c  fined(_WIN32) ||
0a40: 20 64 65 66 69 6e 65 64 28 57 49 4e 33 32 29 20   defined(WIN32) 
0a50: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 43 59 47  || defined(__CYG
0a60: 57 49 4e 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65  WIN__) || define
0a70: 64 28 5f 5f 4d 49 4e 47 57 33 32 5f 5f 29 20 7c  d(__MINGW32__) |
0a80: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 42 4f 52 4c  | defined(__BORL
0a90: 41 4e 44 43 5f 5f 29 0a 23 20 20 20 20 20 20 64  ANDC__).#      d
0aa0: 65 66 69 6e 65 20 4f 53 5f 4d 41 43 20 30 0a 23  efine OS_MAC 0.#
0ab0: 20 20 20 20 20 20 64 65 66 69 6e 65 20 4f 53 5f        define OS_
0ac0: 57 49 4e 20 31 0a 23 20 20 20 20 20 20 64 65 66  WIN 1.#      def
0ad0: 69 6e 65 20 4f 53 5f 55 4e 49 58 20 30 0a 23 20  ine OS_UNIX 0.# 
0ae0: 20 20 20 65 6c 73 65 0a 23 20 20 20 20 20 20 64     else.#      d
0af0: 65 66 69 6e 65 20 4f 53 5f 4d 41 43 20 30 0a 23  efine OS_MAC 0.#
0b00: 20 20 20 20 20 20 64 65 66 69 6e 65 20 4f 53 5f        define OS_
0b10: 57 49 4e 20 30 0a 23 20 20 20 20 20 20 64 65 66  WIN 0.#      def
0b20: 69 6e 65 20 4f 53 5f 55 4e 49 58 20 31 0a 23 20  ine OS_UNIX 1.# 
0b30: 20 20 20 65 6e 64 69 66 0a 23 20 20 65 6c 73 65     endif.#  else
0b40: 0a 23 20 20 20 20 64 65 66 69 6e 65 20 4f 53 5f  .#    define OS_
0b50: 57 49 4e 20 30 0a 23 20 20 20 20 64 65 66 69 6e  WIN 0.#    defin
0b60: 65 20 4f 53 5f 55 4e 49 58 20 30 0a 23 20 20 65  e OS_UNIX 0.#  e
0b70: 6e 64 69 66 0a 23 20 65 6c 73 65 0a 23 20 20 64  ndif.# else.#  d
0b80: 65 66 69 6e 65 20 4f 53 5f 4d 41 43 20 30 0a 23  efine OS_MAC 0.#
0b90: 20 20 64 65 66 69 6e 65 20 4f 53 5f 55 4e 49 58    define OS_UNIX
0ba0: 20 30 0a 23 20 65 6e 64 69 66 0a 23 65 6c 73 65   0.# endif.#else
0bb0: 0a 23 20 64 65 66 69 6e 65 20 4f 53 5f 4d 41 43  .# define OS_MAC
0bc0: 20 30 0a 23 20 64 65 66 69 6e 65 20 4f 53 5f 57   0.# define OS_W
0bd0: 49 4e 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  IN 0.#endif../*.
0be0: 2a 2a 20 41 20 68 61 6e 64 6c 65 20 66 6f 72 20  ** A handle for 
0bf0: 61 6e 20 6f 70 65 6e 20 66 69 6c 65 20 69 73 20  an open file is 
0c00: 73 74 6f 72 65 64 20 69 6e 20 61 6e 20 4f 73 46  stored in an OsF
0c10: 69 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 23  ile object..*/.#
0c20: 69 66 20 4f 53 5f 55 4e 49 58 0a 23 20 69 6e 63  if OS_UNIX.# inc
0c30: 6c 75 64 65 20 3c 73 79 73 2f 74 79 70 65 73 2e  lude <sys/types.
0c40: 68 3e 0a 23 20 69 6e 63 6c 75 64 65 20 3c 73 79  h>.# include <sy
0c50: 73 2f 73 74 61 74 2e 68 3e 0a 23 20 69 6e 63 6c  s/stat.h>.# incl
0c60: 75 64 65 20 3c 66 63 6e 74 6c 2e 68 3e 0a 23 20  ude <fcntl.h>.# 
0c70: 69 6e 63 6c 75 64 65 20 3c 75 6e 69 73 74 64 2e  include <unistd.
0c80: 68 3e 0a 20 20 74 79 70 65 64 65 66 20 73 74 72  h>.  typedef str
0c90: 75 63 74 20 4f 73 46 69 6c 65 20 4f 73 46 69 6c  uct OsFile OsFil
0ca0: 65 3b 0a 20 20 73 74 72 75 63 74 20 4f 73 46 69  e;.  struct OsFi
0cb0: 6c 65 20 7b 0a 20 20 20 20 73 74 72 75 63 74 20  le {.    struct 
0cc0: 6c 6f 63 6b 49 6e 66 6f 20 2a 70 4c 6f 63 6b 3b  lockInfo *pLock;
0cd0: 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
0ce0: 20 61 62 6f 75 74 20 6c 6f 63 6b 73 20 6f 6e 20   about locks on 
0cf0: 74 68 69 73 20 69 6e 6f 64 65 20 2a 2f 0a 20 20  this inode */.  
0d00: 20 20 69 6e 74 20 66 64 3b 20 20 20 20 20 20 20    int fd;       
0d10: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
0d20: 65 20 66 69 6c 65 20 64 65 73 63 72 69 70 74 6f  e file descripto
0d30: 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 6f 63  r */.    int loc
0d40: 6b 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  ked;            
0d50: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69    /* True if thi
0d60: 73 20 75 73 65 72 20 68 6f 6c 64 73 20 74 68 65  s user holds the
0d70: 20 6c 6f 63 6b 20 2a 2f 0a 20 20 20 20 69 6e 74   lock */.    int
0d80: 20 64 69 72 66 64 3b 20 20 20 20 20 20 20 20 20   dirfd;         
0d90: 20 20 20 20 20 20 2f 2a 20 46 69 6c 65 20 64 65        /* File de
0da0: 73 63 72 69 70 74 6f 72 20 66 6f 72 20 74 68 65  scriptor for the
0db0: 20 64 69 72 65 63 74 6f 72 79 20 2a 2f 0a 20 20   directory */.  
0dc0: 7d 3b 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  };.# define SQLI
0dd0: 54 45 5f 54 45 4d 50 4e 41 4d 45 5f 53 49 5a 45  TE_TEMPNAME_SIZE
0de0: 20 32 30 30 0a 23 20 69 66 20 64 65 66 69 6e 65   200.# if define
0df0: 64 28 48 41 56 45 5f 55 53 4c 45 45 50 29 20 26  d(HAVE_USLEEP) &
0e00: 26 20 48 41 56 45 5f 55 53 4c 45 45 50 0a 23 20  & HAVE_USLEEP.# 
0e10: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
0e20: 49 4e 5f 53 4c 45 45 50 5f 4d 53 20 31 0a 23 20  IN_SLEEP_MS 1.# 
0e30: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 53  else.#  define S
0e40: 51 4c 49 54 45 5f 4d 49 4e 5f 53 4c 45 45 50 5f  QLITE_MIN_SLEEP_
0e50: 4d 53 20 31 30 30 30 0a 23 20 65 6e 64 69 66 0a  MS 1000.# endif.
0e60: 23 65 6e 64 69 66 0a 0a 23 69 66 20 4f 53 5f 57  #endif..#if OS_W
0e70: 49 4e 0a 23 69 6e 63 6c 75 64 65 20 3c 77 69 6e  IN.#include <win
0e80: 64 6f 77 73 2e 68 3e 0a 23 69 6e 63 6c 75 64 65  dows.h>.#include
0e90: 20 3c 77 69 6e 62 61 73 65 2e 68 3e 0a 20 20 74   <winbase.h>.  t
0ea0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4f 73  ypedef struct Os
0eb0: 46 69 6c 65 20 4f 73 46 69 6c 65 3b 0a 20 20 73  File OsFile;.  s
0ec0: 74 72 75 63 74 20 4f 73 46 69 6c 65 20 7b 0a 20  truct OsFile {. 
0ed0: 20 20 20 48 41 4e 44 4c 45 20 68 3b 20 20 20 20     HANDLE h;    
0ee0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61             /* Ha
0ef0: 6e 64 6c 65 20 66 6f 72 20 61 63 63 65 73 73 69  ndle for accessi
0f00: 6e 67 20 74 68 65 20 66 69 6c 65 20 2a 2f 0a 20  ng the file */. 
0f10: 20 20 20 69 6e 74 20 6c 6f 63 6b 65 64 3b 20 20     int locked;  
0f20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 3a             /* 0:
0f30: 20 75 6e 6c 6f 63 6b 65 64 2c 20 3c 30 3a 20 77   unlocked, <0: w
0f40: 72 69 74 65 20 6c 6f 63 6b 2c 20 3e 30 3a 20 72  rite lock, >0: r
0f50: 65 61 64 20 6c 6f 63 6b 20 2a 2f 0a 20 20 7d 3b  ead lock */.  };
0f60: 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 4d  .# if defined(_M
0f70: 53 43 5f 56 45 52 29 20 7c 7c 20 64 65 66 69 6e  SC_VER) || defin
0f80: 65 64 28 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f 29  ed(__BORLANDC__)
0f90: 0a 20 20 20 20 74 79 70 65 64 65 66 20 5f 5f 69  .    typedef __i
0fa0: 6e 74 36 34 20 6f 66 66 5f 74 3b 0a 23 20 65 6c  nt64 off_t;.# el
0fb0: 73 65 0a 20 20 20 20 74 79 70 65 64 65 66 20 6c  se.    typedef l
0fc0: 6f 6e 67 20 6c 6f 6e 67 20 6f 66 66 5f 74 3b 0a  ong long off_t;.
0fd0: 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65  # endif.# define
0fe0: 20 53 51 4c 49 54 45 5f 54 45 4d 50 4e 41 4d 45   SQLITE_TEMPNAME
0ff0: 5f 53 49 5a 45 20 28 4d 41 58 5f 50 41 54 48 2b  _SIZE (MAX_PATH+
1000: 35 30 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  50).# define SQL
1010: 49 54 45 5f 4d 49 4e 5f 53 4c 45 45 50 5f 4d 53  ITE_MIN_SLEEP_MS
1020: 20 31 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 4f   1.#endif..#if O
1030: 53 5f 4d 41 43 0a 23 20 69 6e 63 6c 75 64 65 20  S_MAC.# include 
1040: 3c 75 6e 69 73 74 64 2e 68 3e 0a 23 20 69 6e 63  <unistd.h>.# inc
1050: 6c 75 64 65 20 3c 46 69 6c 65 73 2e 68 3e 0a 20  lude <Files.h>. 
1060: 20 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20   typedef struct 
1070: 4f 73 46 69 6c 65 20 4f 73 46 69 6c 65 3b 0a 20  OsFile OsFile;. 
1080: 20 73 74 72 75 63 74 20 4f 73 46 69 6c 65 20 7b   struct OsFile {
1090: 0a 20 20 20 20 53 49 6e 74 31 36 20 72 65 66 4e  .    SInt16 refN
10a0: 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  um;           /*
10b0: 20 44 61 74 61 20 66 6f 72 6b 2f 66 69 6c 65 20   Data fork/file 
10c0: 72 65 66 65 72 65 6e 63 65 20 6e 75 6d 62 65 72  reference number
10d0: 20 2a 2f 0a 20 20 20 20 53 49 6e 74 31 36 20 72   */.    SInt16 r
10e0: 65 66 4e 75 6d 52 46 3b 20 20 20 20 20 20 20 20  efNumRF;        
10f0: 20 2f 2a 20 52 65 73 6f 75 72 63 65 20 66 6f 72   /* Resource for
1100: 6b 20 72 65 66 65 72 65 6e 63 65 20 6e 75 6d 62  k reference numb
1110: 65 72 20 28 66 6f 72 20 6c 6f 63 6b 69 6e 67 29  er (for locking)
1120: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 6f 63 6b   */.    int lock
1130: 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ed;             
1140: 20 2f 2a 20 30 3a 20 75 6e 6c 6f 63 6b 65 64 2c   /* 0: unlocked,
1150: 20 3c 30 3a 20 77 72 69 74 65 20 6c 6f 63 6b 2c   <0: write lock,
1160: 20 3e 30 3a 20 72 65 61 64 20 6c 6f 63 6b 20 2a   >0: read lock *
1170: 2f 0a 20 20 20 20 69 6e 74 20 64 65 6c 4f 6e 43  /.    int delOnC
1180: 6c 6f 73 65 3b 20 20 20 20 20 20 20 20 20 20 2f  lose;          /
1190: 2a 20 54 72 75 65 20 69 66 20 66 69 6c 65 20 69  * True if file i
11a0: 73 20 74 6f 20 62 65 20 64 65 6c 65 74 65 64 20  s to be deleted 
11b0: 6f 6e 20 63 6c 6f 73 65 20 2a 2f 0a 20 20 20 20  on close */.    
11c0: 63 68 61 72 20 2a 70 61 74 68 54 6f 44 65 6c 3b  char *pathToDel;
11d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
11e0: 20 6f 66 20 66 69 6c 65 20 74 6f 20 64 65 6c 65   of file to dele
11f0: 74 65 20 6f 6e 20 63 6c 6f 73 65 20 2a 2f 0a 20  te on close */. 
1200: 20 7d 3b 0a 23 20 69 66 64 65 66 20 5f 4c 41 52   };.# ifdef _LAR
1210: 47 45 5f 46 49 4c 45 0a 20 20 20 20 74 79 70 65  GE_FILE.    type
1220: 64 65 66 20 53 49 6e 74 36 34 20 6f 66 66 5f 74  def SInt64 off_t
1230: 3b 0a 23 20 65 6c 73 65 0a 20 20 20 20 74 79 70  ;.# else.    typ
1240: 65 64 65 66 20 53 49 6e 74 33 32 20 6f 66 66 5f  edef SInt32 off_
1250: 74 3b 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66  t;.# endif.# def
1260: 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 4e  ine SQLITE_TEMPN
1270: 41 4d 45 5f 53 49 5a 45 20 5f 4d 41 58 5f 50 41  AME_SIZE _MAX_PA
1280: 54 48 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  TH.# define SQLI
1290: 54 45 5f 4d 49 4e 5f 53 4c 45 45 50 5f 4d 53 20  TE_MIN_SLEEP_MS 
12a0: 31 37 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73  17.#endif..int s
12b0: 71 6c 69 74 65 4f 73 44 65 6c 65 74 65 28 63 6f  qliteOsDelete(co
12c0: 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
12d0: 73 71 6c 69 74 65 4f 73 46 69 6c 65 45 78 69 73  sqliteOsFileExis
12e0: 74 73 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  ts(const char*);
12f0: 0a 69 6e 74 20 73 71 6c 69 74 65 4f 73 46 69 6c  .int sqliteOsFil
1300: 65 52 65 6e 61 6d 65 28 63 6f 6e 73 74 20 63 68  eRename(const ch
1310: 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
1320: 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 4f 73 4f  );.int sqliteOsO
1330: 70 65 6e 52 65 61 64 57 72 69 74 65 28 63 6f 6e  penReadWrite(con
1340: 73 74 20 63 68 61 72 2a 2c 20 4f 73 46 69 6c 65  st char*, OsFile
1350: 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  *, int*);.int sq
1360: 6c 69 74 65 4f 73 4f 70 65 6e 45 78 63 6c 75 73  liteOsOpenExclus
1370: 69 76 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ive(const char*,
1380: 20 4f 73 46 69 6c 65 2a 2c 20 69 6e 74 29 3b 0a   OsFile*, int);.
1390: 69 6e 74 20 73 71 6c 69 74 65 4f 73 4f 70 65 6e  int sqliteOsOpen
13a0: 52 65 61 64 4f 6e 6c 79 28 63 6f 6e 73 74 20 63  ReadOnly(const c
13b0: 68 61 72 2a 2c 20 4f 73 46 69 6c 65 2a 29 3b 0a  har*, OsFile*);.
13c0: 69 6e 74 20 73 71 6c 69 74 65 4f 73 4f 70 65 6e  int sqliteOsOpen
13d0: 44 69 72 65 63 74 6f 72 79 28 63 6f 6e 73 74 20  Directory(const 
13e0: 63 68 61 72 2a 2c 20 4f 73 46 69 6c 65 2a 29 3b  char*, OsFile*);
13f0: 0a 69 6e 74 20 73 71 6c 69 74 65 4f 73 54 65 6d  .int sqliteOsTem
1400: 70 46 69 6c 65 4e 61 6d 65 28 63 68 61 72 2a 29  pFileName(char*)
1410: 3b 0a 69 6e 74 20 73 71 6c 69 74 65 4f 73 43 6c  ;.int sqliteOsCl
1420: 6f 73 65 28 4f 73 46 69 6c 65 2a 29 3b 0a 69 6e  ose(OsFile*);.in
1430: 74 20 73 71 6c 69 74 65 4f 73 52 65 61 64 28 4f  t sqliteOsRead(O
1440: 73 46 69 6c 65 2a 2c 20 76 6f 69 64 2a 2c 20 69  sFile*, void*, i
1450: 6e 74 20 61 6d 74 29 3b 0a 69 6e 74 20 73 71 6c  nt amt);.int sql
1460: 69 74 65 4f 73 57 72 69 74 65 28 4f 73 46 69 6c  iteOsWrite(OsFil
1470: 65 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c  e*, const void*,
1480: 20 69 6e 74 20 61 6d 74 29 3b 0a 69 6e 74 20 73   int amt);.int s
1490: 71 6c 69 74 65 4f 73 53 65 65 6b 28 4f 73 46 69  qliteOsSeek(OsFi
14a0: 6c 65 2a 2c 20 6f 66 66 5f 74 20 6f 66 66 73 65  le*, off_t offse
14b0: 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 4f 73  t);.int sqliteOs
14c0: 53 79 6e 63 28 4f 73 46 69 6c 65 2a 29 3b 0a 69  Sync(OsFile*);.i
14d0: 6e 74 20 73 71 6c 69 74 65 4f 73 54 72 75 6e 63  nt sqliteOsTrunc
14e0: 61 74 65 28 4f 73 46 69 6c 65 2a 2c 20 6f 66 66  ate(OsFile*, off
14f0: 5f 74 20 73 69 7a 65 29 3b 0a 69 6e 74 20 73 71  _t size);.int sq
1500: 6c 69 74 65 4f 73 46 69 6c 65 53 69 7a 65 28 4f  liteOsFileSize(O
1510: 73 46 69 6c 65 2a 2c 20 6f 66 66 5f 74 20 2a 70  sFile*, off_t *p
1520: 53 69 7a 65 29 3b 0a 69 6e 74 20 73 71 6c 69 74  Size);.int sqlit
1530: 65 4f 73 52 65 61 64 4c 6f 63 6b 28 4f 73 46 69  eOsReadLock(OsFi
1540: 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  le*);.int sqlite
1550: 4f 73 57 72 69 74 65 4c 6f 63 6b 28 4f 73 46 69  OsWriteLock(OsFi
1560: 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  le*);.int sqlite
1570: 4f 73 55 6e 6c 6f 63 6b 28 4f 73 46 69 6c 65 2a  OsUnlock(OsFile*
1580: 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 4f 73 52  );.int sqliteOsR
1590: 61 6e 64 6f 6d 53 65 65 64 28 63 68 61 72 2a 29  andomSeed(char*)
15a0: 3b 0a 69 6e 74 20 73 71 6c 69 74 65 4f 73 53 6c  ;.int sqliteOsSl
15b0: 65 65 70 28 69 6e 74 20 6d 73 29 3b 0a 69 6e 74  eep(int ms);.int
15c0: 20 73 71 6c 69 74 65 4f 73 43 75 72 72 65 6e 74   sqliteOsCurrent
15d0: 54 69 6d 65 28 64 6f 75 62 6c 65 2a 29 3b 0a 76  Time(double*);.v
15e0: 6f 69 64 20 73 71 6c 69 74 65 4f 73 45 6e 74 65  oid sqliteOsEnte
15f0: 72 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 76 6f  rMutex(void);.vo
1600: 69 64 20 73 71 6c 69 74 65 4f 73 4c 65 61 76 65  id sqliteOsLeave
1610: 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 63 68 61  Mutex(void);.cha
1620: 72 20 2a 73 71 6c 69 74 65 4f 73 46 75 6c 6c 50  r *sqliteOsFullP
1630: 61 74 68 6e 61 6d 65 28 63 6f 6e 73 74 20 63 68  athname(const ch
1640: 61 72 2a 29 3b 0a 0a 0a 0a 23 65 6e 64 69 66 20  ar*);....#endif 
1650: 2f 2a 20 5f 53 51 4c 49 54 45 5f 4f 53 5f 48 5f  /* _SQLITE_OS_H_
1660: 20 2a 2f 0a                                       */.