From bacae540479e7dc84bfbd059a20afa2ef00e8cdb Mon Sep 17 00:00:00 2001
From: mrossetti <mrossetti@chromium.org>
Date: Tue, 31 May 2011 23:12:11 +0000
Subject: [PATCH 03/10] Exclude journal file from Time Machine if database is
 excluded.

BUG=74053

Original review URL: http://codereview.chromium.org/6990066

TODO(shess): The fts3_porter.c change is due to a conflict with an included
Apple library.  Perhaps move the operative code to a .c file, and firewall
SQLite from that include.

TODO(shess): Revisit this for -wal mode.  http://crbug.com/78507
---
 third_party/sqlite/src/Makefile.linux-gcc     |  4 ++++
 third_party/sqlite/src/ext/fts3/fts3_porter.c |  6 ++---
 third_party/sqlite/src/main.mk                |  2 +-
 third_party/sqlite/src/src/pager.c            | 32 +++++++++++++++++++++++++++
 third_party/sqlite/src/src/sqliteInt.h        | 10 +++++++++
 5 files changed, 50 insertions(+), 4 deletions(-)

diff --git a/third_party/sqlite/src/Makefile.linux-gcc b/third_party/sqlite/src/Makefile.linux-gcc
index a1dec21..952e8d1 100644
--- a/third_party/sqlite/src/Makefile.linux-gcc
+++ b/third_party/sqlite/src/Makefile.linux-gcc
@@ -44,7 +44,11 @@ THREADLIB = -lpthread
 #### Specify any extra libraries needed to access required functions.
 #
 #TLIBS = -lrt    # fdatasync on Solaris 8
+ifeq ($(shell uname -s),Darwin)
+TLIBS = -framework CoreServices
+else
 TLIBS = -ldl
+endif
 
 #### Leave SQLITE_DEBUG undefined for maximum speed.  Use SQLITE_DEBUG=1
 #    to check for memory leaks.  Use SQLITE_DEBUG=2 to print a log of all
diff --git a/third_party/sqlite/src/ext/fts3/fts3_porter.c b/third_party/sqlite/src/ext/fts3/fts3_porter.c
index 8fb4c25d..b180ee2 100644
--- a/third_party/sqlite/src/ext/fts3/fts3_porter.c
+++ b/third_party/sqlite/src/ext/fts3/fts3_porter.c
@@ -128,7 +128,7 @@ static int porterClose(sqlite3_tokenizer_cursor *pCursor){
 /*
 ** Vowel or consonant
 */
-static const char cType[] = {
+static const char vOrCType[] = {
    0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0,
    1, 1, 1, 2, 1
 };
@@ -152,7 +152,7 @@ static int isConsonant(const char *z){
   char x = *z;
   if( x==0 ) return 0;
   assert( x>='a' && x<='z' );
-  j = cType[x-'a'];
+  j = vOrCType[x-'a'];
   if( j<2 ) return j;
   return z[1]==0 || isVowel(z + 1);
 }
@@ -161,7 +161,7 @@ static int isVowel(const char *z){
   char x = *z;
   if( x==0 ) return 0;
   assert( x>='a' && x<='z' );
-  j = cType[x-'a'];
+  j = vOrCType[x-'a'];
   if( j<2 ) return 1-j;
   return isConsonant(z + 1);
 }
diff --git a/third_party/sqlite/src/main.mk b/third_party/sqlite/src/main.mk
index fcc0270..6ff3bd4 100644
--- a/third_party/sqlite/src/main.mk
+++ b/third_party/sqlite/src/main.mk
@@ -724,7 +724,7 @@ TESTFIXTURE_FLAGS += -DSQLITE_SERVER=1 -DSQLITE_PRIVATE="" -DSQLITE_CORE
 testfixture$(EXE): $(TESTSRC2) libsqlite3.a $(TESTSRC) $(TOP)/src/tclsqlite.c
 	$(TCCX) $(TCL_FLAGS) -DTCLSH=1 $(TESTFIXTURE_FLAGS)                  \
 		$(TESTSRC) $(TESTSRC2) $(TOP)/src/tclsqlite.c                \
-		-o testfixture$(EXE) $(LIBTCL) libsqlite3.a $(THREADLIB)
+		-o testfixture$(EXE) $(LIBTCL) libsqlite3.a $(THREADLIB) $(TLIBS)
 
 amalgamation-testfixture$(EXE): sqlite3.c $(TESTSRC) $(TOP)/src/tclsqlite.c
 	$(TCCX) $(TCL_FLAGS) -DTCLSH=1 $(TESTFIXTURE_FLAGS)                  \
diff --git a/third_party/sqlite/src/src/pager.c b/third_party/sqlite/src/src/pager.c
index 2c904d2..74c76f37 100644
--- a/third_party/sqlite/src/src/pager.c
+++ b/third_party/sqlite/src/src/pager.c
@@ -5497,6 +5497,20 @@ void sqlite3PagerUnref(DbPage *pPg){
   if( pPg ) sqlite3PagerUnrefNotNull(pPg);
 }
 
+#if defined(__APPLE__)
+/*
+** Create and return a CFURLRef given a cstring containing the path to a file.
+*/
+static CFURLRef create_cfurl_from_cstring(const char* filePath){
+  CFStringRef urlString = CFStringCreateWithFileSystemRepresentation(
+      kCFAllocatorDefault, filePath);
+  CFURLRef urlRef = CFURLCreateWithFileSystemPath(kCFAllocatorDefault,
+      urlString, kCFURLPOSIXPathStyle, FALSE);
+  CFRelease(urlString);
+  return urlRef;
+}
+#endif
+
 /*
 ** This function is called at the start of every write transaction.
 ** There must already be a RESERVED or EXCLUSIVE lock on the database 
@@ -5561,6 +5575,24 @@ static int pager_open_journal(Pager *pPager){
 #else
           rc = sqlite3OsOpen(pVfs, pPager->zJournal, pPager->jfd, flags, 0);
 #endif
+#if defined(__APPLE__)
+          /* Set the TimeMachine exclusion metadata for the journal if it has
+          ** been set for the database. Only do this for unix-type vfs
+          ** implementations. */
+          if( rc==SQLITE_OK && pPager->zFilename!=NULL
+           && strlen(pPager->zFilename)>0
+           && strncmp(pVfs->zName, "unix", 4)==0
+           && ( pVfs->zName[4]=='-' || pVfs->zName[4]=='\0' ) ){
+            CFURLRef database = create_cfurl_from_cstring(pPager->zFilename);
+            if( CSBackupIsItemExcluded(database, NULL) ){
+              CFURLRef journal = create_cfurl_from_cstring(pPager->zJournal);
+              /* Ignore errors from the following exclusion call. */
+              CSBackupSetItemExcluded(journal, TRUE, FALSE);
+              CFRelease(journal);
+            }
+            CFRelease(database);
+          }
+#endif
         }
       }
       assert( rc!=SQLITE_OK || isOpen(pPager->jfd) );
diff --git a/third_party/sqlite/src/src/sqliteInt.h b/third_party/sqlite/src/src/sqliteInt.h
index c01bbc7..745b910 100644
--- a/third_party/sqlite/src/src/sqliteInt.h
+++ b/third_party/sqlite/src/src/sqliteInt.h
@@ -3168,6 +3168,16 @@ int sqlite3CantopenError(int);
 #endif
 
 /*
+** The CoreServices.h and CoreFoundation.h headers are needed for excluding a
+** -journal file from Time Machine backups when its associated database has
+** previously been excluded by the client code.
+*/
+#if defined(__APPLE__)
+#include <CoreServices/CoreServices.h>
+#include <CoreFoundation/CoreFoundation.h>
+#endif
+
+/*
 ** The following macros mimic the standard library functions toupper(),
 ** isspace(), isalnum(), isdigit() and isxdigit(), respectively. The
 ** sqlite versions only work for ASCII characters, regardless of locale.
-- 
2.7.0

