diff --git a/tests/tests/security/src/android/security/cts/SqliteJournalLeakTest.java b/tests/tests/security/src/android/security/cts/SqliteJournalLeakTest.java
index f89cb4c..109aa21 100755
--- a/tests/tests/security/src/android/security/cts/SqliteJournalLeakTest.java
+++ b/tests/tests/security/src/android/security/cts/SqliteJournalLeakTest.java
@@ -1,115 +1,115 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.security.cts;
-
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Environment;
-import android.test.AndroidTestCase;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.FileReader;
-import java.io.InputStreamReader;
-import java.io.IOException;
-
-
-public class SqliteJournalLeakTest extends AndroidTestCase {
-
-    private static final int REPEAT = 5;
-
-    private static final String[] DATABASES = {
-        "/com.android.bluetooth/databases/btopp.db",
-        "/com.android.browser/app_appcache/ApplicationCache.db",
-        "/com.android.browser/app_databases/Databases.db",
-        "/com.android.browser/app_geolocation/CachedGeoposition.db",
-        "/com.android.browser/app_geolocation/GeolocationPermissions.db",
-        "/com.android.browser/app_icons/WebpageIcons.db",
-        "/com.android.browser/databases/browser.db",
-        "/com.android.browser/databases/launcher.db",
-        "/com.android.browser/databases/webview.db",
-        "/com.android.browser/databases/webviewCache.db",
-        "/com.android.email/databases/EmailProvider.db",
-        "/com.android.email/databases/EmailProviderBody.db",
-        "/com.android.email/databases/webview.db",
-        "/com.android.email/databases/webviewCache.db",
-        "/com.android.providers.calendar/databases/calendar.db",
-        "/com.android.providers.contacts/databases/contacts2.db",
-        "/com.android.providers.downloads/databases/downloads.db",
-        "/com.android.providers.drm/databases/drm.db",
-        "/com.android.providers.media/databases/internal.db",
-        "/com.android.providers.settings/databases/settings.db",
-        "/com.android.providers.tasks/databases/tasks.db",
-        "/com.android.providers.telephony/optable.db",
-        "/com.android.providers.telephony/databases/mmssms.db",
-        "/com.android.providers.telephony/databases/nwk_info.db",
-        "/com.android.providers.telephony/databases/telephony.db",
-        "/com.android.providers.telephony/databases/tether_dun.db",
-        "/com.android.providers.userdictionary/databases/user_dict.db",
-        "/com.android.settings/databases/webview.db",
-        "/com.android.settings/databases/webviewCache.db",
-        "/com.android.vending/databases/billing4.db",
-        "/com.android.vending/databases/market_assets.db",
-        "/com.android.vending/databases/suggestions.db",
-        "/com.android.vending/databases/webview.db",
-        "/com.android.vending/databases/webviewCache.db"
-    };
-
-    /**
-     * This method triggers activities that should cause database writes.
-     * The goal of this is to try to make potentially short-lived journal
-     * files show up.
-     */
-    private void doActivity() {
-        Intent webIntent = new Intent(Intent.ACTION_VIEW);
-        webIntent.setData(Uri.parse("http:///localhost"));
-        webIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-        getContext().startActivity(webIntent);
-        Intent dictIntent = new Intent("android.settings.USER_DICTIONARY_SETTINGS");
-        dictIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-        getContext().startActivity(dictIntent);
-    }
-
-    private void checkDatabases(String suffix) {
-        String msg = " is world readable. Please set its permissions to 600"
-            + " by setting -DSQLITE_DEFAULT_FILE_PERMISSIONS=0600 in external/sqlite/dist/"
-            + "Android.mk; see CVE-2011-3901.";
-        String base = Environment.getDataDirectory().getAbsolutePath();
-        for(int i=REPEAT; i > 0; i--) {
-            doActivity();
-            for (String name : DATABASES) {
-                name = base + "/data" + name + suffix;
-                File f = new File(name);
-                assertFalse(name + msg, f.canRead());
-            }
-        }
-    }
-
-    public void testJournal() {
-        checkDatabases("-journal");
-    }
-
-    public void testWal() {
-        checkDatabases("-wal");
-    }
-
-    public void testShm() {
-        checkDatabases("-shm");
-    }
-}
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.security.cts;
+
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Environment;
+import android.test.AndroidTestCase;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.InputStreamReader;
+import java.io.IOException;
+
+
+public class SqliteJournalLeakTest extends AndroidTestCase {
+
+    private static final int REPEAT = 5;
+
+    private static final String[] DATABASES = {
+        "/com.android.bluetooth/databases/btopp.db",
+        "/com.android.browser/app_appcache/ApplicationCache.db",
+        "/com.android.browser/app_databases/Databases.db",
+        "/com.android.browser/app_geolocation/CachedGeoposition.db",
+        "/com.android.browser/app_geolocation/GeolocationPermissions.db",
+        "/com.android.browser/app_icons/WebpageIcons.db",
+        "/com.android.browser/databases/browser.db",
+        "/com.android.browser/databases/launcher.db",
+        "/com.android.browser/databases/webview.db",
+        "/com.android.browser/databases/webviewCache.db",
+        "/com.android.email/databases/EmailProvider.db",
+        "/com.android.email/databases/EmailProviderBody.db",
+        "/com.android.email/databases/webview.db",
+        "/com.android.email/databases/webviewCache.db",
+        "/com.android.providers.calendar/databases/calendar.db",
+        "/com.android.providers.contacts/databases/contacts2.db",
+        "/com.android.providers.downloads/databases/downloads.db",
+        "/com.android.providers.drm/databases/drm.db",
+        "/com.android.providers.media/databases/internal.db",
+        "/com.android.providers.settings/databases/settings.db",
+        "/com.android.providers.tasks/databases/tasks.db",
+        "/com.android.providers.telephony/optable.db",
+        "/com.android.providers.telephony/databases/mmssms.db",
+        "/com.android.providers.telephony/databases/nwk_info.db",
+        "/com.android.providers.telephony/databases/telephony.db",
+        "/com.android.providers.telephony/databases/tether_dun.db",
+        "/com.android.providers.userdictionary/databases/user_dict.db",
+        "/com.android.settings/databases/webview.db",
+        "/com.android.settings/databases/webviewCache.db",
+        "/com.android.vending/databases/billing4.db",
+        "/com.android.vending/databases/market_assets.db",
+        "/com.android.vending/databases/suggestions.db",
+        "/com.android.vending/databases/webview.db",
+        "/com.android.vending/databases/webviewCache.db"
+    };
+
+    /**
+     * This method triggers activities that should cause database writes.
+     * The goal of this is to try to make potentially short-lived journal
+     * files show up.
+     */
+    private void doActivity() {
+        Intent webIntent = new Intent(Intent.ACTION_VIEW);
+        webIntent.setData(Uri.parse("http:///localhost"));
+        webIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+        getContext().startActivity(webIntent);
+        Intent dictIntent = new Intent("android.settings.USER_DICTIONARY_SETTINGS");
+        dictIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+        getContext().startActivity(dictIntent);
+    }
+
+    private void checkDatabases(String suffix) {
+        String msg = " is world readable. Please set its permissions to 600"
+            + " by setting -DSQLITE_DEFAULT_FILE_PERMISSIONS=0600 in external/sqlite/dist/"
+            + "Android.mk; see CVE-2011-3901.";
+        String base = Environment.getDataDirectory().getAbsolutePath();
+        for(int i=REPEAT; i > 0; i--) {
+            doActivity();
+            for (String name : DATABASES) {
+                name = base + "/data" + name + suffix;
+                File f = new File(name);
+                assertFalse(name + msg, f.canRead());
+            }
+        }
+    }
+
+    public void testJournal() {
+        checkDatabases("-journal");
+    }
+
+    public void testWal() {
+        checkDatabases("-wal");
+    }
+
+    public void testShm() {
+        checkDatabases("-shm");
+    }
+}
