/ Hex Artifact Content
Login

Artifact 4c880cf67437f323cd0c3ab2154f1d76babc12d3:


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 2a 0a 2a  ws systems..**.*
0250: 2a 20 54 68 69 73 20 68 65 61 64 65 72 20 66 69  * This header fi
0260: 6c 65 20 69 73 20 23 69 6e 63 6c 75 64 65 2d 65  le is #include-e
0270: 64 20 62 79 20 73 71 6c 69 74 65 49 6e 74 2e 68  d by sqliteInt.h
0280: 20 61 6e 64 20 74 68 75 73 20 65 6e 64 73 20 75   and thus ends u
0290: 70 0a 2a 2a 20 62 65 69 6e 67 20 69 6e 63 6c 75  p.** being inclu
02a0: 64 65 64 20 62 79 20 65 76 65 72 79 20 73 6f 75  ded by every sou
02b0: 72 63 65 20 66 69 6c 65 2e 0a 2a 2f 0a 23 69 66  rce file..*/.#if
02c0: 6e 64 65 66 20 5f 53 51 4c 49 54 45 5f 4f 53 5f  ndef _SQLITE_OS_
02d0: 48 5f 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49  H_.#define _SQLI
02e0: 54 45 5f 4f 53 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20  TE_OS_H_../*.** 
02f0: 46 69 67 75 72 65 20 6f 75 74 20 69 66 20 77 65  Figure out if we
0300: 20 61 72 65 20 64 65 61 6c 69 6e 67 20 77 69 74   are dealing wit
0310: 68 20 55 6e 69 78 2c 20 57 69 6e 64 6f 77 73 2c  h Unix, Windows,
0320: 20 6f 72 20 73 6f 6d 65 20 6f 74 68 65 72 0a 2a   or some other.*
0330: 2a 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74  * operating syst
0340: 65 6d 2e 20 20 41 66 74 65 72 20 74 68 65 20 66  em.  After the f
0350: 6f 6c 6c 6f 77 69 6e 67 20 62 6c 6f 63 6b 20 6f  ollowing block o
0360: 66 20 70 72 65 70 72 6f 63 65 73 73 20 6d 61 63  f preprocess mac
0370: 72 6f 73 2c 0a 2a 2a 20 61 6c 6c 20 6f 66 20 4f  ros,.** all of O
0380: 53 5f 55 4e 49 58 2c 20 4f 53 5f 57 49 4e 2c 20  S_UNIX, OS_WIN, 
0390: 4f 53 5f 4f 53 32 2c 20 61 6e 64 20 4f 53 5f 4f  OS_OS2, and OS_O
03a0: 54 48 45 52 20 77 69 6c 6c 20 64 65 66 69 6e 65  THER will define
03b0: 64 20 74 6f 20 65 69 74 68 65 72 0a 2a 2a 20 31  d to either.** 1
03c0: 20 6f 72 20 30 2e 20 20 4f 6e 65 20 6f 66 20 74   or 0.  One of t
03d0: 68 65 20 66 6f 75 72 20 77 69 6c 6c 20 62 65 20  he four will be 
03e0: 31 2e 20 20 54 68 65 20 6f 74 68 65 72 20 74 68  1.  The other th
03f0: 72 65 65 20 77 69 6c 6c 20 62 65 20 30 2e 0a 2a  ree will be 0..*
0400: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 4f 53  /.#if defined(OS
0410: 5f 4f 54 48 45 52 29 0a 23 20 69 66 20 4f 53 5f  _OTHER).# if OS_
0420: 4f 54 48 45 52 3d 3d 31 0a 23 20 20 20 75 6e 64  OTHER==1.#   und
0430: 65 66 20 4f 53 5f 55 4e 49 58 0a 23 20 20 20 64  ef OS_UNIX.#   d
0440: 65 66 69 6e 65 20 4f 53 5f 55 4e 49 58 20 30 0a  efine OS_UNIX 0.
0450: 23 20 20 20 75 6e 64 65 66 20 4f 53 5f 57 49 4e  #   undef OS_WIN
0460: 0a 23 20 20 20 64 65 66 69 6e 65 20 4f 53 5f 57  .#   define OS_W
0470: 49 4e 20 30 0a 23 20 20 20 75 6e 64 65 66 20 4f  IN 0.#   undef O
0480: 53 5f 4f 53 32 0a 23 20 20 20 64 65 66 69 6e 65  S_OS2.#   define
0490: 20 4f 53 5f 4f 53 32 20 30 0a 23 20 65 6c 73 65   OS_OS2 0.# else
04a0: 0a 23 20 20 20 75 6e 64 65 66 20 4f 53 5f 4f 54  .#   undef OS_OT
04b0: 48 45 52 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  HER.# endif.#end
04c0: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
04d0: 4f 53 5f 55 4e 49 58 29 20 26 26 20 21 64 65 66  OS_UNIX) && !def
04e0: 69 6e 65 64 28 4f 53 5f 4f 54 48 45 52 29 0a 23  ined(OS_OTHER).#
04f0: 20 64 65 66 69 6e 65 20 4f 53 5f 4f 54 48 45 52   define OS_OTHER
0500: 20 30 0a 23 20 69 66 6e 64 65 66 20 4f 53 5f 57   0.# ifndef OS_W
0510: 49 4e 0a 23 20 20 20 69 66 20 64 65 66 69 6e 65  IN.#   if define
0520: 64 28 5f 57 49 4e 33 32 29 20 7c 7c 20 64 65 66  d(_WIN32) || def
0530: 69 6e 65 64 28 57 49 4e 33 32 29 20 7c 7c 20 64  ined(WIN32) || d
0540: 65 66 69 6e 65 64 28 5f 5f 43 59 47 57 49 4e 5f  efined(__CYGWIN_
0550: 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f  _) || defined(__
0560: 4d 49 4e 47 57 33 32 5f 5f 29 20 7c 7c 20 64 65  MINGW32__) || de
0570: 66 69 6e 65 64 28 5f 5f 42 4f 52 4c 41 4e 44 43  fined(__BORLANDC
0580: 5f 5f 29 0a 23 20 20 20 20 20 64 65 66 69 6e 65  __).#     define
0590: 20 4f 53 5f 57 49 4e 20 31 0a 23 20 20 20 20 20   OS_WIN 1.#     
05a0: 64 65 66 69 6e 65 20 4f 53 5f 55 4e 49 58 20 30  define OS_UNIX 0
05b0: 0a 23 20 20 20 20 20 64 65 66 69 6e 65 20 4f 53  .#     define OS
05c0: 5f 4f 53 32 20 30 0a 23 20 20 20 65 6c 69 66 20  _OS2 0.#   elif 
05d0: 64 65 66 69 6e 65 64 28 5f 5f 45 4d 58 5f 5f 29  defined(__EMX__)
05e0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4f 53 32   || defined(_OS2
05f0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 4f 53 32  ) || defined(OS2
0600: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4f 53  ) || defined(_OS
0610: 32 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  2_) || defined(_
0620: 5f 4f 53 32 5f 5f 29 0a 23 20 20 20 20 20 64 65  _OS2__).#     de
0630: 66 69 6e 65 20 4f 53 5f 57 49 4e 20 30 0a 23 20  fine OS_WIN 0.# 
0640: 20 20 20 20 64 65 66 69 6e 65 20 4f 53 5f 55 4e      define OS_UN
0650: 49 58 20 30 0a 23 20 20 20 20 20 64 65 66 69 6e  IX 0.#     defin
0660: 65 20 4f 53 5f 4f 53 32 20 31 0a 23 20 20 20 65  e OS_OS2 1.#   e
0670: 6c 73 65 0a 23 20 20 20 20 20 64 65 66 69 6e 65  lse.#     define
0680: 20 4f 53 5f 57 49 4e 20 30 0a 23 20 20 20 20 20   OS_WIN 0.#     
0690: 64 65 66 69 6e 65 20 4f 53 5f 55 4e 49 58 20 31  define OS_UNIX 1
06a0: 0a 23 20 20 20 20 20 64 65 66 69 6e 65 20 4f 53  .#     define OS
06b0: 5f 4f 53 32 20 30 0a 23 20 20 65 6e 64 69 66 0a  _OS2 0.#  endif.
06c0: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
06d0: 20 4f 53 5f 55 4e 49 58 20 30 0a 23 20 20 64 65   OS_UNIX 0.#  de
06e0: 66 69 6e 65 20 4f 53 5f 4f 53 32 20 30 0a 23 20  fine OS_OS2 0.# 
06f0: 65 6e 64 69 66 0a 23 65 6c 73 65 0a 23 20 69 66  endif.#else.# if
0700: 6e 64 65 66 20 4f 53 5f 57 49 4e 0a 23 20 20 64  ndef OS_WIN.#  d
0710: 65 66 69 6e 65 20 4f 53 5f 57 49 4e 20 30 0a 23  efine OS_WIN 0.#
0720: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 0a   endif.#endif...
0730: 0a 2f 2a 0a 2a 2a 20 44 65 66 69 6e 65 20 74 68  ./*.** Define th
0740: 65 20 6d 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f  e maximum size o
0750: 66 20 61 20 74 65 6d 70 6f 72 61 72 79 20 66 69  f a temporary fi
0760: 6c 65 6e 61 6d 65 0a 2a 2f 0a 23 69 66 20 4f 53  lename.*/.#if OS
0770: 5f 57 49 4e 0a 23 20 69 6e 63 6c 75 64 65 20 3c  _WIN.# include <
0780: 77 69 6e 64 6f 77 73 2e 68 3e 0a 23 20 64 65 66  windows.h>.# def
0790: 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 4e  ine SQLITE_TEMPN
07a0: 41 4d 45 5f 53 49 5a 45 20 28 4d 41 58 5f 50 41  AME_SIZE (MAX_PA
07b0: 54 48 2b 35 30 29 0a 23 65 6c 69 66 20 4f 53 5f  TH+50).#elif OS_
07c0: 4f 53 32 0a 23 20 69 66 20 28 5f 5f 47 4e 55 43  OS2.# if (__GNUC
07d0: 5f 5f 20 3e 20 33 20 7c 7c 20 5f 5f 47 4e 55 43  __ > 3 || __GNUC
07e0: 5f 5f 20 3d 3d 20 33 20 26 26 20 5f 5f 47 4e 55  __ == 3 && __GNU
07f0: 43 5f 4d 49 4e 4f 52 5f 5f 20 3e 3d 20 33 29 20  C_MINOR__ >= 3) 
0800: 26 26 20 64 65 66 69 6e 65 64 28 4f 53 32 5f 48  && defined(OS2_H
0810: 49 47 48 5f 4d 45 4d 4f 52 59 29 0a 23 20 20 69  IGH_MEMORY).#  i
0820: 6e 63 6c 75 64 65 20 3c 6f 73 32 73 61 66 65 2e  nclude <os2safe.
0830: 68 3e 20 2f 2a 20 68 61 73 20 74 6f 20 62 65 20  h> /* has to be 
0840: 69 6e 63 6c 75 64 65 64 20 62 65 66 6f 72 65 20  included before 
0850: 6f 73 32 2e 68 20 66 6f 72 20 6c 69 6e 6b 69 6e  os2.h for linkin
0860: 67 20 74 6f 20 77 6f 72 6b 20 2a 2f 0a 23 20 65  g to work */.# e
0870: 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20 49 4e  ndif.# define IN
0880: 43 4c 5f 44 4f 53 44 41 54 45 54 49 4d 45 0a 23  CL_DOSDATETIME.#
0890: 20 64 65 66 69 6e 65 20 49 4e 43 4c 5f 44 4f 53   define INCL_DOS
08a0: 46 49 4c 45 4d 47 52 0a 23 20 64 65 66 69 6e 65  FILEMGR.# define
08b0: 20 49 4e 43 4c 5f 44 4f 53 45 52 52 4f 52 53 0a   INCL_DOSERRORS.
08c0: 23 20 64 65 66 69 6e 65 20 49 4e 43 4c 5f 44 4f  # define INCL_DO
08d0: 53 4d 49 53 43 0a 23 20 64 65 66 69 6e 65 20 49  SMISC.# define I
08e0: 4e 43 4c 5f 44 4f 53 50 52 4f 43 45 53 53 0a 23  NCL_DOSPROCESS.#
08f0: 20 64 65 66 69 6e 65 20 49 4e 43 4c 5f 44 4f 53   define INCL_DOS
0900: 4d 4f 44 55 4c 45 4d 47 52 0a 23 20 69 6e 63 6c  MODULEMGR.# incl
0910: 75 64 65 20 3c 6f 73 32 2e 68 3e 0a 23 20 64 65  ude <os2.h>.# de
0920: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50  fine SQLITE_TEMP
0930: 4e 41 4d 45 5f 53 49 5a 45 20 28 43 43 48 4d 41  NAME_SIZE (CCHMA
0940: 58 50 41 54 48 43 4f 4d 50 29 0a 23 65 6c 73 65  XPATHCOMP).#else
0950: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
0960: 5f 54 45 4d 50 4e 41 4d 45 5f 53 49 5a 45 20 32  _TEMPNAME_SIZE 2
0970: 30 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 49 66  00.#endif../* If
0980: 20 74 68 65 20 53 45 54 5f 46 55 4c 4c 53 59 4e   the SET_FULLSYN
0990: 43 20 6d 61 63 72 6f 20 69 73 20 6e 6f 74 20 64  C macro is not d
09a0: 65 66 69 6e 65 64 20 61 62 6f 76 65 2c 20 74 68  efined above, th
09b0: 65 6e 20 6d 61 6b 65 20 69 74 0a 2a 2a 20 61 20  en make it.** a 
09c0: 6e 6f 2d 6f 70 0a 2a 2f 0a 23 69 66 6e 64 65 66  no-op.*/.#ifndef
09d0: 20 53 45 54 5f 46 55 4c 4c 53 59 4e 43 0a 23 20   SET_FULLSYNC.# 
09e0: 64 65 66 69 6e 65 20 53 45 54 5f 46 55 4c 4c 53  define SET_FULLS
09f0: 59 4e 43 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a  YNC(x,y).#endif.
0a00: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66 61 75  ./*.** The defau
0a10: 6c 74 20 73 69 7a 65 20 6f 66 20 61 20 64 69 73  lt size of a dis
0a20: 6b 20 73 65 63 74 6f 72 0a 2a 2f 0a 23 69 66 6e  k sector.*/.#ifn
0a30: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  def SQLITE_DEFAU
0a40: 4c 54 5f 53 45 43 54 4f 52 5f 53 49 5a 45 0a 23  LT_SECTOR_SIZE.#
0a50: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
0a60: 45 46 41 55 4c 54 5f 53 45 43 54 4f 52 5f 53 49  EFAULT_SECTOR_SI
0a70: 5a 45 20 35 31 32 0a 23 65 6e 64 69 66 0a 0a 2f  ZE 512.#endif../
0a80: 2a 0a 2a 2a 20 54 65 6d 70 6f 72 61 72 79 20 66  *.** Temporary f
0a90: 69 6c 65 73 20 61 72 65 20 6e 61 6d 65 64 20 73  iles are named s
0aa0: 74 61 72 74 69 6e 67 20 77 69 74 68 20 74 68 69  tarting with thi
0ab0: 73 20 70 72 65 66 69 78 20 66 6f 6c 6c 6f 77 65  s prefix followe
0ac0: 64 20 62 79 20 31 36 20 72 61 6e 64 6f 6d 0a 2a  d by 16 random.*
0ad0: 2a 20 61 6c 70 68 61 6e 75 6d 65 72 69 63 20 63  * alphanumeric c
0ae0: 68 61 72 61 63 74 65 72 73 2c 20 61 6e 64 20 6e  haracters, and n
0af0: 6f 20 66 69 6c 65 20 65 78 74 65 6e 73 69 6f 6e  o file extension
0b00: 2e 20 54 68 65 79 20 61 72 65 20 73 74 6f 72 65  . They are store
0b10: 64 20 69 6e 20 74 68 65 0a 2a 2a 20 4f 53 27 73  d in the.** OS's
0b20: 20 73 74 61 6e 64 61 72 64 20 74 65 6d 70 6f 72   standard tempor
0b30: 61 72 79 20 66 69 6c 65 20 64 69 72 65 63 74 6f  ary file directo
0b40: 72 79 2c 20 61 6e 64 20 61 72 65 20 64 65 6c 65  ry, and are dele
0b50: 74 65 64 20 70 72 69 6f 72 20 74 6f 20 65 78 69  ted prior to exi
0b60: 74 2e 0a 2a 2a 20 49 66 20 73 71 6c 69 74 65 20  t..** If sqlite 
0b70: 69 73 20 62 65 69 6e 67 20 65 6d 62 65 64 64 65  is being embedde
0b80: 64 20 69 6e 20 61 6e 6f 74 68 65 72 20 70 72 6f  d in another pro
0b90: 67 72 61 6d 2c 20 79 6f 75 20 6d 61 79 20 77 69  gram, you may wi
0ba0: 73 68 20 74 6f 20 63 68 61 6e 67 65 20 74 68 65  sh to change the
0bb0: 0a 2a 2a 20 70 72 65 66 69 78 20 74 6f 20 72 65  .** prefix to re
0bc0: 66 6c 65 63 74 20 79 6f 75 72 20 70 72 6f 67 72  flect your progr
0bd0: 61 6d 27 73 20 6e 61 6d 65 2c 20 73 6f 20 74 68  am's name, so th
0be0: 61 74 20 69 66 20 79 6f 75 72 20 70 72 6f 67 72  at if your progr
0bf0: 61 6d 20 65 78 69 74 73 0a 2a 2a 20 70 72 65 6d  am exits.** prem
0c00: 61 74 75 72 65 6c 79 2c 20 6f 6c 64 20 74 65 6d  aturely, old tem
0c10: 70 6f 72 61 72 79 20 66 69 6c 65 73 20 63 61 6e  porary files can
0c20: 20 62 65 20 65 61 73 69 6c 79 20 69 64 65 6e 74   be easily ident
0c30: 69 66 69 65 64 2e 20 54 68 69 73 20 63 61 6e 20  ified. This can 
0c40: 62 65 20 64 6f 6e 65 0a 2a 2a 20 75 73 69 6e 67  be done.** using
0c50: 20 2d 44 53 51 4c 49 54 45 5f 54 45 4d 50 5f 46   -DSQLITE_TEMP_F
0c60: 49 4c 45 5f 50 52 45 46 49 58 3d 6d 79 70 72 65  ILE_PREFIX=mypre
0c70: 66 69 78 5f 20 6f 6e 20 74 68 65 20 63 6f 6d 70  fix_ on the comp
0c80: 69 6c 65 72 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  iler command lin
0c90: 65 2e 0a 2a 2a 0a 2a 2a 20 32 30 30 36 2d 31 30  e..**.** 2006-10
0ca0: 2d 33 31 3a 20 20 54 68 65 20 64 65 66 61 75 6c  -31:  The defaul
0cb0: 74 20 70 72 65 66 69 78 20 75 73 65 64 20 74 6f  t prefix used to
0cc0: 20 62 65 20 22 73 71 6c 69 74 65 5f 22 2e 20 20   be "sqlite_".  
0cd0: 42 75 74 20 74 68 65 6e 0a 2a 2a 20 4d 63 61 66  But then.** Mcaf
0ce0: 65 65 20 73 74 61 72 74 65 64 20 75 73 69 6e 67  ee started using
0cf0: 20 53 51 4c 69 74 65 20 69 6e 20 74 68 65 69 72   SQLite in their
0d00: 20 61 6e 74 69 2d 76 69 72 75 73 20 70 72 6f 64   anti-virus prod
0d10: 75 63 74 20 61 6e 64 20 69 74 0a 2a 2a 20 73 74  uct and it.** st
0d20: 61 72 74 65 64 20 70 75 74 74 69 6e 67 20 66 69  arted putting fi
0d30: 6c 65 73 20 77 69 74 68 20 74 68 65 20 22 73 71  les with the "sq
0d40: 6c 69 74 65 22 20 6e 61 6d 65 20 69 6e 20 74 68  lite" name in th
0d50: 65 20 63 3a 2f 74 65 6d 70 20 66 6f 6c 64 65 72  e c:/temp folder
0d60: 2e 0a 2a 2a 20 54 68 69 73 20 61 6e 6e 6f 79 65  ..** This annoye
0d70: 64 20 6d 61 6e 79 20 77 69 6e 64 6f 77 73 20 75  d many windows u
0d80: 73 65 72 73 2e 20 20 54 68 6f 73 65 20 75 73 65  sers.  Those use
0d90: 72 73 20 77 6f 75 6c 64 20 74 68 65 6e 20 64 6f  rs would then do
0da0: 20 61 20 0a 2a 2a 20 47 6f 6f 67 6c 65 20 73 65   a .** Google se
0db0: 61 72 63 68 20 66 6f 72 20 22 73 71 6c 69 74 65  arch for "sqlite
0dc0: 22 2c 20 66 69 6e 64 20 74 68 65 20 74 65 6c 65  ", find the tele
0dd0: 70 68 6f 6e 65 20 6e 75 6d 62 65 72 73 20 6f 66  phone numbers of
0de0: 20 74 68 65 0a 2a 2a 20 64 65 76 65 6c 6f 70 65   the.** develope
0df0: 72 73 20 61 6e 64 20 63 61 6c 6c 20 74 6f 20 77  rs and call to w
0e00: 61 6b 65 20 74 68 65 6d 20 75 70 20 61 74 20 6e  ake them up at n
0e10: 69 67 68 74 20 61 6e 64 20 63 6f 6d 70 6c 61 69  ight and complai
0e20: 6e 2e 0a 2a 2a 20 46 6f 72 20 74 68 69 73 20 72  n..** For this r
0e30: 65 61 73 6f 6e 2c 20 74 68 65 20 64 65 66 61 75  eason, the defau
0e40: 6c 74 20 6e 61 6d 65 20 70 72 65 66 69 78 20 69  lt name prefix i
0e50: 73 20 63 68 61 6e 67 65 64 20 74 6f 20 62 65 20  s changed to be 
0e60: 22 73 71 6c 69 74 65 22 20 0a 2a 2a 20 73 70 65  "sqlite" .** spe
0e70: 6c 6c 65 64 20 62 61 63 6b 77 61 72 64 73 2e 20  lled backwards. 
0e80: 20 53 6f 20 74 68 65 20 74 65 6d 70 20 66 69 6c   So the temp fil
0e90: 65 73 20 61 72 65 20 73 74 69 6c 6c 20 69 64 65  es are still ide
0ea0: 6e 74 69 66 69 65 64 2c 20 62 75 74 0a 2a 2a 20  ntified, but.** 
0eb0: 61 6e 79 62 6f 64 79 20 73 6d 61 72 74 20 65 6e  anybody smart en
0ec0: 6f 75 67 68 20 74 6f 20 66 69 67 75 72 65 20 6f  ough to figure o
0ed0: 75 74 20 74 68 65 20 63 6f 64 65 20 69 73 20 61  ut the code is a
0ee0: 6c 73 6f 20 6c 69 6b 65 6c 79 20 73 6d 61 72 74  lso likely smart
0ef0: 0a 2a 2a 20 65 6e 6f 75 67 68 20 74 6f 20 6b 6e  .** enough to kn
0f00: 6f 77 20 74 68 61 74 20 63 61 6c 6c 69 6e 67 20  ow that calling 
0f10: 74 68 65 20 64 65 76 65 6c 6f 70 65 72 20 77 69  the developer wi
0f20: 6c 6c 20 6e 6f 74 20 68 65 6c 70 20 67 65 74 20  ll not help get 
0f30: 72 69 64 0a 2a 2a 20 6f 66 20 74 68 65 20 66 69  rid.** of the fi
0f40: 6c 65 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  le..*/.#ifndef S
0f50: 51 4c 49 54 45 5f 54 45 4d 50 5f 46 49 4c 45 5f  QLITE_TEMP_FILE_
0f60: 50 52 45 46 49 58 0a 23 20 64 65 66 69 6e 65 20  PREFIX.# define 
0f70: 53 51 4c 49 54 45 5f 54 45 4d 50 5f 46 49 4c 45  SQLITE_TEMP_FILE
0f80: 5f 50 52 45 46 49 58 20 22 65 74 69 6c 71 73 5f  _PREFIX "etilqs_
0f90: 22 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ".#endif../*.** 
0fa0: 49 66 20 75 73 69 6e 67 20 61 6e 20 61 6c 74 65  If using an alte
0fb0: 72 6e 61 74 69 76 65 20 4f 53 20 69 6e 74 65 72  rnative OS inter
0fc0: 66 61 63 65 2c 20 74 68 65 6e 20 77 65 20 6d 75  face, then we mu
0fd0: 73 74 20 68 61 76 65 20 61 6e 20 22 6f 73 5f 6f  st have an "os_o
0fe0: 74 68 65 72 2e 68 22 0a 2a 2a 20 68 65 61 64 65  ther.h".** heade
0ff0: 72 20 66 69 6c 65 20 61 76 61 69 6c 61 62 6c 65  r file available
1000: 20 66 6f 72 20 74 68 61 74 20 69 6e 74 65 72 66   for that interf
1010: 61 63 65 2e 20 20 50 72 65 73 75 6d 61 62 6c 79  ace.  Presumably
1020: 20 74 68 65 20 22 6f 73 5f 6f 74 68 65 72 2e 68   the "os_other.h
1030: 22 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65  ".** header file
1040: 20 63 6f 6e 74 61 69 6e 73 20 23 64 65 66 69 6e   contains #defin
1050: 65 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 74 68  es similar to th
1060: 6f 73 65 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69  ose above..*/.#i
1070: 66 20 4f 53 5f 4f 54 48 45 52 0a 23 20 69 6e 63  f OS_OTHER.# inc
1080: 6c 75 64 65 20 22 6f 73 5f 6f 74 68 65 72 2e 68  lude "os_other.h
1090: 22 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a  ".#endif.../*.**
10a0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76   The following v
10b0: 61 6c 75 65 73 20 6d 61 79 20 62 65 20 70 61 73  alues may be pas
10c0: 73 65 64 20 61 73 20 74 68 65 20 73 65 63 6f 6e  sed as the secon
10d0: 64 20 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a  d argument to.**
10e0: 20 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b 28 29   sqlite3OsLock()
10f0: 2e 20 54 68 65 20 76 61 72 69 6f 75 73 20 6c 6f  . The various lo
1100: 63 6b 73 20 65 78 68 69 62 69 74 20 74 68 65 20  cks exhibit the 
1110: 66 6f 6c 6c 6f 77 69 6e 67 20 73 65 6d 61 6e 74  following semant
1120: 69 63 73 3a 0a 2a 2a 0a 2a 2a 20 53 48 41 52 45  ics:.**.** SHARE
1130: 44 3a 20 20 20 20 41 6e 79 20 6e 75 6d 62 65 72  D:    Any number
1140: 20 6f 66 20 70 72 6f 63 65 73 73 65 73 20 6d 61   of processes ma
1150: 79 20 68 6f 6c 64 20 61 20 53 48 41 52 45 44 20  y hold a SHARED 
1160: 6c 6f 63 6b 20 73 69 6d 75 6c 74 61 6e 65 6f 75  lock simultaneou
1170: 73 6c 79 2e 0a 2a 2a 20 52 45 53 45 52 56 45 44  sly..** RESERVED
1180: 3a 20 20 41 20 73 69 6e 67 6c 65 20 70 72 6f 63  :  A single proc
1190: 65 73 73 20 6d 61 79 20 68 6f 6c 64 20 61 20 52  ess may hold a R
11a0: 45 53 45 52 56 45 44 20 6c 6f 63 6b 20 6f 6e 20  ESERVED lock on 
11b0: 61 20 66 69 6c 65 20 61 74 0a 2a 2a 20 20 20 20  a file at.**    
11c0: 20 20 20 20 20 20 20 20 61 6e 79 20 74 69 6d 65          any time
11d0: 2e 20 4f 74 68 65 72 20 70 72 6f 63 65 73 73 65  . Other processe
11e0: 73 20 6d 61 79 20 68 6f 6c 64 20 61 6e 64 20 6f  s may hold and o
11f0: 62 74 61 69 6e 20 6e 65 77 20 53 48 41 52 45 44  btain new SHARED
1200: 20 6c 6f 63 6b 73 2e 0a 2a 2a 20 50 45 4e 44 49   locks..** PENDI
1210: 4e 47 3a 20 20 20 41 20 73 69 6e 67 6c 65 20 70  NG:   A single p
1220: 72 6f 63 65 73 73 20 6d 61 79 20 68 6f 6c 64 20  rocess may hold 
1230: 61 20 50 45 4e 44 49 4e 47 20 6c 6f 63 6b 20 6f  a PENDING lock o
1240: 6e 20 61 20 66 69 6c 65 20 61 74 0a 2a 2a 20 20  n a file at.**  
1250: 20 20 20 20 20 20 20 20 20 20 61 6e 79 20 6f 6e            any on
1260: 65 20 74 69 6d 65 2e 20 45 78 69 73 74 69 6e 67  e time. Existing
1270: 20 53 48 41 52 45 44 20 6c 6f 63 6b 73 20 6d 61   SHARED locks ma
1280: 79 20 70 65 72 73 69 73 74 2c 20 62 75 74 20 6e  y persist, but n
1290: 6f 20 6e 65 77 0a 2a 2a 20 20 20 20 20 20 20 20  o new.**        
12a0: 20 20 20 20 53 48 41 52 45 44 20 6c 6f 63 6b 73      SHARED locks
12b0: 20 6d 61 79 20 62 65 20 6f 62 74 61 69 6e 65 64   may be obtained
12c0: 20 62 79 20 6f 74 68 65 72 20 70 72 6f 63 65 73   by other proces
12d0: 73 65 73 2e 0a 2a 2a 20 45 58 43 4c 55 53 49 56  ses..** EXCLUSIV
12e0: 45 3a 20 41 6e 20 45 58 43 4c 55 53 49 56 45 20  E: An EXCLUSIVE 
12f0: 6c 6f 63 6b 20 70 72 65 63 6c 75 64 65 73 20 61  lock precludes a
1300: 6c 6c 20 6f 74 68 65 72 20 6c 6f 63 6b 73 2e 0a  ll other locks..
1310: 2a 2a 0a 2a 2a 20 50 45 4e 44 49 4e 47 5f 4c 4f  **.** PENDING_LO
1320: 43 4b 20 6d 61 79 20 6e 6f 74 20 62 65 20 70 61  CK may not be pa
1330: 73 73 65 64 20 64 69 72 65 63 74 6c 79 20 74 6f  ssed directly to
1340: 20 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b 28 29   sqlite3OsLock()
1350: 2e 20 49 6e 73 74 65 61 64 2c 20 61 0a 2a 2a 20  . Instead, a.** 
1360: 70 72 6f 63 65 73 73 20 74 68 61 74 20 72 65 71  process that req
1370: 75 65 73 74 73 20 61 6e 20 45 58 43 4c 55 53 49  uests an EXCLUSI
1380: 56 45 20 6c 6f 63 6b 20 6d 61 79 20 61 63 74 75  VE lock may actu
1390: 61 6c 6c 79 20 6f 62 74 61 69 6e 20 61 20 50 45  ally obtain a PE
13a0: 4e 44 49 4e 47 0a 2a 2a 20 6c 6f 63 6b 2e 20 54  NDING.** lock. T
13b0: 68 69 73 20 63 61 6e 20 62 65 20 75 70 67 72 61  his can be upgra
13c0: 64 65 64 20 74 6f 20 61 6e 20 45 58 43 4c 55 53  ded to an EXCLUS
13d0: 49 56 45 20 6c 6f 63 6b 20 62 79 20 61 20 73 75  IVE lock by a su
13e0: 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 20 74 6f  bsequent call to
13f0: 0a 2a 2a 20 73 71 6c 69 74 65 33 4f 73 4c 6f 63  .** sqlite3OsLoc
1400: 6b 28 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  k()..*/.#define 
1410: 4e 4f 5f 4c 4f 43 4b 20 20 20 20 20 20 20 20 20  NO_LOCK         
1420: 30 0a 23 64 65 66 69 6e 65 20 53 48 41 52 45 44  0.#define SHARED
1430: 5f 4c 4f 43 4b 20 20 20 20 20 31 0a 23 64 65 66  _LOCK     1.#def
1440: 69 6e 65 20 52 45 53 45 52 56 45 44 5f 4c 4f 43  ine RESERVED_LOC
1450: 4b 20 20 20 32 0a 23 64 65 66 69 6e 65 20 50 45  K   2.#define PE
1460: 4e 44 49 4e 47 5f 4c 4f 43 4b 20 20 20 20 33 0a  NDING_LOCK    3.
1470: 23 64 65 66 69 6e 65 20 45 58 43 4c 55 53 49 56  #define EXCLUSIV
1480: 45 5f 4c 4f 43 4b 20 20 34 0a 0a 2f 2a 0a 2a 2a  E_LOCK  4../*.**
1490: 20 46 69 6c 65 20 4c 6f 63 6b 69 6e 67 20 4e 6f   File Locking No
14a0: 74 65 73 3a 20 20 28 4d 6f 73 74 6c 79 20 61 62  tes:  (Mostly ab
14b0: 6f 75 74 20 77 69 6e 64 6f 77 73 20 62 75 74 20  out windows but 
14c0: 61 6c 73 6f 20 73 6f 6d 65 20 69 6e 66 6f 20 66  also some info f
14d0: 6f 72 20 55 6e 69 78 29 0a 2a 2a 0a 2a 2a 20 57  or Unix).**.** W
14e0: 65 20 63 61 6e 6e 6f 74 20 75 73 65 20 4c 6f 63  e cannot use Loc
14f0: 6b 46 69 6c 65 45 78 28 29 20 6f 72 20 55 6e 6c  kFileEx() or Unl
1500: 6f 63 6b 46 69 6c 65 45 78 28 29 20 6f 6e 20 57  ockFileEx() on W
1510: 69 6e 39 35 2f 39 38 2f 4d 45 20 62 65 63 61 75  in95/98/ME becau
1520: 73 65 0a 2a 2a 20 74 68 6f 73 65 20 66 75 6e 63  se.** those func
1530: 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20 61 76  tions are not av
1540: 61 69 6c 61 62 6c 65 2e 20 20 53 6f 20 77 65 20  ailable.  So we 
1550: 75 73 65 20 6f 6e 6c 79 20 4c 6f 63 6b 46 69 6c  use only LockFil
1560: 65 28 29 20 61 6e 64 0a 2a 2a 20 55 6e 6c 6f 63  e() and.** Unloc
1570: 6b 46 69 6c 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 4c  kFile()..**.** L
1580: 6f 63 6b 46 69 6c 65 28 29 20 70 72 65 76 65 6e  ockFile() preven
1590: 74 73 20 6e 6f 74 20 6a 75 73 74 20 77 72 69 74  ts not just writ
15a0: 69 6e 67 20 62 75 74 20 61 6c 73 6f 20 72 65 61  ing but also rea
15b0: 64 69 6e 67 20 62 79 20 6f 74 68 65 72 20 70 72  ding by other pr
15c0: 6f 63 65 73 73 65 73 2e 0a 2a 2a 20 41 20 53 48  ocesses..** A SH
15d0: 41 52 45 44 5f 4c 4f 43 4b 20 69 73 20 6f 62 74  ARED_LOCK is obt
15e0: 61 69 6e 65 64 20 62 79 20 6c 6f 63 6b 69 6e 67  ained by locking
15f0: 20 61 20 73 69 6e 67 6c 65 20 72 61 6e 64 6f 6d   a single random
1600: 6c 79 2d 63 68 6f 73 65 6e 20 0a 2a 2a 20 62 79  ly-chosen .** by
1610: 74 65 20 6f 75 74 20 6f 66 20 61 20 73 70 65 63  te out of a spec
1620: 69 66 69 63 20 72 61 6e 67 65 20 6f 66 20 62 79  ific range of by
1630: 74 65 73 2e 20 54 68 65 20 6c 6f 63 6b 20 62 79  tes. The lock by
1640: 74 65 20 69 73 20 6f 62 74 61 69 6e 65 64 20 61  te is obtained a
1650: 74 20 0a 2a 2a 20 72 61 6e 64 6f 6d 20 73 6f 20  t .** random so 
1660: 74 77 6f 20 73 65 70 61 72 61 74 65 20 72 65 61  two separate rea
1670: 64 65 72 73 20 63 61 6e 20 70 72 6f 62 61 62 6c  ders can probabl
1680: 79 20 61 63 63 65 73 73 20 74 68 65 20 66 69 6c  y access the fil
1690: 65 20 61 74 20 74 68 65 20 0a 2a 2a 20 73 61 6d  e at the .** sam
16a0: 65 20 74 69 6d 65 2c 20 75 6e 6c 65 73 73 20 74  e time, unless t
16b0: 68 65 79 20 61 72 65 20 75 6e 6c 75 63 6b 79 20  hey are unlucky 
16c0: 61 6e 64 20 63 68 6f 6f 73 65 20 74 68 65 20 73  and choose the s
16d0: 61 6d 65 20 6c 6f 63 6b 20 62 79 74 65 2e 0a 2a  ame lock byte..*
16e0: 2a 20 41 6e 20 45 58 43 4c 55 53 49 56 45 5f 4c  * An EXCLUSIVE_L
16f0: 4f 43 4b 20 69 73 20 6f 62 74 61 69 6e 65 64 20  OCK is obtained 
1700: 62 79 20 6c 6f 63 6b 69 6e 67 20 61 6c 6c 20 62  by locking all b
1710: 79 74 65 73 20 69 6e 20 74 68 65 20 72 61 6e 67  ytes in the rang
1720: 65 2e 0a 2a 2a 20 54 68 65 72 65 20 63 61 6e 20  e..** There can 
1730: 6f 6e 6c 79 20 62 65 20 6f 6e 65 20 77 72 69 74  only be one writ
1740: 65 72 2e 20 20 41 20 52 45 53 45 52 56 45 44 5f  er.  A RESERVED_
1750: 4c 4f 43 4b 20 69 73 20 6f 62 74 61 69 6e 65 64  LOCK is obtained
1760: 20 62 79 20 6c 6f 63 6b 69 6e 67 0a 2a 2a 20 61   by locking.** a
1770: 20 73 69 6e 67 6c 65 20 62 79 74 65 20 6f 66 20   single byte of 
1780: 74 68 65 20 66 69 6c 65 20 74 68 61 74 20 69 73  the file that is
1790: 20 64 65 73 69 67 6e 61 74 65 64 20 61 73 20 74   designated as t
17a0: 68 65 20 72 65 73 65 72 76 65 64 20 6c 6f 63 6b  he reserved lock
17b0: 20 62 79 74 65 2e 0a 2a 2a 20 41 20 50 45 4e 44   byte..** A PEND
17c0: 49 4e 47 5f 4c 4f 43 4b 20 69 73 20 6f 62 74 61  ING_LOCK is obta
17d0: 69 6e 65 64 20 62 79 20 6c 6f 63 6b 69 6e 67 20  ined by locking 
17e0: 61 20 64 65 73 69 67 6e 61 74 65 64 20 62 79 74  a designated byt
17f0: 65 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d  e different from
1800: 0a 2a 2a 20 74 68 65 20 52 45 53 45 52 56 45 44  .** the RESERVED
1810: 5f 4c 4f 43 4b 20 62 79 74 65 2e 0a 2a 2a 0a 2a  _LOCK byte..**.*
1820: 2a 20 4f 6e 20 57 69 6e 4e 54 2f 32 4b 2f 58 50  * On WinNT/2K/XP
1830: 20 73 79 73 74 65 6d 73 2c 20 4c 6f 63 6b 46 69   systems, LockFi
1840: 6c 65 45 78 28 29 20 61 6e 64 20 55 6e 6c 6f 63  leEx() and Unloc
1850: 6b 46 69 6c 65 45 78 28 29 20 61 72 65 20 61 76  kFileEx() are av
1860: 61 69 6c 61 62 6c 65 2c 0a 2a 2a 20 77 68 69 63  ailable,.** whic
1870: 68 20 6d 65 61 6e 73 20 77 65 20 63 61 6e 20 75  h means we can u
1880: 73 65 20 72 65 61 64 65 72 2f 77 72 69 74 65 72  se reader/writer
1890: 20 6c 6f 63 6b 73 2e 20 20 57 68 65 6e 20 72 65   locks.  When re
18a0: 61 64 65 72 2f 77 72 69 74 65 72 20 6c 6f 63 6b  ader/writer lock
18b0: 73 0a 2a 2a 20 61 72 65 20 75 73 65 64 2c 20 74  s.** are used, t
18c0: 68 65 20 6c 6f 63 6b 20 69 73 20 70 6c 61 63 65  he lock is place
18d0: 64 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 72 61  d on the same ra
18e0: 6e 67 65 20 6f 66 20 62 79 74 65 73 20 74 68 61  nge of bytes tha
18f0: 74 20 69 73 20 75 73 65 64 0a 2a 2a 20 66 6f 72  t is used.** for
1900: 20 70 72 6f 62 61 62 69 6c 69 73 74 69 63 20 6c   probabilistic l
1910: 6f 63 6b 69 6e 67 20 69 6e 20 57 69 6e 39 35 2f  ocking in Win95/
1920: 39 38 2f 4d 45 2e 20 20 48 65 6e 63 65 2c 20 74  98/ME.  Hence, t
1930: 68 65 20 6c 6f 63 6b 69 6e 67 20 73 63 68 65 6d  he locking schem
1940: 65 0a 2a 2a 20 77 69 6c 6c 20 73 75 70 70 6f 72  e.** will suppor
1950: 74 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 57 69  t two or more Wi
1960: 6e 39 35 20 72 65 61 64 65 72 73 20 6f 72 20 74  n95 readers or t
1970: 77 6f 20 6f 72 20 6d 6f 72 65 20 57 69 6e 4e 54  wo or more WinNT
1980: 20 72 65 61 64 65 72 73 2e 0a 2a 2a 20 42 75 74   readers..** But
1990: 20 61 20 73 69 6e 67 6c 65 20 57 69 6e 39 35 20   a single Win95 
19a0: 72 65 61 64 65 72 20 77 69 6c 6c 20 6c 6f 63 6b  reader will lock
19b0: 20 6f 75 74 20 61 6c 6c 20 57 69 6e 4e 54 20 72   out all WinNT r
19c0: 65 61 64 65 72 73 20 61 6e 64 20 61 20 73 69 6e  eaders and a sin
19d0: 67 6c 65 0a 2a 2a 20 57 69 6e 4e 54 20 72 65 61  gle.** WinNT rea
19e0: 64 65 72 20 77 69 6c 6c 20 6c 6f 63 6b 20 6f 75  der will lock ou
19f0: 74 20 61 6c 6c 20 6f 74 68 65 72 20 57 69 6e 39  t all other Win9
1a00: 35 20 72 65 61 64 65 72 73 2e 0a 2a 2a 0a 2a 2a  5 readers..**.**
1a10: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 23   The following #
1a20: 64 65 66 69 6e 65 73 20 73 70 65 63 69 66 79 20  defines specify 
1a30: 74 68 65 20 72 61 6e 67 65 20 6f 66 20 62 79 74  the range of byt
1a40: 65 73 20 75 73 65 64 20 66 6f 72 20 6c 6f 63 6b  es used for lock
1a50: 69 6e 67 2e 0a 2a 2a 20 53 48 41 52 45 44 5f 53  ing..** SHARED_S
1a60: 49 5a 45 20 69 73 20 74 68 65 20 6e 75 6d 62 65  IZE is the numbe
1a70: 72 20 6f 66 20 62 79 74 65 73 20 61 76 61 69 6c  r of bytes avail
1a80: 61 62 6c 65 20 69 6e 20 74 68 65 20 70 6f 6f 6c  able in the pool
1a90: 20 66 72 6f 6d 20 77 68 69 63 68 0a 2a 2a 20 61   from which.** a
1aa0: 20 72 61 6e 64 6f 6d 20 62 79 74 65 20 69 73 20   random byte is 
1ab0: 73 65 6c 65 63 74 65 64 20 66 6f 72 20 61 20 73  selected for a s
1ac0: 68 61 72 65 64 20 6c 6f 63 6b 2e 20 20 54 68 65  hared lock.  The
1ad0: 20 70 6f 6f 6c 20 6f 66 20 62 79 74 65 73 20 66   pool of bytes f
1ae0: 6f 72 0a 2a 2a 20 73 68 61 72 65 64 20 6c 6f 63  or.** shared loc
1af0: 6b 73 20 62 65 67 69 6e 73 20 61 74 20 53 48 41  ks begins at SHA
1b00: 52 45 44 5f 46 49 52 53 54 2e 20 0a 2a 2a 0a 2a  RED_FIRST. .**.*
1b10: 2a 20 54 68 65 73 65 20 23 64 65 66 69 6e 65 73  * These #defines
1b20: 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 69   are available i
1b30: 6e 20 73 71 6c 69 74 65 5f 61 75 78 2e 68 20 73  n sqlite_aux.h s
1b40: 6f 20 74 68 61 74 20 61 64 61 70 74 6f 72 73 20  o that adaptors 
1b50: 66 6f 72 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6e  for.** connectin
1b60: 67 20 53 51 4c 69 74 65 20 74 6f 20 6f 74 68 65  g SQLite to othe
1b70: 72 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74  r operating syst
1b80: 65 6d 73 20 63 61 6e 20 75 73 65 20 74 68 65 20  ems can use the 
1b90: 73 61 6d 65 20 62 79 74 65 0a 2a 2a 20 72 61 6e  same byte.** ran
1ba0: 67 65 73 20 66 6f 72 20 6c 6f 63 6b 69 6e 67 2e  ges for locking.
1bb0: 20 20 49 6e 20 70 61 72 74 69 63 75 6c 61 72 2c    In particular,
1bc0: 20 74 68 65 20 73 61 6d 65 20 6c 6f 63 6b 69 6e   the same lockin
1bd0: 67 20 73 74 72 61 74 65 67 79 20 61 6e 64 0a 2a  g strategy and.*
1be0: 2a 20 62 79 74 65 20 72 61 6e 67 65 73 20 61 72  * byte ranges ar
1bf0: 65 20 75 73 65 64 20 66 6f 72 20 55 6e 69 78 2e  e used for Unix.
1c00: 20 20 54 68 69 73 20 6c 65 61 76 65 73 20 6f 70    This leaves op
1c10: 65 6e 20 74 68 65 20 70 6f 73 73 69 62 6c 69 74  en the possiblit
1c20: 79 20 6f 66 20 68 61 76 69 6e 67 0a 2a 2a 20 63  y of having.** c
1c30: 6c 69 65 6e 74 73 20 6f 6e 20 77 69 6e 39 35 2c  lients on win95,
1c40: 20 77 69 6e 4e 54 2c 20 61 6e 64 20 75 6e 69 78   winNT, and unix
1c50: 20 61 6c 6c 20 74 61 6c 6b 69 6e 67 20 74 6f 20   all talking to 
1c60: 74 68 65 20 73 61 6d 65 20 73 68 61 72 65 64 20  the same shared 
1c70: 66 69 6c 65 0a 2a 2a 20 61 6e 64 20 61 6c 6c 20  file.** and all 
1c80: 6c 6f 63 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c  locking correctl
1c90: 79 2e 20 20 54 6f 20 64 6f 20 73 6f 20 77 6f 75  y.  To do so wou
1ca0: 6c 64 20 72 65 71 75 69 72 65 20 74 68 61 74 20  ld require that 
1cb0: 73 61 6d 62 61 20 28 6f 72 20 77 68 61 74 65 76  samba (or whatev
1cc0: 65 72 0a 2a 2a 20 74 6f 6f 6c 20 69 73 20 62 65  er.** tool is be
1cd0: 69 6e 67 20 75 73 65 64 20 66 6f 72 20 66 69 6c  ing used for fil
1ce0: 65 20 73 68 61 72 69 6e 67 29 20 69 6d 70 6c 65  e sharing) imple
1cf0: 6d 65 6e 74 73 20 6c 6f 63 6b 73 20 63 6f 72 72  ments locks corr
1d00: 65 63 74 6c 79 20 62 65 74 77 65 65 6e 0a 2a 2a  ectly between.**
1d10: 20 77 69 6e 64 6f 77 73 20 61 6e 64 20 75 6e 69   windows and uni
1d20: 78 2e 20 20 49 27 6d 20 67 75 65 73 73 69 6e 67  x.  I'm guessing
1d30: 20 74 68 61 74 20 69 73 6e 27 74 20 6c 69 6b 65   that isn't like
1d40: 6c 79 20 74 6f 20 68 61 70 70 65 6e 2c 20 62 75  ly to happen, bu
1d50: 74 20 62 79 0a 2a 2a 20 75 73 69 6e 67 20 74 68  t by.** using th
1d60: 65 20 73 61 6d 65 20 6c 6f 63 6b 69 6e 67 20 72  e same locking r
1d70: 61 6e 67 65 20 77 65 20 61 72 65 20 61 74 20 6c  ange we are at l
1d80: 65 61 73 74 20 6f 70 65 6e 20 74 6f 20 74 68 65  east open to the
1d90: 20 70 6f 73 73 69 62 69 6c 69 74 79 2e 0a 2a 2a   possibility..**
1da0: 0a 2a 2a 20 4c 6f 63 6b 69 6e 67 20 69 6e 20 77  .** Locking in w
1db0: 69 6e 64 6f 77 73 20 69 73 20 6d 61 6e 64 69 74  indows is mandit
1dc0: 6f 72 79 2e 20 20 46 6f 72 20 74 68 69 73 20 72  ory.  For this r
1dd0: 65 61 73 6f 6e 2c 20 77 65 20 63 61 6e 6e 6f 74  eason, we cannot
1de0: 20 73 74 6f 72 65 0a 2a 2a 20 61 63 74 75 61 6c   store.** actual
1df0: 20 64 61 74 61 20 69 6e 20 74 68 65 20 62 79 74   data in the byt
1e00: 65 73 20 75 73 65 64 20 66 6f 72 20 6c 6f 63 6b  es used for lock
1e10: 69 6e 67 2e 20 20 54 68 65 20 70 61 67 65 72 20  ing.  The pager 
1e20: 6e 65 76 65 72 20 61 6c 6c 6f 63 61 74 65 73 0a  never allocates.
1e30: 2a 2a 20 74 68 65 20 70 61 67 65 73 20 69 6e 76  ** the pages inv
1e40: 6f 6c 76 65 64 20 69 6e 20 6c 6f 63 6b 69 6e 67  olved in locking
1e50: 20 74 68 65 72 65 66 6f 72 65 2e 20 20 53 48 41   therefore.  SHA
1e60: 52 45 44 5f 53 49 5a 45 20 69 73 20 73 65 6c 65  RED_SIZE is sele
1e70: 63 74 65 64 20 73 6f 0a 2a 2a 20 74 68 61 74 20  cted so.** that 
1e80: 61 6c 6c 20 6c 6f 63 6b 73 20 77 69 6c 6c 20 66  all locks will f
1e90: 69 74 20 6f 6e 20 61 20 73 69 6e 67 6c 65 20 70  it on a single p
1ea0: 61 67 65 20 65 76 65 6e 20 61 74 20 74 68 65 20  age even at the 
1eb0: 6d 69 6e 69 6d 75 6d 20 70 61 67 65 20 73 69 7a  minimum page siz
1ec0: 65 2e 0a 2a 2a 20 50 45 4e 44 49 4e 47 5f 42 59  e..** PENDING_BY
1ed0: 54 45 20 64 65 66 69 6e 65 73 20 74 68 65 20 62  TE defines the b
1ee0: 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20  eginning of the 
1ef0: 6c 6f 63 6b 73 2e 20 20 42 79 20 64 65 66 61 75  locks.  By defau
1f00: 6c 74 20 50 45 4e 44 49 4e 47 5f 42 59 54 45 0a  lt PENDING_BYTE.
1f10: 2a 2a 20 69 73 20 73 65 74 20 68 69 67 68 20 73  ** is set high s
1f20: 6f 20 74 68 61 74 20 77 65 20 64 6f 6e 27 74 20  o that we don't 
1f30: 68 61 76 65 20 74 6f 20 61 6c 6c 6f 63 61 74 65  have to allocate
1f40: 20 61 6e 20 75 6e 75 73 65 64 20 70 61 67 65 20   an unused page 
1f50: 65 78 63 65 70 74 0a 2a 2a 20 66 6f 72 20 76 65  except.** for ve
1f60: 72 79 20 6c 61 72 67 65 20 64 61 74 61 62 61 73  ry large databas
1f70: 65 73 2e 20 20 42 75 74 20 6f 6e 65 20 73 68 6f  es.  But one sho
1f80: 75 6c 64 20 74 65 73 74 20 74 68 65 20 70 61 67  uld test the pag
1f90: 65 20 73 6b 69 70 70 69 6e 67 20 6c 6f 67 69 63  e skipping logic
1fa0: 20 0a 2a 2a 20 62 79 20 73 65 74 74 69 6e 67 20   .** by setting 
1fb0: 50 45 4e 44 49 4e 47 5f 42 59 54 45 20 6c 6f 77  PENDING_BYTE low
1fc0: 20 61 6e 64 20 72 75 6e 6e 69 6e 67 20 74 68 65   and running the
1fd0: 20 65 6e 74 69 72 65 20 72 65 67 72 65 73 73 69   entire regressi
1fe0: 6f 6e 20 73 75 69 74 65 2e 0a 2a 2a 0a 2a 2a 20  on suite..**.** 
1ff0: 43 68 61 6e 67 69 6e 67 20 74 68 65 20 76 61 6c  Changing the val
2000: 75 65 20 6f 66 20 50 45 4e 44 49 4e 47 5f 42 59  ue of PENDING_BY
2010: 54 45 20 72 65 73 75 6c 74 73 20 69 6e 20 61 20  TE results in a 
2020: 73 75 62 74 6c 79 20 69 6e 63 6f 6d 70 61 74 69  subtly incompati
2030: 62 6c 65 0a 2a 2a 20 66 69 6c 65 20 66 6f 72 6d  ble.** file form
2040: 61 74 2e 20 20 44 65 70 65 6e 64 69 6e 67 20 6f  at.  Depending o
2050: 6e 20 68 6f 77 20 69 74 20 69 73 20 63 68 61 6e  n how it is chan
2060: 67 65 64 2c 20 79 6f 75 20 6d 69 67 68 74 20 6e  ged, you might n
2070: 6f 74 20 6e 6f 74 69 63 65 0a 2a 2a 20 74 68 65  ot notice.** the
2080: 20 69 6e 63 6f 6d 70 61 74 69 62 69 6c 69 74 79   incompatibility
2090: 20 72 69 67 68 74 20 61 77 61 79 2c 20 65 76 65   right away, eve
20a0: 6e 20 72 75 6e 6e 69 6e 67 20 61 20 66 75 6c 6c  n running a full
20b0: 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74   regression test
20c0: 2e 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74  ..** The default
20d0: 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 50 45 4e   location of PEN
20e0: 44 49 4e 47 5f 42 59 54 45 20 69 73 20 74 68 65  DING_BYTE is the
20f0: 20 66 69 72 73 74 20 62 79 74 65 20 70 61 73 74   first byte past
2100: 20 74 68 65 0a 2a 2a 20 31 47 42 20 62 6f 75 6e   the.** 1GB boun
2110: 64 61 72 79 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e  dary..**.*/.#ifn
2120: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
2130: 23 64 65 66 69 6e 65 20 50 45 4e 44 49 4e 47 5f  #define PENDING_
2140: 42 59 54 45 20 20 20 20 20 20 30 78 34 30 30 30  BYTE      0x4000
2150: 30 30 30 30 20 20 2f 2a 20 46 69 72 73 74 20 62  0000  /* First b
2160: 79 74 65 20 70 61 73 74 20 74 68 65 20 31 47 42  yte past the 1GB
2170: 20 62 6f 75 6e 64 61 72 79 20 2a 2f 0a 23 65 6c   boundary */.#el
2180: 73 65 0a 65 78 74 65 72 6e 20 75 6e 73 69 67 6e  se.extern unsign
2190: 65 64 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 70  ed int sqlite3_p
21a0: 65 6e 64 69 6e 67 5f 62 79 74 65 3b 0a 23 64 65  ending_byte;.#de
21b0: 66 69 6e 65 20 50 45 4e 44 49 4e 47 5f 42 59 54  fine PENDING_BYT
21c0: 45 20 73 71 6c 69 74 65 33 5f 70 65 6e 64 69 6e  E sqlite3_pendin
21d0: 67 5f 62 79 74 65 0a 23 65 6e 64 69 66 0a 0a 23  g_byte.#endif..#
21e0: 64 65 66 69 6e 65 20 52 45 53 45 52 56 45 44 5f  define RESERVED_
21f0: 42 59 54 45 20 20 20 20 20 28 50 45 4e 44 49 4e  BYTE     (PENDIN
2200: 47 5f 42 59 54 45 2b 31 29 0a 23 64 65 66 69 6e  G_BYTE+1).#defin
2210: 65 20 53 48 41 52 45 44 5f 46 49 52 53 54 20 20  e SHARED_FIRST  
2220: 20 20 20 20 28 50 45 4e 44 49 4e 47 5f 42 59 54      (PENDING_BYT
2230: 45 2b 32 29 0a 23 64 65 66 69 6e 65 20 53 48 41  E+2).#define SHA
2240: 52 45 44 5f 53 49 5a 45 20 20 20 20 20 20 20 35  RED_SIZE       5
2250: 31 30 0a 0a 2f 2a 20 0a 2a 2a 20 46 75 6e 63 74  10../* .** Funct
2260: 69 6f 6e 73 20 66 6f 72 20 61 63 63 65 73 73 69  ions for accessi
2270: 6e 67 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  ng sqlite3_file 
2280: 6d 65 74 68 6f 64 73 20 0a 2a 2f 0a 69 6e 74 20  methods .*/.int 
2290: 73 71 6c 69 74 65 33 4f 73 43 6c 6f 73 65 28 73  sqlite3OsClose(s
22a0: 71 6c 69 74 65 33 5f 66 69 6c 65 2a 29 3b 0a 69  qlite3_file*);.i
22b0: 6e 74 20 73 71 6c 69 74 65 33 4f 73 52 65 61 64  nt sqlite3OsRead
22c0: 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 2a 2c 20  (sqlite3_file*, 
22d0: 76 6f 69 64 2a 2c 20 69 6e 74 20 61 6d 74 2c 20  void*, int amt, 
22e0: 69 36 34 20 6f 66 66 73 65 74 29 3b 0a 69 6e 74  i64 offset);.int
22f0: 20 73 71 6c 69 74 65 33 4f 73 57 72 69 74 65 28   sqlite3OsWrite(
2300: 73 71 6c 69 74 65 33 5f 66 69 6c 65 2a 2c 20 63  sqlite3_file*, c
2310: 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 20  onst void*, int 
2320: 61 6d 74 2c 20 69 36 34 20 6f 66 66 73 65 74 29  amt, i64 offset)
2330: 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 73 54  ;.int sqlite3OsT
2340: 72 75 6e 63 61 74 65 28 73 71 6c 69 74 65 33 5f  runcate(sqlite3_
2350: 66 69 6c 65 2a 2c 20 69 36 34 20 73 69 7a 65 29  file*, i64 size)
2360: 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 73 53  ;.int sqlite3OsS
2370: 79 6e 63 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  ync(sqlite3_file
2380: 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
2390: 69 74 65 33 4f 73 46 69 6c 65 53 69 7a 65 28 73  ite3OsFileSize(s
23a0: 71 6c 69 74 65 33 5f 66 69 6c 65 2a 2c 20 69 36  qlite3_file*, i6
23b0: 34 20 2a 70 53 69 7a 65 29 3b 0a 69 6e 74 20 73  4 *pSize);.int s
23c0: 71 6c 69 74 65 33 4f 73 4c 6f 63 6b 28 73 71 6c  qlite3OsLock(sql
23d0: 69 74 65 33 5f 66 69 6c 65 2a 2c 20 69 6e 74 29  ite3_file*, int)
23e0: 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 73 55  ;.int sqlite3OsU
23f0: 6e 6c 6f 63 6b 28 73 71 6c 69 74 65 33 5f 66 69  nlock(sqlite3_fi
2400: 6c 65 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  le*, int);.int s
2410: 71 6c 69 74 65 33 4f 73 43 68 65 63 6b 52 65 73  qlite3OsCheckRes
2420: 65 72 76 65 64 4c 6f 63 6b 28 73 71 6c 69 74 65  ervedLock(sqlite
2430: 33 5f 66 69 6c 65 20 2a 69 64 29 3b 0a 69 6e 74  3_file *id);.int
2440: 20 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f   sqlite3OsFileCo
2450: 6e 74 72 6f 6c 28 73 71 6c 69 74 65 33 5f 66 69  ntrol(sqlite3_fi
2460: 6c 65 2a 2c 69 6e 74 2c 76 6f 69 64 2a 29 3b 0a  le*,int,void*);.
2470: 69 6e 74 20 73 71 6c 69 74 65 33 4f 73 53 65 63  int sqlite3OsSec
2480: 74 6f 72 53 69 7a 65 28 73 71 6c 69 74 65 33 5f  torSize(sqlite3_
2490: 66 69 6c 65 20 2a 69 64 29 3b 0a 69 6e 74 20 73  file *id);.int s
24a0: 71 6c 69 74 65 33 4f 73 44 65 76 69 63 65 43 68  qlite3OsDeviceCh
24b0: 61 72 61 63 74 65 72 69 73 74 69 63 73 28 73 71  aracteristics(sq
24c0: 6c 69 74 65 33 5f 66 69 6c 65 20 2a 69 64 29 3b  lite3_file *id);
24d0: 0a 0a 2f 2a 20 0a 2a 2a 20 46 75 6e 63 74 69 6f  ../* .** Functio
24e0: 6e 73 20 66 6f 72 20 61 63 63 65 73 73 69 6e 67  ns for accessing
24f0: 20 73 71 6c 69 74 65 33 5f 76 66 73 20 6d 65 74   sqlite3_vfs met
2500: 68 6f 64 73 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c  hods .*/.int sql
2510: 69 74 65 33 4f 73 4f 70 65 6e 28 73 71 6c 69 74  ite3OsOpen(sqlit
2520: 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20  e3_vfs *, const 
2530: 63 68 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f  char *, sqlite3_
2540: 66 69 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 20  file*, int, int 
2550: 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f  *);.int sqlite3O
2560: 73 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 5f  sDelete(sqlite3_
2570: 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  vfs *, const cha
2580: 72 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  r *, int);.int s
2590: 71 6c 69 74 65 33 4f 73 41 63 63 65 73 73 28 73  qlite3OsAccess(s
25a0: 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f  qlite3_vfs *, co
25b0: 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29  nst char *, int)
25c0: 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 73 47  ;.int sqlite3OsG
25d0: 65 74 54 65 6d 70 6e 61 6d 65 28 73 71 6c 69 74  etTempname(sqlit
25e0: 65 33 5f 76 66 73 20 2a 2c 20 69 6e 74 2c 20 63  e3_vfs *, int, c
25f0: 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har *);.int sqli
2600: 74 65 33 4f 73 46 75 6c 6c 50 61 74 68 6e 61 6d  te3OsFullPathnam
2610: 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c  e(sqlite3_vfs *,
2620: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69   const char *, i
2630: 6e 74 2c 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69  nt, char *);.voi
2640: 64 20 2a 73 71 6c 69 74 65 33 4f 73 44 6c 4f 70  d *sqlite3OsDlOp
2650: 65 6e 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  en(sqlite3_vfs *
2660: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
2670: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 73 44  .void sqlite3OsD
2680: 6c 45 72 72 6f 72 28 73 71 6c 69 74 65 33 5f 76  lError(sqlite3_v
2690: 66 73 20 2a 2c 20 69 6e 74 2c 20 63 68 61 72 20  fs *, int, char 
26a0: 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  *);.void *sqlite
26b0: 33 4f 73 44 6c 53 79 6d 28 73 71 6c 69 74 65 33  3OsDlSym(sqlite3
26c0: 5f 76 66 73 20 2a 2c 20 76 6f 69 64 20 2a 2c 20  _vfs *, void *, 
26d0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 76  const char *);.v
26e0: 6f 69 64 20 73 71 6c 69 74 65 33 4f 73 44 6c 43  oid sqlite3OsDlC
26f0: 6c 6f 73 65 28 73 71 6c 69 74 65 33 5f 76 66 73  lose(sqlite3_vfs
2700: 20 2a 2c 20 76 6f 69 64 20 2a 29 3b 0a 69 6e 74   *, void *);.int
2710: 20 73 71 6c 69 74 65 33 4f 73 52 61 6e 64 6f 6d   sqlite3OsRandom
2720: 6e 65 73 73 28 73 71 6c 69 74 65 33 5f 76 66 73  ness(sqlite3_vfs
2730: 20 2a 2c 20 69 6e 74 2c 20 63 68 61 72 20 2a 29   *, int, char *)
2740: 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 73 53  ;.int sqlite3OsS
2750: 6c 65 65 70 28 73 71 6c 69 74 65 33 5f 76 66 73  leep(sqlite3_vfs
2760: 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71   *, int);.int sq
2770: 6c 69 74 65 33 4f 73 43 75 72 72 65 6e 74 54 69  lite3OsCurrentTi
2780: 6d 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  me(sqlite3_vfs *
2790: 2c 20 64 6f 75 62 6c 65 2a 29 3b 0a 0a 2f 2a 0a  , double*);../*.
27a0: 2a 2a 20 43 6f 6e 76 65 6e 69 65 6e 63 65 20 66  ** Convenience f
27b0: 75 6e 63 74 69 6f 6e 73 20 66 6f 72 20 6f 70 65  unctions for ope
27c0: 6e 69 6e 67 20 61 6e 64 20 63 6c 6f 73 69 6e 67  ning and closing
27d0: 20 66 69 6c 65 73 20 75 73 69 6e 67 20 0a 2a 2a   files using .**
27e0: 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28   sqlite3_malloc(
27f0: 29 20 74 6f 20 6f 62 74 61 69 6e 20 73 70 61 63  ) to obtain spac
2800: 65 20 66 6f 72 20 74 68 65 20 66 69 6c 65 2d 68  e for the file-h
2810: 61 6e 64 6c 65 20 73 74 72 75 63 74 75 72 65 2e  andle structure.
2820: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f  .*/.int sqlite3O
2830: 73 4f 70 65 6e 4d 61 6c 6c 6f 63 28 73 71 6c 69  sOpenMalloc(sqli
2840: 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74  te3_vfs *, const
2850: 20 63 68 61 72 20 2a 2c 20 73 71 6c 69 74 65 33   char *, sqlite3
2860: 5f 66 69 6c 65 20 2a 2a 2c 20 69 6e 74 2c 69 6e  _file **, int,in
2870: 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2880: 4f 73 43 6c 6f 73 65 46 72 65 65 28 73 71 6c 69  OsCloseFree(sqli
2890: 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a 2f 2a  te3_file *);../*
28a0: 0a 2a 2a 20 45 61 63 68 20 4f 53 2d 73 70 65 63  .** Each OS-spec
28b0: 69 66 69 63 20 62 61 63 6b 65 6e 64 20 64 65 66  ific backend def
28c0: 69 6e 65 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  ines an instance
28d0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
28e0: 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 66  g.** structure f
28f0: 6f 72 20 72 65 74 75 72 6e 69 6e 67 20 61 20 70  or returning a p
2900: 6f 69 6e 74 65 72 20 74 6f 20 69 74 73 20 73 71  ointer to its sq
2910: 6c 69 74 65 33 5f 76 66 73 2e 20 20 49 66 20 4f  lite3_vfs.  If O
2920: 53 5f 4f 54 48 45 52 0a 2a 2a 20 69 73 20 64 65  S_OTHER.** is de
2930: 66 69 6e 65 64 20 28 6d 65 61 6e 69 6e 67 20 74  fined (meaning t
2940: 68 61 74 20 74 68 65 20 61 70 70 6c 69 63 61 74  hat the applicat
2950: 69 6f 6e 2d 64 65 66 69 6e 65 64 20 4f 53 20 69  ion-defined OS i
2960: 6e 74 65 72 66 61 63 65 20 6c 61 79 65 72 0a 2a  nterface layer.*
2970: 2a 20 69 73 20 75 73 65 64 29 20 74 68 65 6e 20  * is used) then 
2980: 74 68 65 72 65 20 69 73 20 6e 6f 20 64 65 66 61  there is no defa
2990: 75 6c 74 20 56 46 53 2e 20 20 20 54 68 65 20 61  ult VFS.   The a
29a0: 70 70 6c 69 63 61 74 69 6f 6e 20 6d 75 73 74 0a  pplication must.
29b0: 2a 2a 20 72 65 67 69 73 74 65 72 20 6f 6e 65 20  ** register one 
29c0: 6f 72 20 6d 6f 72 65 20 56 46 53 20 73 74 72 75  or more VFS stru
29d0: 63 74 75 72 65 73 20 75 73 69 6e 67 20 73 71 6c  ctures using sql
29e0: 69 74 65 33 5f 76 66 73 5f 72 65 67 69 73 74 65  ite3_vfs_registe
29f0: 72 28 29 0a 2a 2a 20 62 65 66 6f 72 65 20 61 74  r().** before at
2a00: 74 65 6d 70 74 69 6e 67 20 74 6f 20 75 73 65 20  tempting to use 
2a10: 53 51 4c 69 74 65 2e 0a 2a 2f 0a 23 69 66 20 4f  SQLite..*/.#if O
2a20: 53 5f 55 4e 49 58 20 7c 7c 20 4f 53 5f 57 49 4e  S_UNIX || OS_WIN
2a30: 20 7c 7c 20 4f 53 5f 4f 53 32 0a 73 71 6c 69 74   || OS_OS2.sqlit
2a40: 65 33 5f 76 66 73 20 2a 73 71 6c 69 74 65 33 4f  e3_vfs *sqlite3O
2a50: 73 44 65 66 61 75 6c 74 56 66 73 28 76 6f 69 64  sDefaultVfs(void
2a60: 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
2a70: 65 20 73 71 6c 69 74 65 33 4f 73 44 65 66 61 75  e sqlite3OsDefau
2a80: 6c 74 56 66 73 28 58 29 20 30 0a 23 65 6e 64 69  ltVfs(X) 0.#endi
2a90: 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 5f 53 51  f..#endif /* _SQ
2aa0: 4c 49 54 45 5f 4f 53 5f 48 5f 20 2a 2f 0a        LITE_OS_H_ */.