Hex Artifact Content

Artifact d2a493f83979dbab5430426402a3afa472f047c3:


0000: 23 64 65 66 69 6e 65 20 46 55 53 45 5f 55 53 45  #define FUSE_USE
0010: 5f 56 45 52 53 49 4f 4e 20 32 36 0a 0a 23 69 6e  _VERSION 26..#in
0020: 63 6c 75 64 65 20 3c 73 71 6c 69 74 65 33 2e 68  clude <sqlite3.h
0030: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 72 69  >.#include <stri
0040: 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  ng.h>.#include <
0050: 73 74 64 61 72 67 2e 68 3e 0a 23 69 6e 63 6c 75  stdarg.h>.#inclu
0060: 64 65 20 3c 65 72 72 6e 6f 2e 68 3e 0a 23 69 6e  de <errno.h>.#in
0070: 63 6c 75 64 65 20 3c 66 63 6e 74 6c 2e 68 3e 0a  clude <fcntl.h>.
0080: 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e  #include <stdio.
0090: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 66 75 73  h>.#include <fus
00a0: 65 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 74  e.h>.#include <t
00b0: 63 6c 2e 68 3e 0a 0a 23 64 65 66 69 6e 65 20 41  cl.h>..#define A
00c0: 50 50 46 53 5f 43 41 43 48 45 44 49 52 20 22 2f  PPFS_CACHEDIR "/
00d0: 74 6d 70 2f 61 70 70 66 73 2d 63 61 63 68 65 22  tmp/appfs-cache"
00e0: 0a 0a 23 64 65 66 69 6e 65 20 41 50 50 46 53 5f  ..#define APPFS_
00f0: 44 45 42 55 47 28 78 2e 2e 2e 29 20 7b 20 66 70  DEBUG(x...) { fp
0100: 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25  rintf(stderr, "%
0110: 69 3a 25 73 3a 20 22 2c 20 5f 5f 4c 49 4e 45 5f  i:%s: ", __LINE_
0120: 5f 2c 20 5f 5f 66 75 6e 63 5f 5f 29 3b 20 66 70  _, __func__); fp
0130: 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 78 29  rintf(stderr, x)
0140: 3b 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72  ; fprintf(stderr
0150: 2c 20 22 5c 6e 22 29 3b 20 7d 0a 0a 73 74 72 75  , "\n"); }..stru
0160: 63 74 20 61 70 70 66 73 5f 74 68 72 65 61 64 5f  ct appfs_thread_
0170: 64 61 74 61 20 7b 0a 09 54 63 6c 5f 49 6e 74 65  data {..Tcl_Inte
0180: 72 70 20 2a 69 6e 74 65 72 70 3b 0a 09 73 71 6c  rp *interp;..sql
0190: 69 74 65 33 20 2a 64 62 3b 0a 7d 3b 0a 0a 73 74  ite3 *db;.};..st
01a0: 72 75 63 74 20 61 70 70 66 73 5f 74 68 72 65 61  ruct appfs_threa
01b0: 64 5f 64 61 74 61 20 67 6c 6f 62 61 6c 54 68 72  d_data globalThr
01c0: 65 61 64 3b 0a 0a 74 79 70 65 64 65 66 20 65 6e  ead;..typedef en
01d0: 75 6d 20 7b 0a 09 41 50 50 46 53 5f 4f 53 5f 55  um {..APPFS_OS_U
01e0: 4e 4b 4e 4f 57 4e 2c 0a 09 41 50 50 46 53 5f 4f  NKNOWN,..APPFS_O
01f0: 53 5f 41 4c 4c 2c 0a 09 41 50 50 46 53 5f 4f 53  S_ALL,..APPFS_OS
0200: 5f 4c 49 4e 55 58 2c 0a 09 41 50 50 46 53 5f 4f  _LINUX,..APPFS_O
0210: 53 5f 4d 41 43 4f 53 58 2c 0a 09 41 50 50 46 53  S_MACOSX,..APPFS
0220: 5f 4f 53 5f 46 52 45 45 42 53 44 2c 0a 09 41 50  _OS_FREEBSD,..AP
0230: 50 46 53 5f 4f 53 5f 4f 50 45 4e 42 53 44 2c 0a  PFS_OS_OPENBSD,.
0240: 09 41 50 50 46 53 5f 4f 53 5f 53 4f 4c 41 52 49  .APPFS_OS_SOLARI
0250: 53 0a 7d 20 61 70 70 66 73 5f 6f 73 5f 74 3b 0a  S.} appfs_os_t;.
0260: 0a 74 79 70 65 64 65 66 20 65 6e 75 6d 20 7b 0a  .typedef enum {.
0270: 09 41 50 50 46 53 5f 43 50 55 5f 55 4e 4b 4e 4f  .APPFS_CPU_UNKNO
0280: 57 4e 2c 0a 09 41 50 50 46 53 5f 43 50 55 5f 41  WN,..APPFS_CPU_A
0290: 4c 4c 2c 0a 09 41 50 50 46 53 5f 43 50 55 5f 41  LL,..APPFS_CPU_A
02a0: 4d 44 36 34 2c 0a 09 41 50 50 46 53 5f 43 50 55  MD64,..APPFS_CPU
02b0: 5f 49 33 38 36 2c 0a 09 41 50 50 46 53 5f 43 50  _I386,..APPFS_CP
02c0: 55 5f 41 52 4d 0a 7d 20 61 70 70 66 73 5f 63 70  U_ARM.} appfs_cp
02d0: 75 41 72 63 68 5f 74 3b 0a 0a 73 74 72 75 63 74  uArch_t;..struct
02e0: 20 61 70 70 66 73 5f 70 61 63 6b 61 67 65 20 7b   appfs_package {
02f0: 0a 09 63 68 61 72 20 6e 61 6d 65 5b 31 32 38 5d  ..char name[128]
0300: 3b 0a 09 63 68 61 72 20 76 65 72 73 69 6f 6e 5b  ;..char version[
0310: 36 34 5d 3b 0a 09 61 70 70 66 73 5f 6f 73 5f 74  64];..appfs_os_t
0320: 20 6f 73 3b 0a 09 61 70 70 66 73 5f 63 70 75 41   os;..appfs_cpuA
0330: 72 63 68 5f 74 20 63 70 75 41 72 63 68 3b 0a 09  rch_t cpuArch;..
0340: 69 6e 74 20 69 73 4c 61 74 65 73 74 3b 0a 7d 3b  int isLatest;.};
0350: 0a 0a 73 74 61 74 69 63 20 61 70 70 66 73 5f 6f  ..static appfs_o
0360: 73 5f 74 20 61 70 70 66 73 5f 63 6f 6e 76 65 72  s_t appfs_conver
0370: 74 5f 6f 73 5f 66 72 6f 6d 53 74 72 69 6e 67 28  t_os_fromString(
0380: 63 6f 6e 73 74 20 63 68 61 72 20 2a 6f 73 29 20  const char *os) 
0390: 7b 0a 09 69 66 20 28 73 74 72 63 61 73 65 63 6d  {..if (strcasecm
03a0: 70 28 6f 73 2c 20 22 4c 69 6e 75 78 22 29 20 3d  p(os, "Linux") =
03b0: 3d 20 30 29 20 7b 0a 09 09 72 65 74 75 72 6e 28  = 0) {...return(
03c0: 41 50 50 46 53 5f 4f 53 5f 4c 49 4e 55 58 29 3b  APPFS_OS_LINUX);
03d0: 0a 09 7d 0a 0a 09 69 66 20 28 73 74 72 63 61 73  ..}...if (strcas
03e0: 65 63 6d 70 28 6f 73 2c 20 22 44 61 72 77 69 6e  ecmp(os, "Darwin
03f0: 22 29 20 3d 3d 20 30 20 7c 7c 20 73 74 72 63 61  ") == 0 || strca
0400: 73 65 63 6d 70 28 6f 73 2c 20 22 4d 61 63 20 4f  secmp(os, "Mac O
0410: 53 22 29 20 3d 3d 20 30 20 7c 7c 20 73 74 72 63  S") == 0 || strc
0420: 61 73 65 63 6d 70 28 6f 73 2c 20 22 4d 61 63 20  asecmp(os, "Mac 
0430: 4f 53 20 58 22 29 20 3d 3d 20 30 29 20 7b 0a 09  OS X") == 0) {..
0440: 09 72 65 74 75 72 6e 28 41 50 50 46 53 5f 4f 53  .return(APPFS_OS
0450: 5f 4d 41 43 4f 53 58 29 3b 0a 09 7d 0a 0a 09 69  _MACOSX);..}...i
0460: 66 20 28 73 74 72 63 61 73 65 63 6d 70 28 6f 73  f (strcasecmp(os
0470: 2c 20 22 6e 6f 61 72 63 68 22 29 20 3d 3d 20 30  , "noarch") == 0
0480: 29 20 7b 0a 09 09 72 65 74 75 72 6e 28 41 50 50  ) {...return(APP
0490: 46 53 5f 4f 53 5f 41 4c 4c 29 3b 0a 09 7d 0a 0a  FS_OS_ALL);..}..
04a0: 09 72 65 74 75 72 6e 28 41 50 50 46 53 5f 4f 53  .return(APPFS_OS
04b0: 5f 55 4e 4b 4e 4f 57 4e 29 3b 0a 7d 0a 0a 73 74  _UNKNOWN);.}..st
04c0: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
04d0: 2a 61 70 70 66 73 5f 63 6f 6e 76 65 72 74 5f 6f  *appfs_convert_o
04e0: 73 5f 74 6f 53 74 72 69 6e 67 28 61 70 70 66 73  s_toString(appfs
04f0: 5f 6f 73 5f 74 20 6f 73 29 20 7b 0a 09 73 77 69  _os_t os) {..swi
0500: 74 63 68 20 28 6f 73 29 20 7b 0a 09 09 63 61 73  tch (os) {...cas
0510: 65 20 41 50 50 46 53 5f 4f 53 5f 41 4c 4c 3a 0a  e APPFS_OS_ALL:.
0520: 09 09 09 72 65 74 75 72 6e 28 22 6e 6f 61 72 63  ...return("noarc
0530: 68 22 29 3b 0a 09 09 63 61 73 65 20 41 50 50 46  h");...case APPF
0540: 53 5f 4f 53 5f 4c 49 4e 55 58 3a 0a 09 09 09 72  S_OS_LINUX:....r
0550: 65 74 75 72 6e 28 22 6c 69 6e 75 78 22 29 3b 0a  eturn("linux");.
0560: 09 09 63 61 73 65 20 41 50 50 46 53 5f 4f 53 5f  ..case APPFS_OS_
0570: 4d 41 43 4f 53 58 3a 0a 09 09 09 72 65 74 75 72  MACOSX:....retur
0580: 6e 28 22 6d 61 63 6f 73 78 22 29 3b 0a 09 09 63  n("macosx");...c
0590: 61 73 65 20 41 50 50 46 53 5f 4f 53 5f 46 52 45  ase APPFS_OS_FRE
05a0: 45 42 53 44 3a 0a 09 09 09 72 65 74 75 72 6e 28  EBSD:....return(
05b0: 22 66 72 65 65 62 73 64 22 29 3b 0a 09 09 63 61  "freebsd");...ca
05c0: 73 65 20 41 50 50 46 53 5f 4f 53 5f 4f 50 45 4e  se APPFS_OS_OPEN
05d0: 42 53 44 3a 0a 09 09 09 72 65 74 75 72 6e 28 22  BSD:....return("
05e0: 6f 70 65 6e 62 73 64 22 29 3b 0a 09 09 63 61 73  openbsd");...cas
05f0: 65 20 41 50 50 46 53 5f 4f 53 5f 53 4f 4c 41 52  e APPFS_OS_SOLAR
0600: 49 53 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 66  IS:....return("f
0610: 72 65 65 62 73 64 22 29 3b 0a 09 09 63 61 73 65  reebsd");...case
0620: 20 41 50 50 46 53 5f 43 50 55 5f 55 4e 4b 4e 4f   APPFS_CPU_UNKNO
0630: 57 4e 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 75  WN:....return("u
0640: 6e 6b 6e 6f 77 6e 22 29 3b 0a 09 7d 0a 0a 09 72  nknown");..}...r
0650: 65 74 75 72 6e 28 22 75 6e 6b 6e 6f 77 6e 22 29  eturn("unknown")
0660: 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 61 70 70 66  ;.}..static appf
0670: 73 5f 63 70 75 41 72 63 68 5f 74 20 61 70 70 66  s_cpuArch_t appf
0680: 73 5f 63 6f 6e 76 65 72 74 5f 63 70 75 5f 66 72  s_convert_cpu_fr
0690: 6f 6d 53 74 72 69 6e 67 28 63 6f 6e 73 74 20 63  omString(const c
06a0: 68 61 72 20 2a 63 70 75 29 20 7b 0a 09 69 66 20  har *cpu) {..if 
06b0: 28 73 74 72 63 61 73 65 63 6d 70 28 63 70 75 2c  (strcasecmp(cpu,
06c0: 20 22 61 6d 64 36 34 22 29 20 3d 3d 20 30 20 7c   "amd64") == 0 |
06d0: 7c 20 73 74 72 63 61 73 65 63 6d 70 28 63 70 75  | strcasecmp(cpu
06e0: 2c 20 22 78 38 36 5f 36 34 22 29 20 3d 3d 20 30  , "x86_64") == 0
06f0: 29 20 7b 0a 09 09 72 65 74 75 72 6e 28 41 50 50  ) {...return(APP
0700: 46 53 5f 43 50 55 5f 41 4d 44 36 34 29 3b 0a 09  FS_CPU_AMD64);..
0710: 7d 0a 0a 09 69 66 20 28 73 74 72 63 61 73 65 63  }...if (strcasec
0720: 6d 70 28 63 70 75 2c 20 22 69 33 38 36 22 29 20  mp(cpu, "i386") 
0730: 3d 3d 20 30 20 7c 7c 20 5c 0a 09 20 20 20 20 73  == 0 || \..    s
0740: 74 72 63 61 73 65 63 6d 70 28 63 70 75 2c 20 22  trcasecmp(cpu, "
0750: 69 34 38 36 22 29 20 3d 3d 20 30 20 7c 7c 20 5c  i486") == 0 || \
0760: 0a 09 20 20 20 20 73 74 72 63 61 73 65 63 6d 70  ..    strcasecmp
0770: 28 63 70 75 2c 20 22 69 35 38 36 22 29 20 3d 3d  (cpu, "i586") ==
0780: 20 30 20 7c 7c 20 5c 0a 09 20 20 20 20 73 74 72   0 || \..    str
0790: 63 61 73 65 63 6d 70 28 63 70 75 2c 20 22 69 36  casecmp(cpu, "i6
07a0: 38 36 22 29 20 3d 3d 20 30 20 7c 7c 20 5c 0a 09  86") == 0 || \..
07b0: 20 20 20 20 73 74 72 63 61 73 65 63 6d 70 28 63      strcasecmp(c
07c0: 70 75 2c 20 22 69 78 38 36 22 29 20 3d 3d 20 30  pu, "ix86") == 0
07d0: 29 20 7b 0a 09 09 72 65 74 75 72 6e 28 41 50 50  ) {...return(APP
07e0: 46 53 5f 43 50 55 5f 49 33 38 36 29 3b 0a 09 7d  FS_CPU_I386);..}
07f0: 0a 0a 09 69 66 20 28 73 74 72 63 61 73 65 63 6d  ...if (strcasecm
0800: 70 28 63 70 75 2c 20 22 61 72 6d 22 29 20 3d 3d  p(cpu, "arm") ==
0810: 20 30 29 20 7b 0a 09 09 72 65 74 75 72 6e 28 41   0) {...return(A
0820: 50 50 46 53 5f 43 50 55 5f 41 52 4d 29 3b 0a 09  PPFS_CPU_ARM);..
0830: 7d 0a 0a 09 69 66 20 28 73 74 72 63 61 73 65 63  }...if (strcasec
0840: 6d 70 28 63 70 75 2c 20 22 6e 6f 61 72 63 68 22  mp(cpu, "noarch"
0850: 29 20 3d 3d 20 30 29 20 7b 0a 09 09 72 65 74 75  ) == 0) {...retu
0860: 72 6e 28 41 50 50 46 53 5f 43 50 55 5f 41 4c 4c  rn(APPFS_CPU_ALL
0870: 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28 41  );..}...return(A
0880: 50 50 46 53 5f 43 50 55 5f 55 4e 4b 4e 4f 57 4e  PPFS_CPU_UNKNOWN
0890: 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 63 6f 6e  );.}..static con
08a0: 73 74 20 63 68 61 72 20 2a 61 70 70 66 73 5f 63  st char *appfs_c
08b0: 6f 6e 76 65 72 74 5f 63 70 75 5f 74 6f 53 74 72  onvert_cpu_toStr
08c0: 69 6e 67 28 61 70 70 66 73 5f 63 70 75 41 72 63  ing(appfs_cpuArc
08d0: 68 5f 74 20 63 70 75 29 20 7b 0a 09 73 77 69 74  h_t cpu) {..swit
08e0: 63 68 20 28 63 70 75 29 20 7b 0a 09 09 63 61 73  ch (cpu) {...cas
08f0: 65 20 41 50 50 46 53 5f 43 50 55 5f 41 4c 4c 3a  e APPFS_CPU_ALL:
0900: 0a 09 09 09 72 65 74 75 72 6e 28 22 6e 6f 61 72  ....return("noar
0910: 63 68 22 29 3b 0a 09 09 63 61 73 65 20 41 50 50  ch");...case APP
0920: 46 53 5f 43 50 55 5f 41 4d 44 36 34 3a 0a 09 09  FS_CPU_AMD64:...
0930: 09 72 65 74 75 72 6e 28 22 61 6d 64 36 34 22 29  .return("amd64")
0940: 3b 0a 09 09 63 61 73 65 20 41 50 50 46 53 5f 43  ;...case APPFS_C
0950: 50 55 5f 49 33 38 36 3a 0a 09 09 09 72 65 74 75  PU_I386:....retu
0960: 72 6e 28 22 69 78 38 36 22 29 3b 0a 09 09 63 61  rn("ix86");...ca
0970: 73 65 20 41 50 50 46 53 5f 43 50 55 5f 41 52 4d  se APPFS_CPU_ARM
0980: 3a 0a 09 09 09 72 65 74 75 72 6e 28 22 61 72 6d  :....return("arm
0990: 22 29 3b 0a 09 09 63 61 73 65 20 41 50 50 46 53  ");...case APPFS
09a0: 5f 43 50 55 5f 55 4e 4b 4e 4f 57 4e 3a 0a 09 09  _CPU_UNKNOWN:...
09b0: 09 72 65 74 75 72 6e 28 22 75 6e 6b 6e 6f 77 6e  .return("unknown
09c0: 22 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28  ");..}...return(
09d0: 22 75 6e 6b 6e 6f 77 6e 22 29 3b 0a 7d 0a 0a 73  "unknown");.}..s
09e0: 74 61 74 69 63 20 69 6e 74 20 61 70 70 66 73 5f  tatic int appfs_
09f0: 54 63 6c 5f 45 76 61 6c 28 54 63 6c 5f 49 6e 74  Tcl_Eval(Tcl_Int
0a00: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74  erp *interp, int
0a10: 20 6f 62 6a 63 2c 20 63 6f 6e 73 74 20 63 68 61   objc, const cha
0a20: 72 20 2a 63 6d 64 2c 20 2e 2e 2e 29 20 7b 0a 09  r *cmd, ...) {..
0a30: 54 63 6c 5f 4f 62 6a 20 2a 2a 6f 62 6a 76 3b 0a  Tcl_Obj **objv;.
0a40: 09 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 72 67  .const char *arg
0a50: 3b 0a 09 76 61 5f 6c 69 73 74 20 61 72 67 70 3b  ;..va_list argp;
0a60: 0a 09 69 6e 74 20 72 65 74 76 61 6c 3b 0a 09 69  ..int retval;..i
0a70: 6e 74 20 69 3b 0a 0a 09 6f 62 6a 76 20 3d 20 28  nt i;...objv = (
0a80: 76 6f 69 64 20 2a 29 20 63 6b 61 6c 6c 6f 63 28  void *) ckalloc(
0a90: 73 69 7a 65 6f 66 28 2a 6f 62 6a 76 29 20 2a 20  sizeof(*objv) * 
0aa0: 6f 62 6a 63 29 3b 0a 09 6f 62 6a 76 5b 30 5d 20  objc);..objv[0] 
0ab0: 3d 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  = Tcl_NewStringO
0ac0: 62 6a 28 63 6d 64 2c 20 2d 31 29 3b 0a 0a 09 76  bj(cmd, -1);...v
0ad0: 61 5f 73 74 61 72 74 28 61 72 67 70 2c 20 63 6d  a_start(argp, cm
0ae0: 64 29 3b 0a 09 66 6f 72 20 28 69 20 3d 20 31 3b  d);..for (i = 1;
0af0: 20 69 20 3c 20 6f 62 6a 63 3b 20 69 2b 2b 29 20   i < objc; i++) 
0b00: 7b 0a 09 09 61 72 67 20 3d 20 76 61 5f 61 72 67  {...arg = va_arg
0b10: 28 61 72 67 70 2c 20 63 6f 6e 73 74 20 63 68 61  (argp, const cha
0b20: 72 20 2a 29 3b 0a 09 09 6f 62 6a 76 5b 69 5d 20  r *);...objv[i] 
0b30: 3d 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  = Tcl_NewStringO
0b40: 62 6a 28 61 72 67 2c 20 2d 31 29 3b 0a 09 7d 0a  bj(arg, -1);..}.
0b50: 09 76 61 5f 65 6e 64 28 61 72 67 70 29 3b 0a 0a  .va_end(argp);..
0b60: 09 72 65 74 76 61 6c 20 3d 20 54 63 6c 5f 45 76  .retval = Tcl_Ev
0b70: 61 6c 4f 62 6a 76 28 69 6e 74 65 72 70 2c 20 6f  alObjv(interp, o
0b80: 62 6a 63 2c 20 6f 62 6a 76 2c 20 30 29 3b 0a 0a  bjc, objv, 0);..
0b90: 09 63 6b 66 72 65 65 28 28 76 6f 69 64 20 2a 29  .ckfree((void *)
0ba0: 20 6f 62 6a 76 29 3b 0a 0a 09 72 65 74 75 72 6e   objv);...return
0bb0: 28 72 65 74 76 61 6c 29 3b 0a 7d 0a 0a 73 74 61  (retval);.}..sta
0bc0: 74 69 63 20 73 74 72 75 63 74 20 61 70 70 66 73  tic struct appfs
0bd0: 5f 70 61 63 6b 61 67 65 20 2a 61 70 70 66 73 5f  _package *appfs_
0be0: 67 65 74 69 6e 64 65 78 28 63 6f 6e 73 74 20 63  getindex(const c
0bf0: 68 61 72 20 2a 68 6f 73 74 6e 61 6d 65 2c 20 69  har *hostname, i
0c00: 6e 74 20 2a 70 61 63 6b 61 67 65 5f 63 6f 75 6e  nt *package_coun
0c10: 74 5f 70 29 20 7b 0a 09 69 6e 74 20 74 63 6c 5f  t_p) {..int tcl_
0c20: 72 65 74 3b 0a 0a 09 69 66 20 28 70 61 63 6b 61  ret;...if (packa
0c30: 67 65 5f 63 6f 75 6e 74 5f 70 20 3d 3d 20 4e 55  ge_count_p == NU
0c40: 4c 4c 29 20 7b 0a 09 09 72 65 74 75 72 6e 28 4e  LL) {...return(N
0c50: 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 74 63 6c 5f 72  ULL);..}...tcl_r
0c60: 65 74 20 3d 20 61 70 70 66 73 5f 54 63 6c 5f 45  et = appfs_Tcl_E
0c70: 76 61 6c 28 67 6c 6f 62 61 6c 54 68 72 65 61 64  val(globalThread
0c80: 2e 69 6e 74 65 72 70 2c 20 32 2c 20 22 3a 3a 61  .interp, 2, "::a
0c90: 70 70 66 73 3a 3a 67 65 74 69 6e 64 65 78 22 2c  ppfs::getindex",
0ca0: 20 68 6f 73 74 6e 61 6d 65 29 3b 0a 09 69 66 20   hostname);..if 
0cb0: 28 74 63 6c 5f 72 65 74 20 21 3d 20 54 43 4c 5f  (tcl_ret != TCL_
0cc0: 4f 4b 29 20 7b 0a 09 09 41 50 50 46 53 5f 44 45  OK) {...APPFS_DE
0cd0: 42 55 47 28 22 43 61 6c 6c 20 74 6f 20 3a 3a 61  BUG("Call to ::a
0ce0: 70 70 66 73 3a 3a 67 65 74 69 6e 64 65 78 20 66  ppfs::getindex f
0cf0: 61 69 6c 65 64 3a 20 25 73 22 2c 20 54 63 6c 5f  ailed: %s", Tcl_
0d00: 47 65 74 53 74 72 69 6e 67 52 65 73 75 6c 74 28  GetStringResult(
0d10: 67 6c 6f 62 61 6c 54 68 72 65 61 64 2e 69 6e 74  globalThread.int
0d20: 65 72 70 29 29 3b 0a 0a 09 09 72 65 74 75 72 6e  erp));....return
0d30: 28 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 72 65 74  (NULL);..}...ret
0d40: 75 72 6e 28 4e 55 4c 4c 29 3b 0a 7d 0a 0a 73 74  urn(NULL);.}..st
0d50: 61 74 69 63 20 69 6e 74 20 61 70 70 66 73 5f 67  atic int appfs_g
0d60: 65 74 66 69 6c 65 28 63 6f 6e 73 74 20 63 68 61  etfile(const cha
0d70: 72 20 2a 68 6f 73 74 6e 61 6d 65 2c 20 63 6f 6e  r *hostname, con
0d80: 73 74 20 63 68 61 72 20 2a 73 68 61 31 29 20 7b  st char *sha1) {
0d90: 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74 20 61  .}..static int a
0da0: 70 70 66 73 5f 67 65 74 6d 61 6e 69 66 65 73 74  ppfs_getmanifest
0db0: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 68 6f 73  (const char *hos
0dc0: 74 6e 61 6d 65 2c 20 63 6f 6e 73 74 20 63 68 61  tname, const cha
0dd0: 72 20 2a 73 68 61 31 29 20 7b 0a 7d 0a 0a 73 74  r *sha1) {.}..st
0de0: 61 74 69 63 20 69 6e 74 20 61 70 70 66 73 5f 66  atic int appfs_f
0df0: 75 73 65 5f 67 65 74 61 74 74 72 28 63 6f 6e 73  use_getattr(cons
0e00: 74 20 63 68 61 72 20 2a 70 61 74 68 2c 20 73 74  t char *path, st
0e10: 72 75 63 74 20 73 74 61 74 20 2a 73 74 62 75 66  ruct stat *stbuf
0e20: 29 20 7b 0a 09 69 6e 74 20 72 65 73 20 3d 20 30  ) {..int res = 0
0e30: 3b 0a 0a 09 41 50 50 46 53 5f 44 45 42 55 47 28  ;...APPFS_DEBUG(
0e40: 22 45 6e 74 65 72 20 28 70 61 74 68 20 3d 20 25  "Enter (path = %
0e50: 73 2c 20 2e 2e 2e 29 22 2c 20 70 61 74 68 29 3b  s, ...)", path);
0e60: 0a 0a 09 6d 65 6d 73 65 74 28 73 74 62 75 66 2c  ...memset(stbuf,
0e70: 20 30 2c 20 73 69 7a 65 6f 66 28 73 74 72 75 63   0, sizeof(struc
0e80: 74 20 73 74 61 74 29 29 3b 0a 0a 09 73 74 62 75  t stat));...stbu
0e90: 66 2d 3e 73 74 5f 6d 6f 64 65 20 3d 20 53 5f 49  f->st_mode = S_I
0ea0: 46 44 49 52 20 7c 20 30 37 35 35 3b 0a 09 73 74  FDIR | 0755;..st
0eb0: 62 75 66 2d 3e 73 74 5f 6e 6c 69 6e 6b 20 3d 20  buf->st_nlink = 
0ec0: 32 3b 0a 0a 09 72 65 74 75 72 6e 20 72 65 73 3b  2;...return res;
0ed0: 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74 20 61  .}..static int a
0ee0: 70 70 66 73 5f 66 75 73 65 5f 72 65 61 64 64 69  ppfs_fuse_readdi
0ef0: 72 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 61  r(const char *pa
0f00: 74 68 2c 20 76 6f 69 64 20 2a 62 75 66 2c 20 66  th, void *buf, f
0f10: 75 73 65 5f 66 69 6c 6c 5f 64 69 72 5f 74 20 66  use_fill_dir_t f
0f20: 69 6c 6c 65 72 2c 20 6f 66 66 5f 74 20 6f 66 66  iller, off_t off
0f30: 73 65 74 2c 20 73 74 72 75 63 74 20 66 75 73 65  set, struct fuse
0f40: 5f 66 69 6c 65 5f 69 6e 66 6f 20 2a 66 69 29 20  _file_info *fi) 
0f50: 7b 0a 09 41 50 50 46 53 5f 44 45 42 55 47 28 22  {..APPFS_DEBUG("
0f60: 45 6e 74 65 72 20 28 70 61 74 68 20 3d 20 25 73  Enter (path = %s
0f70: 2c 20 2e 2e 2e 29 22 2c 20 70 61 74 68 29 3b 0a  , ...)", path);.
0f80: 0a 09 66 69 6c 6c 65 72 28 62 75 66 2c 20 22 2e  ..filler(buf, ".
0f90: 22 2c 20 4e 55 4c 4c 2c 20 30 29 3b 0a 09 66 69  ", NULL, 0);..fi
0fa0: 6c 6c 65 72 28 62 75 66 2c 20 22 2e 2e 22 2c 20  ller(buf, "..", 
0fb0: 4e 55 4c 4c 2c 20 30 29 3b 0a 0a 09 72 65 74 75  NULL, 0);...retu
0fc0: 72 6e 20 30 3b 0a 7d 0a 0a 73 74 61 74 69 63 20  rn 0;.}..static 
0fd0: 69 6e 74 20 61 70 70 66 73 5f 66 75 73 65 5f 6f  int appfs_fuse_o
0fe0: 70 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  pen(const char *
0ff0: 70 61 74 68 2c 20 73 74 72 75 63 74 20 66 75 73  path, struct fus
1000: 65 5f 66 69 6c 65 5f 69 6e 66 6f 20 2a 66 69 29  e_file_info *fi)
1010: 20 7b 0a 09 72 65 74 75 72 6e 28 2d 45 4e 4f 45   {..return(-ENOE
1020: 4e 54 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69  NT);.}..static i
1030: 6e 74 20 61 70 70 66 73 5f 66 75 73 65 5f 72 65  nt appfs_fuse_re
1040: 61 64 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70  ad(const char *p
1050: 61 74 68 2c 20 63 68 61 72 20 2a 62 75 66 2c 20  ath, char *buf, 
1060: 73 69 7a 65 5f 74 20 73 69 7a 65 2c 20 6f 66 66  size_t size, off
1070: 5f 74 20 6f 66 66 73 65 74 2c 20 73 74 72 75 63  _t offset, struc
1080: 74 20 66 75 73 65 5f 66 69 6c 65 5f 69 6e 66 6f  t fuse_file_info
1090: 20 2a 66 69 29 20 7b 0a 09 72 65 74 75 72 6e 28   *fi) {..return(
10a0: 2d 45 4e 4f 45 4e 54 29 3b 0a 7d 0a 0a 23 69 66  -ENOENT);.}..#if
10b0: 64 65 66 20 41 50 50 46 53 5f 54 45 53 54 5f 44  def APPFS_TEST_D
10c0: 52 49 56 45 52 0a 73 74 61 74 69 63 20 69 6e 74  RIVER.static int
10d0: 20 61 70 70 66 73 5f 74 65 73 74 5f 64 72 69 76   appfs_test_driv
10e0: 65 72 28 76 6f 69 64 29 20 7b 0a 09 73 74 72 75  er(void) {..stru
10f0: 63 74 20 61 70 70 66 73 5f 70 61 63 6b 61 67 65  ct appfs_package
1100: 20 2a 70 61 63 6b 61 67 65 73 3b 0a 09 69 6e 74   *packages;..int
1110: 20 70 61 63 6b 61 67 65 73 5f 63 6f 75 6e 74 20   packages_count 
1120: 3d 20 30 3b 0a 0a 09 70 61 63 6b 61 67 65 73 20  = 0;...packages 
1130: 3d 20 61 70 70 66 73 5f 67 65 74 69 6e 64 65 78  = appfs_getindex
1140: 28 22 72 6b 65 65 6e 65 2e 6f 72 67 22 2c 20 26  ("rkeene.org", &
1150: 70 61 63 6b 61 67 65 73 5f 63 6f 75 6e 74 29 3b  packages_count);
1160: 0a 09 69 66 20 28 70 61 63 6b 61 67 65 73 20 3d  ..if (packages =
1170: 3d 20 4e 55 4c 4c 20 7c 7c 20 70 61 63 6b 61 67  = NULL || packag
1180: 65 73 5f 63 6f 75 6e 74 20 3d 3d 20 30 29 20 7b  es_count == 0) {
1190: 0a 09 09 66 70 72 69 6e 74 66 28 73 74 64 65 72  ...fprintf(stder
11a0: 72 2c 20 22 55 6e 61 62 6c 65 20 74 6f 20 66 65  r, "Unable to fe
11b0: 74 63 68 20 70 61 63 6b 61 67 65 20 69 6e 64 65  tch package inde
11c0: 78 20 66 72 6f 6d 20 72 6b 65 65 6e 65 2e 6f 72  x from rkeene.or
11d0: 67 2e 5c 6e 22 29 3b 0a 0a 09 09 72 65 74 75 72  g.\n");....retur
11e0: 6e 28 31 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 72  n(1);..}...retur
11f0: 6e 28 30 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  n(0);.}.#endif..
1200: 73 74 61 74 69 63 20 73 74 72 75 63 74 20 66 75  static struct fu
1210: 73 65 5f 6f 70 65 72 61 74 69 6f 6e 73 20 61 70  se_operations ap
1220: 70 66 73 5f 6f 70 65 72 20 3d 20 7b 0a 09 2e 67  pfs_oper = {...g
1230: 65 74 61 74 74 72 09 3d 20 61 70 70 66 73 5f 66  etattr.= appfs_f
1240: 75 73 65 5f 67 65 74 61 74 74 72 2c 0a 09 2e 72  use_getattr,...r
1250: 65 61 64 64 69 72 09 3d 20 61 70 70 66 73 5f 66  eaddir.= appfs_f
1260: 75 73 65 5f 72 65 61 64 64 69 72 2c 0a 09 2e 6f  use_readdir,...o
1270: 70 65 6e 09 09 3d 20 61 70 70 66 73 5f 66 75 73  pen..= appfs_fus
1280: 65 5f 6f 70 65 6e 2c 0a 09 2e 72 65 61 64 09 09  e_open,...read..
1290: 3d 20 61 70 70 66 73 5f 66 75 73 65 5f 72 65 61  = appfs_fuse_rea
12a0: 64 0a 7d 3b 0a 0a 69 6e 74 20 6d 61 69 6e 28 69  d.};..int main(i
12b0: 6e 74 20 61 72 67 63 2c 20 63 68 61 72 20 2a 2a  nt argc, char **
12c0: 61 72 67 76 29 20 7b 0a 09 63 6f 6e 73 74 20 63  argv) {..const c
12d0: 68 61 72 20 2a 63 61 63 68 65 64 69 72 20 3d 20  har *cachedir = 
12e0: 41 50 50 46 53 5f 43 41 43 48 45 44 49 52 3b 0a  APPFS_CACHEDIR;.
12f0: 09 63 68 61 72 20 64 62 66 69 6c 65 6e 61 6d 65  .char dbfilename
1300: 5b 31 30 32 34 5d 3b 0a 09 69 6e 74 20 74 63 6c  [1024];..int tcl
1310: 5f 72 65 74 2c 20 73 6e 70 72 69 6e 74 66 5f 72  _ret, snprintf_r
1320: 65 74 2c 20 73 71 6c 69 74 65 5f 72 65 74 3b 0a  et, sqlite_ret;.
1330: 0a 09 67 6c 6f 62 61 6c 54 68 72 65 61 64 2e 69  ..globalThread.i
1340: 6e 74 65 72 70 20 3d 20 54 63 6c 5f 43 72 65 61  nterp = Tcl_Crea
1350: 74 65 49 6e 74 65 72 70 28 29 3b 0a 09 69 66 20  teInterp();..if 
1360: 28 67 6c 6f 62 61 6c 54 68 72 65 61 64 2e 69 6e  (globalThread.in
1370: 74 65 72 70 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a  terp == NULL) {.
1380: 09 09 66 70 72 69 6e 74 66 28 73 74 64 65 72 72  ..fprintf(stderr
1390: 2c 20 22 55 6e 61 62 6c 65 20 74 6f 20 63 72 65  , "Unable to cre
13a0: 61 74 65 20 54 63 6c 20 49 6e 74 65 72 70 72 65  ate Tcl Interpre
13b0: 74 65 72 2e 20 20 41 62 6f 72 74 69 6e 67 2e 5c  ter.  Aborting.\
13c0: 6e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 31  n");....return(1
13d0: 29 3b 0a 09 7d 0a 0a 09 74 63 6c 5f 72 65 74 20  );..}...tcl_ret 
13e0: 3d 20 54 63 6c 5f 49 6e 69 74 28 67 6c 6f 62 61  = Tcl_Init(globa
13f0: 6c 54 68 72 65 61 64 2e 69 6e 74 65 72 70 29 3b  lThread.interp);
1400: 0a 09 69 66 20 28 74 63 6c 5f 72 65 74 20 21 3d  ..if (tcl_ret !=
1410: 20 54 43 4c 5f 4f 4b 29 20 7b 0a 09 09 66 70 72   TCL_OK) {...fpr
1420: 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 6e  intf(stderr, "Un
1430: 61 62 6c 65 20 74 6f 20 69 6e 69 74 69 61 6c 69  able to initiali
1440: 7a 65 20 54 63 6c 2e 20 20 41 62 6f 72 74 69 6e  ze Tcl.  Abortin
1450: 67 2e 5c 6e 22 29 3b 0a 0a 09 09 72 65 74 75 72  g.\n");....retur
1460: 6e 28 31 29 3b 0a 09 7d 0a 0a 09 74 63 6c 5f 72  n(1);..}...tcl_r
1470: 65 74 20 3d 20 54 63 6c 5f 45 76 61 6c 28 67 6c  et = Tcl_Eval(gl
1480: 6f 62 61 6c 54 68 72 65 61 64 2e 69 6e 74 65 72  obalThread.inter
1490: 70 2c 20 22 22 0a 23 69 6e 63 6c 75 64 65 20 22  p, "".#include "
14a0: 61 70 70 66 73 2e 74 63 6c 2e 68 22 0a 09 22 22  appfs.tcl.h"..""
14b0: 29 3b 0a 09 69 66 20 28 74 63 6c 5f 72 65 74 20  );..if (tcl_ret 
14c0: 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 09 09 66  != TCL_OK) {...f
14d0: 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
14e0: 55 6e 61 62 6c 65 20 74 6f 20 69 6e 69 74 69 61  Unable to initia
14f0: 6c 69 7a 65 20 54 63 6c 20 41 70 70 46 53 20 73  lize Tcl AppFS s
1500: 63 72 69 70 74 2e 20 20 41 62 6f 72 74 69 6e 67  cript.  Aborting
1510: 2e 5c 6e 22 29 3b 0a 09 09 66 70 72 69 6e 74 66  .\n");...fprintf
1520: 28 73 74 64 65 72 72 2c 20 22 54 63 6c 20 45 72  (stderr, "Tcl Er
1530: 72 6f 72 20 69 73 3a 20 25 73 5c 6e 22 2c 20 54  ror is: %s\n", T
1540: 63 6c 5f 47 65 74 53 74 72 69 6e 67 52 65 73 75  cl_GetStringResu
1550: 6c 74 28 67 6c 6f 62 61 6c 54 68 72 65 61 64 2e  lt(globalThread.
1560: 69 6e 74 65 72 70 29 29 3b 0a 0a 09 09 72 65 74  interp));....ret
1570: 75 72 6e 28 31 29 3b 0a 09 7d 0a 0a 09 69 66 20  urn(1);..}...if 
1580: 28 54 63 6c 5f 53 65 74 56 61 72 28 67 6c 6f 62  (Tcl_SetVar(glob
1590: 61 6c 54 68 72 65 61 64 2e 69 6e 74 65 72 70 2c  alThread.interp,
15a0: 20 22 3a 3a 61 70 70 66 73 3a 3a 63 61 63 68 65   "::appfs::cache
15b0: 64 69 72 22 2c 20 63 61 63 68 65 64 69 72 2c 20  dir", cachedir, 
15c0: 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
15d0: 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 66 70   == NULL) {...fp
15e0: 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55  rintf(stderr, "U
15f0: 6e 61 62 6c 65 20 74 6f 20 73 65 74 20 63 61 63  nable to set cac
1600: 68 65 20 64 69 72 65 63 74 6f 72 79 2e 20 20 54  he directory.  T
1610: 68 69 73 20 73 68 6f 75 6c 64 20 6e 65 76 65 72  his should never
1620: 20 66 61 69 6c 2e 5c 6e 22 29 3b 0a 0a 09 09 72   fail.\n");....r
1630: 65 74 75 72 6e 28 31 29 3b 0a 09 7d 0a 0a 09 74  eturn(1);..}...t
1640: 63 6c 5f 72 65 74 20 3d 20 61 70 70 66 73 5f 54  cl_ret = appfs_T
1650: 63 6c 5f 45 76 61 6c 28 67 6c 6f 62 61 6c 54 68  cl_Eval(globalTh
1660: 72 65 61 64 2e 69 6e 74 65 72 70 2c 20 31 2c 20  read.interp, 1, 
1670: 22 3a 3a 61 70 70 66 73 3a 3a 69 6e 69 74 22 29  "::appfs::init")
1680: 3b 0a 09 69 66 20 28 74 63 6c 5f 72 65 74 20 21  ;..if (tcl_ret !
1690: 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 09 09 66 70  = TCL_OK) {...fp
16a0: 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55  rintf(stderr, "U
16b0: 6e 61 62 6c 65 20 74 6f 20 69 6e 69 74 69 61 6c  nable to initial
16c0: 69 7a 65 20 54 63 6c 20 41 70 70 46 53 20 73 63  ize Tcl AppFS sc
16d0: 72 69 70 74 20 28 3a 3a 61 70 70 66 73 3a 3a 69  ript (::appfs::i
16e0: 6e 69 74 29 2e 20 20 41 62 6f 72 74 69 6e 67 2e  nit).  Aborting.
16f0: 5c 6e 22 29 3b 0a 09 09 66 70 72 69 6e 74 66 28  \n");...fprintf(
1700: 73 74 64 65 72 72 2c 20 22 54 63 6c 20 45 72 72  stderr, "Tcl Err
1710: 6f 72 20 69 73 3a 20 25 73 5c 6e 22 2c 20 54 63  or is: %s\n", Tc
1720: 6c 5f 47 65 74 53 74 72 69 6e 67 52 65 73 75 6c  l_GetStringResul
1730: 74 28 67 6c 6f 62 61 6c 54 68 72 65 61 64 2e 69  t(globalThread.i
1740: 6e 74 65 72 70 29 29 3b 0a 0a 09 09 72 65 74 75  nterp));....retu
1750: 72 6e 28 31 29 3b 0a 09 7d 0a 0a 09 73 6e 70 72  rn(1);..}...snpr
1760: 69 6e 74 66 5f 72 65 74 20 3d 20 73 6e 70 72 69  intf_ret = snpri
1770: 6e 74 66 28 64 62 66 69 6c 65 6e 61 6d 65 2c 20  ntf(dbfilename, 
1780: 73 69 7a 65 6f 66 28 64 62 66 69 6c 65 6e 61 6d  sizeof(dbfilenam
1790: 65 29 2c 20 22 25 73 2f 25 73 22 2c 20 63 61 63  e), "%s/%s", cac
17a0: 68 65 64 69 72 2c 20 22 63 61 63 68 65 2e 64 62  hedir, "cache.db
17b0: 22 29 3b 0a 09 69 66 20 28 73 6e 70 72 69 6e 74  ");..if (snprint
17c0: 66 5f 72 65 74 20 3e 3d 20 73 69 7a 65 6f 66 28  f_ret >= sizeof(
17d0: 64 62 66 69 6c 65 6e 61 6d 65 29 29 20 7b 0a 09  dbfilename)) {..
17e0: 09 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  .fprintf(stderr,
17f0: 20 22 55 6e 61 62 6c 65 20 74 6f 20 73 65 74 20   "Unable to set 
1800: 64 61 74 61 62 61 73 65 20 66 69 6c 65 6e 61 6d  database filenam
1810: 65 2e 20 20 41 62 6f 72 74 69 6e 67 2e 5c 6e 22  e.  Aborting.\n"
1820: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 31 29 3b  );....return(1);
1830: 0a 09 7d 0a 0a 09 73 71 6c 69 74 65 5f 72 65 74  ..}...sqlite_ret
1840: 20 3d 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28   = sqlite3_open(
1850: 64 62 66 69 6c 65 6e 61 6d 65 2c 20 26 67 6c 6f  dbfilename, &glo
1860: 62 61 6c 54 68 72 65 61 64 2e 64 62 29 3b 0a 09  balThread.db);..
1870: 69 66 20 28 73 71 6c 69 74 65 5f 72 65 74 20 21  if (sqlite_ret !
1880: 3d 20 53 51 4c 49 54 45 5f 4f 4b 29 20 7b 0a 09  = SQLITE_OK) {..
1890: 09 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  .fprintf(stderr,
18a0: 20 22 55 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e   "Unable to open
18b0: 20 64 61 74 61 62 61 73 65 3a 20 25 73 5c 6e 22   database: %s\n"
18c0: 2c 20 64 62 66 69 6c 65 6e 61 6d 65 29 3b 0a 0a  , dbfilename);..
18d0: 09 09 72 65 74 75 72 6e 28 31 29 3b 0a 09 7d 0a  ..return(1);..}.
18e0: 0a 23 69 66 64 65 66 20 41 50 50 46 53 5f 54 45  .#ifdef APPFS_TE
18f0: 53 54 5f 44 52 49 56 45 52 0a 09 72 65 74 75 72  ST_DRIVER..retur
1900: 6e 28 61 70 70 66 73 5f 74 65 73 74 5f 64 72 69  n(appfs_test_dri
1910: 76 65 72 28 29 29 3b 0a 23 65 6c 73 65 0a 09 72  ver());.#else..r
1920: 65 74 75 72 6e 28 66 75 73 65 5f 6d 61 69 6e 28  eturn(fuse_main(
1930: 61 72 67 63 2c 20 61 72 67 76 2c 20 26 61 70 70  argc, argv, &app
1940: 66 73 5f 6f 70 65 72 2c 20 4e 55 4c 4c 29 29 3b  fs_oper, NULL));
1950: 0a 23 65 6e 64 69 66 0a 7d 0a 20 0a              .#endif.}. .