Search in sources :

Example 46 with StructStat

use of android.system.StructStat in project android_frameworks_base by crdroidandroid.

the class BackupAgent method fullBackupFileTree.

/**
     * Scan the dir tree (if it actually exists) and process each entry we find.  If the
     * 'excludes' parameters are non-null, they are consulted each time a new file system entity
     * is visited to see whether that entity (and its subtree, if appropriate) should be
     * omitted from the backup process.
     *
     * @param systemExcludes An optional list of excludes.
     * @hide
     */
protected final void fullBackupFileTree(String packageName, String domain, String startingPath, ArraySet<String> manifestExcludes, ArraySet<String> systemExcludes, FullBackupDataOutput output) {
    // Pull out the domain and set it aside to use when making the tarball.
    String domainPath = FullBackup.getBackupScheme(this).tokenToDirectoryPath(domain);
    if (domainPath == null) {
        if (startingPath == null) {
            return;
        } else {
            domainPath = startingPath;
        }
    }
    File rootFile = new File(startingPath);
    if (rootFile.exists()) {
        LinkedList<File> scanQueue = new LinkedList<File>();
        scanQueue.add(rootFile);
        while (scanQueue.size() > 0) {
            File file = scanQueue.remove(0);
            String filePath;
            try {
                // Ignore things that aren't "real" files or dirs
                StructStat stat = Os.lstat(file.getPath());
                if (!OsConstants.S_ISREG(stat.st_mode) && !OsConstants.S_ISDIR(stat.st_mode)) {
                    if (DEBUG)
                        Log.i(TAG, "Not a file/dir (skipping)!: " + file);
                    continue;
                }
                // For all other verification, look at the canonicalized path
                filePath = file.getCanonicalPath();
                // prune this subtree?
                if (manifestExcludes != null && manifestExcludes.contains(filePath)) {
                    continue;
                }
                if (systemExcludes != null && systemExcludes.contains(filePath)) {
                    continue;
                }
                // If it's a directory, enqueue its contents for scanning.
                if (OsConstants.S_ISDIR(stat.st_mode)) {
                    File[] contents = file.listFiles();
                    if (contents != null) {
                        for (File entry : contents) {
                            scanQueue.add(0, entry);
                        }
                    }
                }
            } catch (IOException e) {
                if (DEBUG)
                    Log.w(TAG, "Error canonicalizing path of " + file);
                if (Log.isLoggable(FullBackup.TAG_XML_PARSER, Log.VERBOSE)) {
                    Log.v(FullBackup.TAG_XML_PARSER, "Error canonicalizing path of " + file);
                }
                continue;
            } catch (ErrnoException e) {
                if (DEBUG)
                    Log.w(TAG, "Error scanning file " + file + " : " + e);
                if (Log.isLoggable(FullBackup.TAG_XML_PARSER, Log.VERBOSE)) {
                    Log.v(FullBackup.TAG_XML_PARSER, "Error scanning file " + file + " : " + e);
                }
                continue;
            }
            // Finally, back this file up (or measure it) before proceeding
            FullBackup.backupToTar(packageName, domain, null, domainPath, filePath, output);
        }
    }
}
Also used : StructStat(android.system.StructStat) ErrnoException(android.system.ErrnoException) IOException(java.io.IOException) File(java.io.File) LinkedList(java.util.LinkedList)

Aggregations

StructStat (android.system.StructStat)46 ErrnoException (android.system.ErrnoException)45 File (java.io.File)21 IOException (java.io.IOException)21 FileDescriptor (java.io.FileDescriptor)11 FileOutputStream (java.io.FileOutputStream)10 XmlPullParserException (org.xmlpull.v1.XmlPullParserException)10 ParcelFileDescriptor (android.os.ParcelFileDescriptor)6 BackupDataInput (android.app.backup.BackupDataInput)5 FileBridge (android.os.FileBridge)5 BufferedInputStream (java.io.BufferedInputStream)5 FileInputStream (java.io.FileInputStream)5 HashMap (java.util.HashMap)5 LinkedList (java.util.LinkedList)5 Map (java.util.Map)5 WeakHashMap (java.util.WeakHashMap)5 TargetApi (android.annotation.TargetApi)1 DownloadableFile (eu.siacs.conversations.entities.DownloadableFile)1 FileWriterException (eu.siacs.conversations.utils.FileWriterException)1 FileNotFoundException (java.io.FileNotFoundException)1