dbd006b082
When compression fails for whatever reason, the caller should know about it rather than blindly assuming it worked correctly. That can prevent half compressed data from ending up in the image. This is currently happening for a segment of depthcharge which is triggering a failure in LZMA. The size of the "compressed" data is never set and is recorded as zero, and that segment effectively isn't loaded during boot. Change-Id: Idbff01f5413d030bbf5382712780bbd0b9e83bc7 Signed-off-by: Gabe Black <gabeblack@google.com> Reviewed-on: https://chromium-review.googlesource.com/187364 Reviewed-by: Hung-Te Lin <hungte@chromium.org> Tested-by: Gabe Black <gabeblack@chromium.org> Commit-Queue: Gabe Black <gabeblack@chromium.org> (cherry picked from commit be48f3e41eaf0eaf6686c61c439095fc56883cec) Signed-off-by: Isaac Christensen <isaac.christensen@se-eng.com> Reviewed-on: http://review.coreboot.org/6960 Tested-by: build bot (Jenkins) Reviewed-by: Ronald G. Minnich <rminnich@gmail.com> Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
56 lines
1.6 KiB
C
56 lines
1.6 KiB
C
/*
|
|
* compression handling for cbfstool
|
|
*
|
|
* Copyright (C) 2009 coresystems GmbH
|
|
* written by Patrick Georgi <patrick.georgi@coresystems.de>
|
|
*
|
|
* Adapted from code
|
|
* Copyright (C) 2008 Jordan Crouse <jordan@cosmicpenguin.net>, released
|
|
* under identical license terms
|
|
*
|
|
* 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
|
|
*/
|
|
|
|
#include <string.h>
|
|
#include <stdio.h>
|
|
#include "common.h"
|
|
|
|
static int lzma_compress(char *in, int in_len, char *out, int *out_len)
|
|
{
|
|
return do_lzma_compress(in, in_len, out, out_len);
|
|
}
|
|
|
|
static int none_compress(char *in, int in_len, char *out, int *out_len)
|
|
{
|
|
memcpy(out, in, in_len);
|
|
*out_len = in_len;
|
|
return 0;
|
|
}
|
|
|
|
comp_func_ptr compression_function(comp_algo algo)
|
|
{
|
|
comp_func_ptr compress;
|
|
switch (algo) {
|
|
case CBFS_COMPRESS_NONE:
|
|
compress = none_compress;
|
|
break;
|
|
case CBFS_COMPRESS_LZMA:
|
|
compress = lzma_compress;
|
|
break;
|
|
default:
|
|
ERROR("Unknown compression algorithm %d!\n", algo);
|
|
return NULL;
|
|
}
|
|
return compress;
|
|
}
|