summaryrefslogtreecommitdiffstats
path: root/libsparse
diff options
context:
space:
mode:
authorColin Cross <ccross@android.com>2012-04-26 14:24:35 -0700
committerColin Cross <ccross@android.com>2012-07-09 22:09:37 -0700
commita21930b6b0dbb04a52948566d58fb48c6db58bab (patch)
treee74cfb32ad232c3b99364cd0931502519ca72111 /libsparse
parent9e1f17e926fa20255c5f4b4d2f68aa98a964253a (diff)
downloadsystem_core-a21930b6b0dbb04a52948566d58fb48c6db58bab.zip
system_core-a21930b6b0dbb04a52948566d58fb48c6db58bab.tar.gz
system_core-a21930b6b0dbb04a52948566d58fb48c6db58bab.tar.bz2
libsparse: add error reporting functions
Change-Id: I2f21355b6c5339d1d724b4c121ea30d575b2d366
Diffstat (limited to 'libsparse')
-rw-r--r--libsparse/Android.mk3
-rw-r--r--libsparse/include/sparse/sparse.h18
-rw-r--r--libsparse/sparse.c5
-rw-r--r--libsparse/sparse_err.c33
-rw-r--r--libsparse/sparse_file.h1
5 files changed, 59 insertions, 1 deletions
diff --git a/libsparse/Android.mk b/libsparse/Android.mk
index dbe4d18..d3eeae6 100644
--- a/libsparse/Android.mk
+++ b/libsparse/Android.mk
@@ -6,7 +6,8 @@ libsparse_src_files := \
backed_block.c \
output_file.c \
sparse.c \
- sparse_crc32.c
+ sparse_crc32.c \
+ sparse_err.c
include $(CLEAR_VARS)
diff --git a/libsparse/include/sparse/sparse.h b/libsparse/include/sparse/sparse.h
index 6484333..09a5137 100644
--- a/libsparse/include/sparse/sparse.h
+++ b/libsparse/include/sparse/sparse.h
@@ -157,4 +157,22 @@ int sparse_file_add_fd(struct sparse_file *s,
int sparse_file_write(struct sparse_file *s, int fd, bool gz, bool sparse,
bool crc);
+/**
+ * sparse_file_verbose - set a sparse file cookie to print verbose errors
+ *
+ * @s - sparse file cookie
+ *
+ * Print verbose sparse file errors whenever using the sparse file cookie.
+ */
+void sparse_file_verbose(struct sparse_file *s);
+
+/**
+ * sparse_print_verbose - function called to print verbose errors
+ *
+ * By default, verbose errors will print to standard error.
+ * sparse_print_verbose may be overridden to log verbose errors somewhere else.
+ *
+ */
+extern void (*sparse_print_verbose)(const char *fmt, ...);
+
#endif
diff --git a/libsparse/sparse.c b/libsparse/sparse.c
index 4ebcf0f..3403604 100644
--- a/libsparse/sparse.c
+++ b/libsparse/sparse.c
@@ -151,3 +151,8 @@ int sparse_file_write(struct sparse_file *s, int fd, bool gz, bool sparse,
return 0;
}
+
+void sparse_file_verbose(struct sparse_file *s)
+{
+ s->verbose = true;
+}
diff --git a/libsparse/sparse_err.c b/libsparse/sparse_err.c
new file mode 100644
index 0000000..0f392ad
--- /dev/null
+++ b/libsparse/sparse_err.c
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <sparse/sparse.h>
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <unistd.h>
+
+void sparse_default_print(const char *fmt, ...)
+{
+ va_list argp;
+
+ va_start(argp, fmt);
+ vfprintf(stderr, fmt, argp);
+ va_end(argp);
+}
+
+void (*sparse_print_error)(const char *fmt, ...) = sparse_default_print;
+void (*sparse_print_verbose)(const char *fmt, ...) = sparse_default_print;
diff --git a/libsparse/sparse_file.h b/libsparse/sparse_file.h
index fae1c16..91a12e6 100644
--- a/libsparse/sparse_file.h
+++ b/libsparse/sparse_file.h
@@ -22,6 +22,7 @@
struct sparse_file {
unsigned int block_size;
int64_t len;
+ bool verbose;
struct backed_block_list *backed_block_list;
struct output_file *out;