Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0ba48a54 authored by Amith Yamasani's avatar Amith Yamasani
Browse files

Don't backup or delete the backup file, if it's in the backup path.

Change-Id: Ie77782722a271e09f8cbde7fb5393e8127d4334d
parent 1c958102
Loading
Loading
Loading
Loading
+19 −3
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ static char nameBuffer[PATH_MAX];
static struct stat statBuffer;

static char copyBuffer[8192];
static char *backupFilePath = NULL;

static uint32_t inputFileVersion;

@@ -152,6 +153,10 @@ static int wipe (const char *path)
            strcat(nameBuffer, "/");

        } else {
            // Don't delete the backup file
            if (backupFilePath && strcmp(backupFilePath, nameBuffer) == 0) {
                continue;
            }
            ret = unlink(nameBuffer);

            if (ret != 0) {
@@ -279,7 +284,7 @@ static int backup_dir(FILE* fh, const char* srcPath)
            continue;
        }

        if (fullPath == NULL) {
        if (fullPath != NULL) {
            free(fullPath);
        }
        fullPath = (char*)malloc(srcLen + strlen(de->d_name) + 2);
@@ -320,8 +325,13 @@ static int backup_dir(FILE* fh, const char* srcPath)
                goto done;
            }
        } else if (S_ISREG(statBuffer.st_mode)) {
            // Skip the backup file
            if (backupFilePath && strcmp(fullPath, backupFilePath) == 0) {
                printf("Skipping backup file %s...\n", backupFilePath);
                continue;
            } else {
                printf("Saving file %s...\n", fullPath);
            
            }
            if (write_header(fh, TYPE_FILE, fullPath, &statBuffer) == 0) {
                result = 0;
                goto done;
@@ -373,6 +383,9 @@ static int backup_data(const char* destPath)
    
    printf("Backing up /data to %s...\n", destPath);

    // The path that shouldn't be backed up
    backupFilePath = strdup(destPath);

    if (!write_int32(fh, FILE_VERSION)) goto done;
    if (!write_int32(fh, opt_backupAll)) goto done;
    if (!backup_dir(fh, "/data")) goto done;
@@ -510,6 +523,9 @@ static int restore_data(const char* srcPath)
        opt_backupAll = 0;
    }

    // The path that shouldn't be deleted
    backupFilePath = strdup(srcPath);
    
    printf("Wiping contents of /data...\n");
    if (!wipe("/data")) {
        goto done;