memento_updater: Move all non-script source to src folder.
Rewrite Makefile so it goes to src/ for everything.
Note the split_write.cc already has a copy inside src/, so this commit only
deletes the original one.
BUG=chrome-os-partner:21938
TEST=emerge-link memento_softwareupdate
CQ-DEPEND=CL:178390
Change-Id: I569759d7eba413653b405c06ad3ba8bec23f030f
Reviewed-on: https://chromium-review.googlesource.com/178400
Tested-by: Hung-Te Lin <hungte@chromium.org>
Reviewed-by: Rong Chang <rongchang@chromium.org>
Commit-Queue: Hung-Te Lin <hungte@chromium.org>
diff --git a/Makefile b/Makefile
index 73a6b3a..7467d02 100644
--- a/Makefile
+++ b/Makefile
@@ -4,16 +4,10 @@
SRC ?= src
-all: split_write src_dir
-
-# TODO(hungte) Remove this by src/split_write when we've fixed ebuild files.
-split_write: split_write.cc
- $(CXX) $(CCFLAGS) -o $@ $<
-
-src_dir:
+all:
$(MAKE) -C $(SRC)
%:
$(MAKE) -C $(SRC) $@
-.PHONY: all src_dir
+.PHONY: all
diff --git a/split_write.cc b/split_write.cc
deleted file mode 100644
index 3a00995..0000000
--- a/split_write.cc
+++ /dev/null
@@ -1,138 +0,0 @@
-// Copyright (c) 2010 The Chromium OS 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 <sys/stat.h>
-#include <sys/types.h>
-
-#include <endian.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-#include <algorithm>
-
-namespace {
-
-class ScopedFileDescriptorCloser {
- public:
- ScopedFileDescriptorCloser(int fd) : fd_(fd) {}
- ~ScopedFileDescriptorCloser() {
- close(fd_);
- }
- private:
- const int fd_;
-};
-
-const int kBufSize = 1024 * 1024 * 4; // 4 MiB
-
-// This program takes two files as args. It will open both and write the
-// first part of stdin into the first file, the second part into the second
-// file. The first 8 bytes contain the unsigned big-endian count of bytes
-// that should go to the first file. Following bytes go to the second file.
-
-// Writes all bytes to fd. Exits on error.
-void write_all(int fd, const void *buf, size_t count) {
- const char* c_buf = static_cast<const char*>(buf);
- size_t written = 0;
- while (written < count) {
- ssize_t rc = write(fd, c_buf + written, count - written);
- if (rc < 0) {
- perror("write");
- exit(1);
- }
- written += static_cast<size_t>(rc);
- }
-}
-
-// Returns bytes read, which may be short on EOF. Exits on error.
-size_t read_all(int fd, void* buf, size_t count) {
- char* c_buf = static_cast<char*>(buf);
- size_t bytes_read = 0;
- while (bytes_read < count) {
- ssize_t rc = read(fd, c_buf + bytes_read, count - bytes_read);
- if (rc == 0) {
- break;
- }
- if (rc < 0) {
- perror("read");
- exit(1);
- }
- bytes_read += static_cast<size_t>(rc);
- }
- return bytes_read;
-}
-
-void usage(char* argv0) {
- fprintf(stderr, "Usage: %s first_file second_file\n", argv0);
- exit(1);
-}
-
-// Returns valid fd or exits program.
-int open_file(const char* path) {
- int fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, 0666);
- if (fd < 0) {
- perror("open");
- fprintf(stderr, "failed to open %s\n", path);
- exit(1);
- }
- return fd;
-}
-
-typedef long long int64;
-// Compile assert sizeof(int64) == 8:
-char int64_8_bytes_long[(sizeof(int64) == 8) - 1];
-
-} // namespace {}
-
-int main(int argc, char** argv) {
- if (argc != 3) {
- usage(argv[0]);
- }
- const int fd1 = open_file(argv[1]);
- ScopedFileDescriptorCloser fd1_closer(fd1);
- const int fd2 = open_file(argv[2]);
- ScopedFileDescriptorCloser fd2_closer(fd2);
- const int fd_in = 0; // stdin
- char* const buf = static_cast<char*>(malloc(kBufSize));
- if (buf == NULL) {
- fprintf(stderr, "malloc on buffer failed.\n");
- return 1;
- }
- int64 first_file_size = 0;
- size_t bytes_read =
- read_all(fd_in, &first_file_size, sizeof(first_file_size));
- if (bytes_read < sizeof(first_file_size)) {
- fprintf(stderr, "short read on first file size.\n");
- return 1;
- }
- first_file_size = be64toh(first_file_size);
- int64 first_bytes_written = 0;
- while (first_bytes_written < first_file_size) {
- size_t chunk_size = std::min(first_file_size - first_bytes_written,
- static_cast<int64>(kBufSize));
- chunk_size = read_all(fd_in, buf, chunk_size);
- if (chunk_size == 0) {
- // All data went to first partition, none left for second.
- // This is okay only if the first file size is exactl how much we've
- // written thus far
- if (first_file_size == first_bytes_written) {
- return 0;
- } else {
- fprintf(stderr, "file appears truncated.\n");
- return 1;
- }
- }
- write_all(fd1, buf, chunk_size);
- first_bytes_written += chunk_size;
- }
- // Do the rest on the second file
- for (;;) {
- size_t chunk_size = read_all(fd_in, buf, kBufSize);
- if (chunk_size == 0)
- break;
- write_all(fd2, buf, chunk_size);
- }
- return 0;
-}