.class public Landroidx/core/util/AtomicFile; .super Ljava/lang/Object; .source "AtomicFile.java" # instance fields .field private final mBackupName:Ljava/io/File; .field private final mBaseName:Ljava/io/File; # direct methods .method public constructor (Ljava/io/File;)V .registers 4 .line 54 invoke-direct {p0}, Ljava/lang/Object;->()V .line 55 iput-object p1, p0, Landroidx/core/util/AtomicFile;->mBaseName:Ljava/io/File; .line 56 new-instance v0, Ljava/io/File; new-instance v1, Ljava/lang/StringBuilder; invoke-direct {v1}, Ljava/lang/StringBuilder;->()V invoke-virtual {p1}, Ljava/io/File;->getPath()Ljava/lang/String; move-result-object p1 invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object p1 const-string v1, ".bak" invoke-virtual {p1, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object p1 invoke-virtual {p1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object p1 invoke-direct {v0, p1}, Ljava/io/File;->(Ljava/lang/String;)V iput-object v0, p0, Landroidx/core/util/AtomicFile;->mBackupName:Ljava/io/File; return-void .end method .method private static sync(Ljava/io/FileOutputStream;)Z .registers 1 .line 212 :try_start_0 invoke-virtual {p0}, Ljava/io/FileOutputStream;->getFD()Ljava/io/FileDescriptor; move-result-object p0 invoke-virtual {p0}, Ljava/io/FileDescriptor;->sync()V :try_end_7 .catch Ljava/io/IOException; {:try_start_0 .. :try_end_7} :catch_9 const/4 p0, 0x1 return p0 :catch_9 const/4 p0, 0x0 return p0 .end method # virtual methods .method public delete()V .registers 2 .line 72 iget-object v0, p0, Landroidx/core/util/AtomicFile;->mBaseName:Ljava/io/File; invoke-virtual {v0}, Ljava/io/File;->delete()Z .line 73 iget-object v0, p0, Landroidx/core/util/AtomicFile;->mBackupName:Ljava/io/File; invoke-virtual {v0}, Ljava/io/File;->delete()Z return-void .end method .method public failWrite(Ljava/io/FileOutputStream;)V .registers 4 if-eqz p1, :cond_1d .line 145 invoke-static {p1}, Landroidx/core/util/AtomicFile;->sync(Ljava/io/FileOutputStream;)Z .line 147 :try_start_5 invoke-virtual {p1}, Ljava/io/FileOutputStream;->close()V .line 148 iget-object p1, p0, Landroidx/core/util/AtomicFile;->mBaseName:Ljava/io/File; invoke-virtual {p1}, Ljava/io/File;->delete()Z .line 149 iget-object p1, p0, Landroidx/core/util/AtomicFile;->mBackupName:Ljava/io/File; iget-object v0, p0, Landroidx/core/util/AtomicFile;->mBaseName:Ljava/io/File; invoke-virtual {p1, v0}, Ljava/io/File;->renameTo(Ljava/io/File;)Z :try_end_14 .catch Ljava/io/IOException; {:try_start_5 .. :try_end_14} :catch_15 goto :goto_1d :catch_15 move-exception p1 .line 151 const-string v0, "AtomicFile" const-string v1, "failWrite: Got exception:" invoke-static {v0, v1, p1}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I :cond_1d :goto_1d return-void .end method .method public finishWrite(Ljava/io/FileOutputStream;)V .registers 4 if-eqz p1, :cond_16 .line 128 invoke-static {p1}, Landroidx/core/util/AtomicFile;->sync(Ljava/io/FileOutputStream;)Z .line 130 :try_start_5 invoke-virtual {p1}, Ljava/io/FileOutputStream;->close()V .line 131 iget-object p1, p0, Landroidx/core/util/AtomicFile;->mBackupName:Ljava/io/File; invoke-virtual {p1}, Ljava/io/File;->delete()Z :try_end_d .catch Ljava/io/IOException; {:try_start_5 .. :try_end_d} :catch_e goto :goto_16 :catch_e move-exception p1 .line 133 const-string v0, "AtomicFile" const-string v1, "finishWrite: Got exception:" invoke-static {v0, v1, p1}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I :cond_16 :goto_16 return-void .end method .method public getBaseFile()Ljava/io/File; .registers 2 .line 65 iget-object v0, p0, Landroidx/core/util/AtomicFile;->mBaseName:Ljava/io/File; return-object v0 .end method .method public openRead()Ljava/io/FileInputStream; .registers 3 .annotation system Ldalvik/annotation/Throws; value = { Ljava/io/FileNotFoundException; } .end annotation .line 170 iget-object v0, p0, Landroidx/core/util/AtomicFile;->mBackupName:Ljava/io/File; invoke-virtual {v0}, Ljava/io/File;->exists()Z move-result v0 if-eqz v0, :cond_14 .line 171 iget-object v0, p0, Landroidx/core/util/AtomicFile;->mBaseName:Ljava/io/File; invoke-virtual {v0}, Ljava/io/File;->delete()Z .line 172 iget-object v0, p0, Landroidx/core/util/AtomicFile;->mBackupName:Ljava/io/File; iget-object v1, p0, Landroidx/core/util/AtomicFile;->mBaseName:Ljava/io/File; invoke-virtual {v0, v1}, Ljava/io/File;->renameTo(Ljava/io/File;)Z .line 174 :cond_14 new-instance v0, Ljava/io/FileInputStream; iget-object v1, p0, Landroidx/core/util/AtomicFile;->mBaseName:Ljava/io/File; invoke-direct {v0, v1}, Ljava/io/FileInputStream;->(Ljava/io/File;)V return-object v0 .end method .method public readFully()[B .registers 7 .annotation system Ldalvik/annotation/Throws; value = { Ljava/io/IOException; } .end annotation .line 183 invoke-virtual {p0}, Landroidx/core/util/AtomicFile;->openRead()Ljava/io/FileInputStream; move-result-object v0 .line 186 :try_start_4 invoke-virtual {v0}, Ljava/io/FileInputStream;->available()I move-result v1 .line 187 new-array v1, v1, [B const/4 v2, 0x0 move v3, v2 .line 189 :cond_c :goto_c array-length v4, v1 sub-int/2addr v4, v3 invoke-virtual {v0, v1, v3, v4}, Ljava/io/FileInputStream;->read([BII)I move-result v4 :try_end_12 .catchall {:try_start_4 .. :try_end_12} :catchall_29 if-gtz v4, :cond_18 .line 206 invoke-virtual {v0}, Ljava/io/FileInputStream;->close()V return-object v1 :cond_18 add-int/2addr v3, v4 .line 198 :try_start_19 invoke-virtual {v0}, Ljava/io/FileInputStream;->available()I move-result v4 .line 199 array-length v5, v1 sub-int/2addr v5, v3 if-le v4, v5, :cond_c add-int/2addr v4, v3 .line 200 new-array v4, v4, [B .line 201 invoke-static {v1, v2, v4, v2, v3}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V :try_end_27 .catchall {:try_start_19 .. :try_end_27} :catchall_29 move-object v1, v4 goto :goto_c :catchall_29 move-exception v1 .line 206 invoke-virtual {v0}, Ljava/io/FileInputStream;->close()V throw v1 .end method .method public startWrite()Ljava/io/FileOutputStream; .registers 4 .annotation system Ldalvik/annotation/Throws; value = { Ljava/io/IOException; } .end annotation .line 93 iget-object v0, p0, Landroidx/core/util/AtomicFile;->mBaseName:Ljava/io/File; invoke-virtual {v0}, Ljava/io/File;->exists()Z move-result v0 if-eqz v0, :cond_42 .line 94 iget-object v0, p0, Landroidx/core/util/AtomicFile;->mBackupName:Ljava/io/File; invoke-virtual {v0}, Ljava/io/File;->exists()Z move-result v0 if-nez v0, :cond_3d .line 95 iget-object v0, p0, Landroidx/core/util/AtomicFile;->mBaseName:Ljava/io/File; iget-object v1, p0, Landroidx/core/util/AtomicFile;->mBackupName:Ljava/io/File; invoke-virtual {v0, v1}, Ljava/io/File;->renameTo(Ljava/io/File;)Z move-result v0 if-nez v0, :cond_42 .line 96 new-instance v0, Ljava/lang/StringBuilder; const-string v1, "Couldn\'t rename file " invoke-direct {v0, v1}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V iget-object v1, p0, Landroidx/core/util/AtomicFile;->mBaseName:Ljava/io/File; invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; move-result-object v0 const-string v1, " to backup file " invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v0 iget-object v1, p0, Landroidx/core/util/AtomicFile;->mBackupName:Ljava/io/File; invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; move-result-object v0 invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v0 const-string v1, "AtomicFile" invoke-static {v1, v0}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I goto :goto_42 .line 100 :cond_3d iget-object v0, p0, Landroidx/core/util/AtomicFile;->mBaseName:Ljava/io/File; invoke-virtual {v0}, Ljava/io/File;->delete()Z .line 105 :cond_42 :goto_42 :try_start_42 new-instance v0, Ljava/io/FileOutputStream; iget-object v1, p0, Landroidx/core/util/AtomicFile;->mBaseName:Ljava/io/File; invoke-direct {v0, v1}, Ljava/io/FileOutputStream;->(Ljava/io/File;)V :try_end_49 .catch Ljava/io/FileNotFoundException; {:try_start_42 .. :try_end_49} :catch_4a goto :goto_5d .line 107 :catch_4a iget-object v0, p0, Landroidx/core/util/AtomicFile;->mBaseName:Ljava/io/File; invoke-virtual {v0}, Ljava/io/File;->getParentFile()Ljava/io/File; move-result-object v0 .line 108 invoke-virtual {v0}, Ljava/io/File;->mkdirs()Z move-result v0 if-eqz v0, :cond_75 .line 112 :try_start_56 new-instance v0, Ljava/io/FileOutputStream; iget-object v1, p0, Landroidx/core/util/AtomicFile;->mBaseName:Ljava/io/File; invoke-direct {v0, v1}, Ljava/io/FileOutputStream;->(Ljava/io/File;)V :try_end_5d .catch Ljava/io/FileNotFoundException; {:try_start_56 .. :try_end_5d} :catch_5e :goto_5d return-object v0 .line 114 :catch_5e new-instance v0, Ljava/io/IOException; new-instance v1, Ljava/lang/StringBuilder; const-string v2, "Couldn\'t create " invoke-direct {v1, v2}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V iget-object v2, p0, Landroidx/core/util/AtomicFile;->mBaseName:Ljava/io/File; invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; move-result-object v1 invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v1 invoke-direct {v0, v1}, Ljava/io/IOException;->(Ljava/lang/String;)V throw v0 .line 109 :cond_75 new-instance v0, Ljava/io/IOException; new-instance v1, Ljava/lang/StringBuilder; const-string v2, "Couldn\'t create directory " invoke-direct {v1, v2}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V iget-object v2, p0, Landroidx/core/util/AtomicFile;->mBaseName:Ljava/io/File; invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; move-result-object v1 invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v1 invoke-direct {v0, v1}, Ljava/io/IOException;->(Ljava/lang/String;)V throw v0 .end method