summaryrefslogtreecommitdiff
path: root/host/lib21/host_misc.c
diff options
context:
space:
mode:
Diffstat (limited to 'host/lib21/host_misc.c')
-rw-r--r--host/lib21/host_misc.c94
1 files changed, 94 insertions, 0 deletions
diff --git a/host/lib21/host_misc.c b/host/lib21/host_misc.c
new file mode 100644
index 00000000..a78a7132
--- /dev/null
+++ b/host/lib21/host_misc.c
@@ -0,0 +1,94 @@
+/* Copyright (c) 2014 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.
+ *
+ * Host functions for verified boot.
+ */
+
+#include <stdio.h>
+#include <unistd.h>
+
+#include "2sysincludes.h"
+#include "2common.h"
+#include "2sha.h"
+#include "host_common.h"
+
+int vb2_read_file(const char *filename, uint8_t **data_ptr, uint32_t *size_ptr)
+{
+ FILE *f;
+ uint8_t *buf;
+ long size;
+
+ *data_ptr = NULL;
+ *size_ptr = 0;
+
+ f = fopen(filename, "rb");
+ if (!f) {
+ VB2_DEBUG("Unable to open file %s\n", filename);
+ return VB2_ERROR_READ_FILE_OPEN;
+ }
+
+ fseek(f, 0, SEEK_END);
+ size = ftell(f);
+ rewind(f);
+
+ if (size < 0 || size > UINT32_MAX) {
+ fclose(f);
+ return VB2_ERROR_READ_FILE_SIZE;
+ }
+
+ buf = malloc(size);
+ if (!buf) {
+ fclose(f);
+ return VB2_ERROR_READ_FILE_ALLOC;
+ }
+
+ if(1 != fread(buf, size, 1, f)) {
+ VB2_DEBUG("Unable to read file %s\n", filename);
+ fclose(f);
+ free(buf);
+ return VB2_ERROR_READ_FILE_DATA;
+ }
+
+ fclose(f);
+
+ *data_ptr = buf;
+ *size_ptr = size;
+ return VB2_SUCCESS;
+}
+
+int vb2_write_file(const char *filename, const void *buf, uint32_t size)
+{
+ FILE *f = fopen(filename, "wb");
+
+ if (!f) {
+ VB2_DEBUG("Unable to open file %s\n", filename);
+ return VB2_ERROR_WRITE_FILE_OPEN;
+ }
+
+ if (1 != fwrite(buf, size, 1, f)) {
+ VB2_DEBUG("Unable to write to file %s\n", filename);
+ fclose(f);
+ unlink(filename); /* Delete any partial file */
+ return VB2_ERROR_WRITE_FILE_DATA;
+ }
+
+ fclose(f);
+ return VB2_SUCCESS;
+}
+
+int vb2_write_object(const char *filename, const void *buf)
+{
+ const struct vb2_struct_common *cptr = buf;
+
+ return vb2_write_file(filename, buf, cptr->total_size);
+}
+
+uint32_t vb2_desc_size(const char *desc)
+{
+ if (!desc || !*desc)
+ return 0;
+
+ return roundup32(strlen(desc) + 1);
+}
+