switch-coreboot/util/lar/lib.h
Myles Watson 66843bacbf This patch fixes lar path handling. In particular, it adds new members to the
file struct for pathname and compression, so that directories can be correctly
recursed.

file-by-file:

util/lar/lar.c:
	make error messages more verbose
	pass a pointer to the file structure instead of the name
	parse the name here with lar_process_name

util/lar/lib.c:
	change handle_directory to use a path name and respect nocompress
	change add_files to use pre-processed names
	use sensible defaults for new file members when listing or extracting
	free pathname if allocated	

util/lar/lib.h:
	add new members to struct file
	change prototypes of add_files and lar_add_file

util/lar/stream.c:
	change lar_add_file to use pathname and compression from struct file
	
Signed-off-by: Myles Watson <mylesgw@gmail.com>
Acked-by: Peter Stuge <peter@stuge.se>


git-svn-id: svn://coreboot.org/repository/coreboot-v3@623 f3766cd6-281f-0410-b1cd-43a5c92072e9
2008-02-28 14:56:43 +00:00

96 lines
2.9 KiB
C

/*
* lar - lightweight archiver
*
* Copyright (C) 2006-2007 coresystems GmbH
* (Written by Stefan Reinauer <stepan@coresystems.de> for coresystems GmbH)
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA, 02110-1301 USA
*/
#ifndef __LAR_LIB_H
#define __LAR_LIB_H
/* data types */
struct file {
char *name;
char *pathname;
enum compalgo algo;
struct file *next;
};
enum {
NONE,
ADD,
CREATE,
LIST,
EXTRACT,
ZEROFILL,
} larmodes;
/* prototypes for lar.c functions */
int verbose(void);
int elfparse(void);
long get_larsize(void);
char *get_bootblock(void);
/* prototypes for lib.c functions */
int mkdirp_below(const char *parent, const char *dirpath, mode_t mode);
int add_files(const char *name, const char *pathname_in,
const enum compalgo algo_in);
int add_file_or_directory(const char *name);
struct file *get_files(void);
void free_files(void);
/* Prototypes for ELF functions */
int iself(char *filebuf);
/* Prototypes for in-memory LAR operations */
int lar_process_name(char *name, char **pfilename, char **ppathname,
enum compalgo *thisalgo);
int lar_compress(char *ptr, int size, char *temp, enum compalgo *thisalgo);
int hlen(char *name);
int maxsize(struct lar *lar, char *name);
int lar_add_entry(struct lar *lar, char *pathname, void *data,
u32 complen, u32 reallen, u32 loadaddress, u32 entry,
enum compalgo thisalgo);
/* Prototypes for the LAR I/O functions */
char *mapfile(char *filename, u32 *size);
struct lar * lar_new_archive(const char *archive, unsigned int size);
struct lar * lar_open_archive(const char *archive);
void lar_close_archive(struct lar *lar);
void lar_list_files(struct lar *lar, struct file *files);
int lar_add_file(struct lar *lar, struct file* file);
int lar_add_bootblock(struct lar *lar, const char *bootblock);
int lar_extract_files(struct lar *lar, struct file *files);
/* prototypes for extract.c functions */
int extract_lar(const char *archivename, struct file *files);
/* prototypes for list.c functions */
int list_lar(const char *archivename, struct file *files);
/* prototypes for create.c functions */
int create_lar(const char *archivename, struct file *files);
/* prototypes for bootblock.c functions */
extern char *bootblock_code;
extern int bootblock_len;
int load_bootblock(const char *bootblock);
int fixup_bootblock(void);
#endif