/ Hex Artifact Content
Login

Artifact a17596ecc7f38a228b83ecdb661fb03ce44726d6:


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 23 69 66 64  LITE_OS_H_..#ifd
0280: 65 66 20 57 49 4e 33 32 0a 23 20 20 64 65 66 69  ef WIN32.#  defi
0290: 6e 65 20 4f 53 5f 57 49 4e 20 31 0a 23 20 20 75  ne OS_WIN 1.#  u
02a0: 6e 64 65 66 20 20 4f 53 5f 55 4e 49 58 0a 23 65  ndef  OS_UNIX.#e
02b0: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 4f 53  lse.#  define OS
02c0: 5f 55 4e 49 58 20 31 0a 23 20 20 75 6e 64 65 66  _UNIX 1.#  undef
02d0: 20 20 4f 53 5f 57 49 4e 0a 23 65 6e 64 69 66 0a    OS_WIN.#endif.
02e0: 0a 2f 2a 0a 2a 2a 20 41 20 68 61 6e 64 6c 65 20  ./*.** A handle 
02f0: 66 6f 72 20 61 6e 20 6f 70 65 6e 20 66 69 6c 65  for an open file
0300: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61 6e   is stored in an
0310: 20 4f 73 46 69 6c 65 20 6f 62 6a 65 63 74 2e 0a   OsFile object..
0320: 2a 2f 0a 23 69 66 20 4f 53 5f 55 4e 49 58 0a 20  */.#if OS_UNIX. 
0330: 20 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20   typedef struct 
0340: 4f 73 46 69 6c 65 20 4f 73 46 69 6c 65 3b 0a 20  OsFile OsFile;. 
0350: 20 73 74 72 75 63 74 20 4f 73 46 69 6c 65 20 7b   struct OsFile {
0360: 0a 20 20 20 20 73 74 72 75 63 74 20 6c 6f 63 6b  .    struct lock
0370: 49 6e 66 6f 20 2a 70 4c 6f 63 6b 3b 20 20 2f 2a  Info *pLock;  /*
0380: 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
0390: 75 74 20 6c 6f 63 6b 73 20 6f 6e 20 74 68 69 73  ut locks on this
03a0: 20 69 6e 6f 64 65 20 2a 2f 0a 20 20 20 20 69 6e   inode */.    in
03b0: 74 20 66 64 3b 20 20 20 20 20 20 20 20 20 20 20  t fd;           
03c0: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66 69         /* The fi
03d0: 6c 65 20 64 65 73 63 72 69 70 74 6f 72 20 2a 2f  le descriptor */
03e0: 0a 20 20 20 20 69 6e 74 20 6c 6f 63 6b 65 64 3b  .    int locked;
03f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
0400: 20 54 72 75 65 20 69 66 20 74 68 69 73 20 75 73   True if this us
0410: 65 72 20 68 6f 6c 64 73 20 74 68 65 20 6c 6f 63  er holds the loc
0420: 6b 20 2a 2f 0a 20 20 7d 3b 0a 23 20 64 65 66 69  k */.  };.# defi
0430: 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 4e 41  ne SQLITE_TEMPNA
0440: 4d 45 5f 53 49 5a 45 20 32 30 30 0a 23 20 69 66  ME_SIZE 200.# if
0450: 20 64 65 66 69 6e 65 64 28 48 41 56 45 5f 55 53   defined(HAVE_US
0460: 4c 45 45 50 29 20 26 26 20 48 41 56 45 5f 55 53  LEEP) && HAVE_US
0470: 4c 45 45 50 0a 23 20 20 64 65 66 69 6e 65 20 53  LEEP.#  define S
0480: 51 4c 49 54 45 5f 4d 49 4e 5f 53 4c 45 45 50 5f  QLITE_MIN_SLEEP_
0490: 4d 53 20 31 0a 23 20 65 6c 73 65 0a 23 20 20 64  MS 1.# else.#  d
04a0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49 4e  efine SQLITE_MIN
04b0: 5f 53 4c 45 45 50 5f 4d 53 20 31 30 30 30 0a 23  _SLEEP_MS 1000.#
04c0: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 23   endif.#endif..#
04d0: 69 66 20 4f 53 5f 57 49 4e 0a 23 69 6e 63 6c 75  if OS_WIN.#inclu
04e0: 64 65 20 3c 77 69 6e 64 6f 77 73 2e 68 3e 0a 23  de <windows.h>.#
04f0: 69 6e 63 6c 75 64 65 20 3c 77 69 6e 62 61 73 65  include <winbase
0500: 2e 68 3e 0a 20 20 74 79 70 65 64 65 66 20 73 74  .h>.  typedef st
0510: 72 75 63 74 20 4f 73 46 69 6c 65 20 4f 73 46 69  ruct OsFile OsFi
0520: 6c 65 3b 0a 20 20 73 74 72 75 63 74 20 4f 73 46  le;.  struct OsF
0530: 69 6c 65 20 7b 0a 20 20 20 20 48 41 4e 44 4c 45  ile {.    HANDLE
0540: 20 68 3b 0a 20 20 20 20 69 6e 74 20 6c 6f 63 6b   h;.    int lock
0550: 65 64 3b 0a 20 20 7d 3b 0a 23 20 64 65 66 69 6e  ed;.  };.# defin
0560: 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 4e 41 4d  e SQLITE_TEMPNAM
0570: 45 5f 53 49 5a 45 20 28 4d 41 58 5f 50 41 54 48  E_SIZE (MAX_PATH
0580: 2b 35 30 29 0a 23 20 64 65 66 69 6e 65 20 53 51  +50).# define SQ
0590: 4c 49 54 45 5f 4d 49 4e 5f 53 4c 45 45 50 5f 4d  LITE_MIN_SLEEP_M
05a0: 53 20 31 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20  S 1.#endif..int 
05b0: 73 71 6c 69 74 65 4f 73 44 65 6c 65 74 65 28 63  sqliteOsDelete(c
05c0: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74  onst char*);.int
05d0: 20 73 71 6c 69 74 65 4f 73 46 69 6c 65 45 78 69   sqliteOsFileExi
05e0: 73 74 73 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  sts(const char*)
05f0: 3b 0a 69 6e 74 20 73 71 6c 69 74 65 4f 73 4f 70  ;.int sqliteOsOp
0600: 65 6e 52 65 61 64 57 72 69 74 65 28 63 6f 6e 73  enReadWrite(cons
0610: 74 20 63 68 61 72 2a 2c 20 4f 73 46 69 6c 65 2a  t char*, OsFile*
0620: 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
0630: 69 74 65 4f 73 4f 70 65 6e 45 78 63 6c 75 73 69  iteOsOpenExclusi
0640: 76 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  ve(const char*, 
0650: 4f 73 46 69 6c 65 2a 2c 20 69 6e 74 29 3b 0a 69  OsFile*, int);.i
0660: 6e 74 20 73 71 6c 69 74 65 4f 73 4f 70 65 6e 52  nt sqliteOsOpenR
0670: 65 61 64 4f 6e 6c 79 28 63 6f 6e 73 74 20 63 68  eadOnly(const ch
0680: 61 72 2a 2c 20 4f 73 46 69 6c 65 2a 29 3b 0a 69  ar*, OsFile*);.i
0690: 6e 74 20 73 71 6c 69 74 65 4f 73 54 65 6d 70 46  nt sqliteOsTempF
06a0: 69 6c 65 4e 61 6d 65 28 63 68 61 72 2a 29 3b 0a  ileName(char*);.
06b0: 69 6e 74 20 73 71 6c 69 74 65 4f 73 43 6c 6f 73  int sqliteOsClos
06c0: 65 28 4f 73 46 69 6c 65 2a 29 3b 0a 69 6e 74 20  e(OsFile*);.int 
06d0: 73 71 6c 69 74 65 4f 73 52 65 61 64 28 4f 73 46  sqliteOsRead(OsF
06e0: 69 6c 65 2a 2c 20 76 6f 69 64 2a 2c 20 69 6e 74  ile*, void*, int
06f0: 20 61 6d 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   amt);.int sqlit
0700: 65 4f 73 57 72 69 74 65 28 4f 73 46 69 6c 65 2a  eOsWrite(OsFile*
0710: 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69  , const void*, i
0720: 6e 74 20 61 6d 74 29 3b 0a 69 6e 74 20 73 71 6c  nt amt);.int sql
0730: 69 74 65 4f 73 53 65 65 6b 28 4f 73 46 69 6c 65  iteOsSeek(OsFile
0740: 2a 2c 20 69 6e 74 20 6f 66 66 73 65 74 29 3b 0a  *, int offset);.
0750: 69 6e 74 20 73 71 6c 69 74 65 4f 73 53 79 6e 63  int sqliteOsSync
0760: 28 4f 73 46 69 6c 65 2a 29 3b 0a 69 6e 74 20 73  (OsFile*);.int s
0770: 71 6c 69 74 65 4f 73 54 72 75 6e 63 61 74 65 28  qliteOsTruncate(
0780: 4f 73 46 69 6c 65 2a 2c 20 69 6e 74 20 73 69 7a  OsFile*, int siz
0790: 65 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 4f 73  e);.int sqliteOs
07a0: 46 69 6c 65 53 69 7a 65 28 4f 73 46 69 6c 65 2a  FileSize(OsFile*
07b0: 2c 20 69 6e 74 20 2a 70 53 69 7a 65 29 3b 0a 69  , int *pSize);.i
07c0: 6e 74 20 73 71 6c 69 74 65 4f 73 52 65 61 64 4c  nt sqliteOsReadL
07d0: 6f 63 6b 28 4f 73 46 69 6c 65 2a 29 3b 0a 69 6e  ock(OsFile*);.in
07e0: 74 20 73 71 6c 69 74 65 4f 73 57 72 69 74 65 4c  t sqliteOsWriteL
07f0: 6f 63 6b 28 4f 73 46 69 6c 65 2a 29 3b 0a 69 6e  ock(OsFile*);.in
0800: 74 20 73 71 6c 69 74 65 4f 73 55 6e 6c 6f 63 6b  t sqliteOsUnlock
0810: 28 4f 73 46 69 6c 65 2a 29 3b 0a 69 6e 74 20 73  (OsFile*);.int s
0820: 71 6c 69 74 65 4f 73 52 61 6e 64 6f 6d 53 65 65  qliteOsRandomSee
0830: 64 28 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  d(char*);.int sq
0840: 6c 69 74 65 4f 73 53 6c 65 65 70 28 69 6e 74 20  liteOsSleep(int 
0850: 6d 73 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  ms);.void sqlite
0860: 4f 73 45 6e 74 65 72 4d 75 74 65 78 28 76 6f 69  OsEnterMutex(voi
0870: 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 4f  d);.void sqliteO
0880: 73 4c 65 61 76 65 4d 75 74 65 78 28 76 6f 69 64  sLeaveMutex(void
0890: 29 3b 0a 0a 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  );....#endif /* 
08a0: 5f 53 51 4c 49 54 45 5f 4f 53 5f 48 5f 20 2a 2f  _SQLITE_OS_H_ */
08b0: 0a                                               .