Exemple #1
0
int command_add(args_t * args)
{
	assert(args != NULL);

	/* ========================= */

	int add(args_t * args, off_t poffset)
	{
		int rc = 0;

		off_t offset = 0;
		size_t size = 0;
		uint32_t flags = 0;

		rc = parse_offset(args->offset, &offset);
		if (rc < 0)
			return rc;
		rc = parse_size(args->size, &size);
		if (rc < 0)
			return rc;
		rc = parse_size(args->flags, &flags);
		if (rc < 0)
			return rc;

		ffs_type_t type = FFS_TYPE_DATA;
		if (args->logical == f_LOGICAL)
			type = FFS_TYPE_LOGICAL;

		const char * target = args->target;
		int debug = args->debug;

		RAII(FILE *, file, fopen_generic(target, "r+", debug), fclose);
		RAII(ffs_t *, ffs,  __ffs_fopen(file, poffset), __ffs_fclose);

		rc = __ffs_entry_add(ffs, args->name, offset, size,
				     type, flags);
		if (rc < 0)
			return rc;

		if (args->verbose == f_VERBOSE)
			printf("%llx: %s: add partition at offset '%llx' size "
			       "'%x' type '%d' flags '%x'\n", poffset,
				args->name, offset, size, type, flags);

		return rc;
	}
Exemple #2
0
int ffs_entry_add(ffs_t * self, const char *path, off_t offset, size_t size,
		  ffs_type_t type, uint32_t flags)
{
	int rc = __ffs_entry_add(self, path, offset, size, type, flags);
	if (rc < 0) {
		err_t *err = err_get();
		assert(err != NULL);

		__error.errnum = err_code(err);
		snprintf(__error.errstr, sizeof __error.errstr,
			 "%s: %s : %s(%d) : (code=%d) %.*s\n",
			 program_invocation_short_name,
			 err_type_name(err), err_file(err), err_line(err),
			 err_code(err), err_size(err), (char *)err_data(err));

		rc = -1;
	}

	return rc;
}