1e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson/* 2e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson * libfdt - Flat Device Tree manipulation 3e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson * Testcase for string escapes in dtc 4e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson * Copyright (C) 2006 David Gibson, IBM Corporation. 5e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson * 6e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson * This library is free software; you can redistribute it and/or 7e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson * modify it under the terms of the GNU Lesser General Public License 8e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson * as published by the Free Software Foundation; either version 2.1 of 9e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson * the License, or (at your option) any later version. 10e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson * 11e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson * This library is distributed in the hope that it will be useful, but 12e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson * WITHOUT ANY WARRANTY; without even the implied warranty of 13e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson * Lesser General Public License for more details. 15e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson * 16e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson * You should have received a copy of the GNU Lesser General Public 17e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson * License along with this library; if not, write to the Free Software 18e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 19e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson */ 20e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson#include <stdlib.h> 21e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson#include <stdio.h> 22e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson#include <string.h> 23e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson#include <stdint.h> 24e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson#include <errno.h> 25e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson 26e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson#include <libfdt.h> 27e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson 28e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson#include "tests.h" 29e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson#include "testdata.h" 30e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson 31e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson#define CHUNKSIZE 1024 32e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson 3301a2d8a3e9f19cb1f5ee923af23682fad783a799David Gibsonstatic char *load_file(const char *name, int *len) 34e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson{ 35e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson FILE *f; 3636786db6154533b67d736b414ef63b4457009326David Gibson char *buf = NULL; 37e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson int bufsize = 0, n; 38e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson 39e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson *len = 0; 40e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson 41e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson f = fopen(name, "r"); 42e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson if (!f) 43e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson FAIL("Couldn't open \"%s\": %s", name, strerror(errno)); 44e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson 45e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson while (!feof(f)) { 46e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson if (bufsize < (*len + CHUNKSIZE)) { 47e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson buf = xrealloc(buf, *len + CHUNKSIZE); 48e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson bufsize = *len + CHUNKSIZE; 49e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson } 50e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson 51e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson n = fread(buf + *len, 1, CHUNKSIZE, f); 52e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson if (ferror(f)) 53e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson FAIL("Error reading \"%s\": %s", name, strerror(errno)); 54e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson *len += n; 55e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson } 56e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson 57e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson return buf; 58e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson} 59e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson 60e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibsonint main(int argc, char *argv[]) 61e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson{ 6236786db6154533b67d736b414ef63b4457009326David Gibson void *fdt; 6336786db6154533b67d736b414ef63b4457009326David Gibson char *incbin; 64e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson int len; 65e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson 66e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson test_init(argc, argv); 67e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson 68e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson incbin = load_file("incbin.bin", &len); 69e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson fdt = load_blob_arg(argc, argv); 70e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson 71e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson check_getprop(fdt, 0, "incbin", len, incbin); 72e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson check_getprop(fdt, 0, "incbin-partial", 17, incbin + 13); 73e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson 74e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson PASS(); 75e37ec7d5889fa04047daaa7a4ff55150ed7954d4David Gibson} 76