From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from wes1-so1.wedos.net (wes1-so1.wedos.net [46.28.106.15]) by dpdk.org (Postfix) with ESMTP id F3046530A for ; Mon, 13 Jun 2016 10:17:46 +0200 (CEST) Received: from pcviktorin.fit.vutbr.cz (pcviktorin.fit.vutbr.cz [147.229.13.147]) by wes1-so1.wedos.net (Postfix) with ESMTPSA id 3rSlyL5S0czBp0; Mon, 13 Jun 2016 10:17:46 +0200 (CEST) From: Jan Viktorin To: dev@dpdk.org Cc: Jan Viktorin , Thomas Monjalon , David Marchand , Bruce Richardson Date: Mon, 13 Jun 2016 10:12:24 +0200 Message-Id: <1465805550-30640-5-git-send-email-viktorin@rehivetech.com> X-Mailer: git-send-email 2.8.0 In-Reply-To: <1465805550-30640-1-git-send-email-viktorin@rehivetech.com> References: <1465805550-30640-1-git-send-email-viktorin@rehivetech.com> In-Reply-To: <1463510101-5633-1-git-send-email-viktorin@rehivetech.com> References: <1463510101-5633-1-git-send-email-viktorin@rehivetech.com> Subject: [dpdk-dev] [PATCH v4 04/10] app/test: add functions to create files from resources X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Jun 2016 08:17:47 -0000 A resource can be written into the target filesystem by calling resource_fwrite or resource_fwrite_file. Such file can be created before a test is started and removed after the test finishes. Signed-off-by: Jan Viktorin --- app/test/resource.c | 35 +++++++++++++++++++++++++++++++++++ app/test/resource.h | 14 ++++++++++++++ app/test/test_resource.c | 10 ++++++++++ 3 files changed, 59 insertions(+) diff --git a/app/test/resource.c b/app/test/resource.c index 30513db..acb63c1 100644 --- a/app/test/resource.c +++ b/app/test/resource.c @@ -31,6 +31,7 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include #include #include #include @@ -60,6 +61,40 @@ const struct resource *resource_find(const char *name) return NULL; } +int resource_fwrite(const struct resource *r, FILE *f) +{ + const size_t goal = resource_size(r); + size_t total = 0; + + while (total < goal) { + size_t wlen = fwrite(r->begin + total, 1, goal - total, f); + if (wlen == 0) { + perror(__func__); + return -1; + } + + total += wlen; + } + + return 0; +} + +int resource_fwrite_file(const struct resource *r, const char *fname) +{ + FILE *f; + int ret; + + f = fopen(fname, "w"); + if (f == NULL) { + perror(__func__); + return -1; + } + + ret = resource_fwrite(r, f); + fclose(f); + return ret; +} + void resource_register(struct resource *r) { TAILQ_INSERT_TAIL(&resource_list, r, next); diff --git a/app/test/resource.h b/app/test/resource.h index 966fc24..ac9cae6 100644 --- a/app/test/resource.h +++ b/app/test/resource.h @@ -45,6 +45,7 @@ */ #include +#include #include #include @@ -75,6 +76,19 @@ size_t resource_size(const struct resource *r); const struct resource *resource_find(const char *name); /** + * Write the raw data of the resource to the given file. + * @return 0 on success + */ +int resource_fwrite(const struct resource *r, FILE *f); + +/** + * Write the raw data of the resource to the given file given by name. + * The name is relative to the current working directory. + * @return 0 on success + */ +int resource_fwrite_file(const struct resource *r, const char *fname); + +/** * Register a resource in the global list of resources. * Not intended for direct use, please check the REGISTER_RESOURCE * macro. diff --git a/app/test/test_resource.c b/app/test/test_resource.c index b397fa8..3d1bf00 100644 --- a/app/test/test_resource.c +++ b/app/test/test_resource.c @@ -65,6 +65,7 @@ REGISTER_LINKED_RESOURCE(test_resource_c); static int test_resource_c(void) { const struct resource *r; + FILE *f; r = resource_find("test_resource_c"); TEST_ASSERT_NOT_NULL(r, "No test_resource_c found"); @@ -72,6 +73,15 @@ static int test_resource_c(void) "Found resource %s, expected test_resource_c", r->name); + TEST_ASSERT_SUCCESS(resource_fwrite_file(r, "test_resource.c"), + "Failed to to write file %s", r->name); + + f = fopen("test_resource.c", "r"); + TEST_ASSERT_NOT_NULL(f, + "Missing extracted file resource.c"); + fclose(f); + remove("test_resource.c"); + return 0; } -- 2.8.0