OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/sync/syncable/syncable.h" | 5 #include "chrome/browser/sync/syncable/syncable.h" |
6 | 6 |
7 #include "build/build_config.h" | 7 #include "build/build_config.h" |
8 | 8 |
9 #include <sys/stat.h> | 9 #include <sys/stat.h> |
| 10 #ifdef OS_LINUX |
| 11 #include <sys/time.h> |
| 12 #endif |
10 #include <sys/types.h> | 13 #include <sys/types.h> |
11 #include <time.h> | 14 #include <time.h> |
12 #ifdef OS_MACOSX | 15 #ifdef OS_MACOSX |
13 #include <CoreFoundation/CoreFoundation.h> | 16 #include <CoreFoundation/CoreFoundation.h> |
14 #elif defined(OS_LINUX) | |
15 #include <glib.h> | |
16 #elif defined(OS_WIN) | 17 #elif defined(OS_WIN) |
17 #include <shlwapi.h> // for PathMatchSpec | 18 #include <shlwapi.h> // for PathMatchSpec |
18 #endif | 19 #endif |
19 | 20 |
20 #include <algorithm> | 21 #include <algorithm> |
21 #include <functional> | 22 #include <functional> |
22 #include <iomanip> | 23 #include <iomanip> |
23 #include <iterator> | 24 #include <iterator> |
24 #include <set> | 25 #include <set> |
25 #include <string> | 26 #include <string> |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
95 const void* b) { | 96 const void* b) { |
96 #ifdef OS_WIN | 97 #ifdef OS_WIN |
97 DCHECK_EQ(0, a_bytes % 2); | 98 DCHECK_EQ(0, a_bytes % 2); |
98 DCHECK_EQ(0, b_bytes % 2); | 99 DCHECK_EQ(0, b_bytes % 2); |
99 int result = CompareString(LOCALE_INVARIANT, NORM_IGNORECASE, | 100 int result = CompareString(LOCALE_INVARIANT, NORM_IGNORECASE, |
100 static_cast<const PathChar*>(a), a_bytes / 2, | 101 static_cast<const PathChar*>(a), a_bytes / 2, |
101 static_cast<const PathChar*>(b), b_bytes / 2); | 102 static_cast<const PathChar*>(b), b_bytes / 2); |
102 CHECK(0 != result) << "Error comparing strings: " << GetLastError(); | 103 CHECK(0 != result) << "Error comparing strings: " << GetLastError(); |
103 return result - 2; // Convert to -1, 0, 1 | 104 return result - 2; // Convert to -1, 0, 1 |
104 #elif defined(OS_LINUX) | 105 #elif defined(OS_LINUX) |
105 // misnomer for Linux. These are already utf8 bit strings. | 106 int result = base::strncasecmp(reinterpret_cast<const char *>(a), |
106 gchar *case_folded_a; | 107 reinterpret_cast<const char *>(b), |
107 gchar *case_folded_b; | 108 std::min(a_bytes, b_bytes)); |
108 GError *err = NULL; | 109 if (result != 0) { |
109 case_folded_a = g_utf8_casefold(reinterpret_cast<const gchar*>(a), a_bytes); | 110 return result; |
110 CHECK(case_folded_a != NULL) << "g_utf8_casefold failed"; | 111 } else { |
111 case_folded_b = g_utf8_casefold(reinterpret_cast<const gchar*>(b), b_bytes); | 112 return a_bytes > b_bytes ? 1 : b_bytes > a_bytes ? -1 : 0; |
112 CHECK(case_folded_b != NULL) << "g_utf8_casefold failed"; | 113 } |
113 gint result = g_utf8_collate(case_folded_a, case_folded_b); | |
114 g_free(case_folded_a); | |
115 g_free(case_folded_b); | |
116 if (result < 0) return -1; | |
117 if (result > 0) return 1; | |
118 return 0; | |
119 #elif defined(OS_MACOSX) | 114 #elif defined(OS_MACOSX) |
120 CFStringRef a_str; | 115 CFStringRef a_str; |
121 CFStringRef b_str; | 116 CFStringRef b_str; |
122 a_str = CFStringCreateWithBytes(NULL, reinterpret_cast<const UInt8*>(a), | 117 a_str = CFStringCreateWithBytes(NULL, reinterpret_cast<const UInt8*>(a), |
123 a_bytes, kCFStringEncodingUTF8, FALSE); | 118 a_bytes, kCFStringEncodingUTF8, FALSE); |
124 b_str = CFStringCreateWithBytes(NULL, reinterpret_cast<const UInt8*>(b), | 119 b_str = CFStringCreateWithBytes(NULL, reinterpret_cast<const UInt8*>(b), |
125 b_bytes, kCFStringEncodingUTF8, FALSE); | 120 b_bytes, kCFStringEncodingUTF8, FALSE); |
126 CFComparisonResult res; | 121 CFComparisonResult res; |
127 res = CFStringCompare(a_str, b_str, kCFCompareCaseInsensitive); | 122 res = CFStringCompare(a_str, b_str, kCFCompareCaseInsensitive); |
128 CFRelease(a_str); | 123 CFRelease(a_str); |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
203 ids_index(new Directory::IdsIndex), | 198 ids_index(new Directory::IdsIndex), |
204 parent_id_and_names_index(new Directory::ParentIdAndNamesIndex), | 199 parent_id_and_names_index(new Directory::ParentIdAndNamesIndex), |
205 extended_attributes(new ExtendedAttributes), | 200 extended_attributes(new ExtendedAttributes), |
206 unapplied_update_metahandles(new MetahandleSet), | 201 unapplied_update_metahandles(new MetahandleSet), |
207 unsynced_metahandles(new MetahandleSet), | 202 unsynced_metahandles(new MetahandleSet), |
208 channel(new Directory::Channel(syncable::DIRECTORY_DESTROYED)), | 203 channel(new Directory::Channel(syncable::DIRECTORY_DESTROYED)), |
209 changes_channel(new Directory::ChangesChannel(kShutdownChangesEvent)), | 204 changes_channel(new Directory::ChangesChannel(kShutdownChangesEvent)), |
210 last_sync_timestamp_(info.kernel_info.last_sync_timestamp), | 205 last_sync_timestamp_(info.kernel_info.last_sync_timestamp), |
211 initial_sync_ended_(info.kernel_info.initial_sync_ended), | 206 initial_sync_ended_(info.kernel_info.initial_sync_ended), |
212 store_birthday_(info.kernel_info.store_birthday), | 207 store_birthday_(info.kernel_info.store_birthday), |
213 next_id(info.kernel_info.next_id), | |
214 cache_guid_(info.cache_guid), | 208 cache_guid_(info.cache_guid), |
215 next_metahandle(info.max_metahandle + 1) { | 209 next_metahandle(info.max_metahandle + 1), |
| 210 next_id(info.kernel_info.next_id) { |
216 info_status_ = Directory::KERNEL_SHARE_INFO_VALID; | 211 info_status_ = Directory::KERNEL_SHARE_INFO_VALID; |
217 CHECK(0 == pthread_mutex_init(&mutex, NULL)); | 212 CHECK(0 == pthread_mutex_init(&mutex, NULL)); |
218 CHECK(0 == pthread_key_create(&thread_node_key, &DestroyThreadNodeKey)); | 213 CHECK(0 == pthread_key_create(&thread_node_key, &DestroyThreadNodeKey)); |
219 } | 214 } |
220 | 215 |
221 inline void DeleteEntry(EntryKernel* kernel) { | 216 inline void DeleteEntry(EntryKernel* kernel) { |
222 delete kernel; | 217 delete kernel; |
223 } | 218 } |
224 | 219 |
225 void Directory::Kernel::AddRef() { | 220 void Directory::Kernel::AddRef() { |
(...skipping 578 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
804 MetahandlesIndex::iterator found = | 799 MetahandlesIndex::iterator found = |
805 kernel_->metahandles_index->find(&kernel_->needle); | 800 kernel_->metahandles_index->find(&kernel_->needle); |
806 EntryKernel* entry = (found == kernel_->metahandles_index->end() ? | 801 EntryKernel* entry = (found == kernel_->metahandles_index->end() ? |
807 NULL : *found); | 802 NULL : *found); |
808 if (entry && SafeToPurgeFromMemory(entry)) { | 803 if (entry && SafeToPurgeFromMemory(entry)) { |
809 // We now drop deleted metahandles that are up to date on both the client | 804 // We now drop deleted metahandles that are up to date on both the client |
810 // and the server. | 805 // and the server. |
811 size_t num_erased = 0; | 806 size_t num_erased = 0; |
812 kernel_->flushed_metahandles_.Push(entry->ref(META_HANDLE)); | 807 kernel_->flushed_metahandles_.Push(entry->ref(META_HANDLE)); |
813 num_erased = kernel_->ids_index->erase(entry); | 808 num_erased = kernel_->ids_index->erase(entry); |
814 DCHECK_EQ(1, num_erased); | 809 DCHECK(1 == num_erased); |
815 num_erased = kernel_->metahandles_index->erase(entry); | 810 num_erased = kernel_->metahandles_index->erase(entry); |
816 DCHECK_EQ(1, num_erased); | 811 DCHECK(1 == num_erased); |
817 delete entry; | 812 delete entry; |
818 } | 813 } |
819 } | 814 } |
820 | 815 |
821 ExtendedAttributes::const_iterator i = snapshot.dirty_xattrs.begin(); | 816 ExtendedAttributes::const_iterator i = snapshot.dirty_xattrs.begin(); |
822 while (i != snapshot.dirty_xattrs.end()) { | 817 while (i != snapshot.dirty_xattrs.end()) { |
823 ExtendedAttributeKey key(i->first.metahandle, i->first.key); | 818 ExtendedAttributeKey key(i->first.metahandle, i->first.key); |
824 ExtendedAttributes::iterator found = | 819 ExtendedAttributes::iterator found = |
825 kernel_->extended_attributes->find(key); | 820 kernel_->extended_attributes->find(key); |
826 if (found == kernel_->extended_attributes->end() || | 821 if (found == kernel_->extended_attributes->end() || |
(...skipping 1168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1995 return dump; | 1990 return dump; |
1996 } | 1991 } |
1997 | 1992 |
1998 std::ostream& operator<<(std::ostream& s, const syncable::ThreadNode& node) { | 1993 std::ostream& operator<<(std::ostream& s, const syncable::ThreadNode& node) { |
1999 s << "thread id: " << std::hex << node.id << "\n" | 1994 s << "thread id: " << std::hex << node.id << "\n" |
2000 << "file: " << node.file << "\n" | 1995 << "file: " << node.file << "\n" |
2001 << "line: " << std::dec << node.line << "\n" | 1996 << "line: " << std::dec << node.line << "\n" |
2002 << "wait_started: " << node.wait_started.ToInternalValue(); | 1997 << "wait_started: " << node.wait_started.ToInternalValue(); |
2003 return s; | 1998 return s; |
2004 } | 1999 } |
OLD | NEW |