diff options
author | Daisuke Nojiri <dnojiri@chromium.org> | 2015-11-03 15:04:59 -0800 |
---|---|---|
committer | Patrick Georgi <pgeorgi@google.com> | 2016-03-08 17:39:38 +0100 |
commit | a5ae62e9d25a07538677dd9967bbe3208f324ef8 (patch) | |
tree | 13cc088a27706ddd812a539f8bbf1eb0f96d9107 /util/archive/archive.h | |
parent | 491c016d77fa56461e8669e45796da97bbab3c37 (diff) |
util: add archive tool
'archive' concatenates files into a single binary blob. Files are
indexed by the base names. See archive.h for the format description.
BUG=chromium:502066
BRANCH=tot
TEST=Tested on Glados
Change-Id: Iea108160e65c8c7bd34c02af824a77cb075ee64b
Signed-off-by: Patrick Georgi <pgeorgi@chromium.org>
Original-Commit-Id: 21a9ba860f29599ac029f8d49d32399c4e3a73a8
Original-Change-Id: I46b4efb339e3a1e05772ae752f2861026ca09cfc
Original-Signed-off-by: Daisuke Nojiri <dnojiri@chromium.org>
Original-Reviewed-on: https://chromium-review.googlesource.com/311200
Original-Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Original-Reviewed-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://review.coreboot.org/12925
Tested-by: build bot (Jenkins)
Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
Diffstat (limited to 'util/archive/archive.h')
-rw-r--r-- | util/archive/archive.h | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/util/archive/archive.h b/util/archive/archive.h new file mode 100644 index 0000000000..67c42e2bbb --- /dev/null +++ b/util/archive/archive.h @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2015 The ChromiumOS Authors. All rights reserved. + * written by Daisuke Nojiri <dnojiri@chromium.org> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#ifndef __ARCHIVE_H +#define __ARCHIVE_H + +#include <stdint.h> + +/* + * Archive file layout: + * + * +----------------------------------+ + * | root header | + * +----------------------------------+ + * | file_header[0] | + * +----------------------------------+ + * | file_header[1] | + * +----------------------------------+ + * | ... | + * +----------------------------------+ + * | file_header[count-1] | + * +----------------------------------+ + * | file(0) content | + * +----------------------------------+ + * | file(1) content | + * +----------------------------------+ + * | ... | + * +----------------------------------+ + * | file(count-1) content | + * +----------------------------------+ + */ + +#define VERSION 0 +#define CBAR_MAGIC "CBAR" +#define NAME_LENGTH 32 + +/* Root header */ +struct directory { + char magic[4]; + uint32_t version; /* version of the header. little endian */ + uint32_t size; /* total size of archive. little endian */ + uint32_t count; /* number of files. little endian */ +}; + +/* File header */ +struct dentry { + /* file name. null-terminated if shorter than NAME_LENGTH */ + char name[NAME_LENGTH]; + /* file offset from the root header. little endian */ + uint32_t offset; + /* file size. little endian */ + uint32_t size; +}; + +static inline struct dentry *get_first_dentry(const struct directory *dir) +{ + return (struct dentry *)(dir + 1); +} + +static inline uint32_t get_first_offset(const struct directory *dir) +{ + return sizeof(struct directory) + sizeof(struct dentry) * dir->count; +} + +#endif |