// Copyright 2019 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 <fs-host/file_size_recorder.h>

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

FileSizeRecorder::FileSizeRecorder() = default;
FileSizeRecorder::~FileSizeRecorder() = default;

bool FileSizeRecorder::OpenSizeFile(const char* const path) {
    if (sizes_file_)
        return false;
    sizes_file_.reset(open(path, O_CREAT|O_TRUNC|O_WRONLY, 0644));
    return bool{sizes_file_};
}

bool FileSizeRecorder::AppendSizeInformation(const char* const name, size_t size) {
  if (!sizes_file_) {
    return true;
  }

  std::lock_guard<std::mutex> lock(sizes_file_lock_);
  if (dprintf(sizes_file_.get(), "%s=%zu\n", name, size) < 0) {
    fprintf(stderr, "error: sizes file append error\n");
    return false;
  }
  return true;
}
