// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include <stdlib.h>
#include <stdio.h>

#include "kernel.h"
#include <ftl_private.h>
#include "fsprivate.h"

#include <lib/backtrace-request/backtrace-request.h>

SEM FileSysSem; // Global File System Semaphore
static int g_fs_error;  // File system error code (FsError enum).

// Called when a file system error has occurred.
int FsError(int err_code) {
    printf("FsError: %d. What follows is NOT a crash:\n", err_code);
    backtrace_request();
    return -1;
}

// Called when a file system error has occurred.
int FsError2(int fs_err_code, int errno_code) {
    SetFsErrCode(fs_err_code);
    return -1;
}

int GetFsErrCode() {
    return g_fs_error;
}

void SetFsErrCode(int error) {
    g_fs_error = error;
}

int FtlInit(void) {
    FileSysSem = semCreate("fsys sem", 1, OS_FIFO);
    if (FileSysSem == NULL)
        return -1;

    return 0;
}
