1178825Sdfr/* 2233294Sstas * Copyright (c) 2005 Kungliga Tekniska H��gskolan 3178825Sdfr * (Royal Institute of Technology, Stockholm, Sweden). 4178825Sdfr * All rights reserved. 5233294Sstas * 6178825Sdfr * Redistribution and use in source and binary forms, with or without 7178825Sdfr * modification, are permitted provided that the following conditions 8178825Sdfr * are met: 9233294Sstas * 10178825Sdfr * 1. Redistributions of source code must retain the above copyright 11178825Sdfr * notice, this list of conditions and the following disclaimer. 12233294Sstas * 13178825Sdfr * 2. Redistributions in binary form must reproduce the above copyright 14178825Sdfr * notice, this list of conditions and the following disclaimer in the 15178825Sdfr * documentation and/or other materials provided with the distribution. 16233294Sstas * 17178825Sdfr * 3. Neither the name of the Institute nor the names of its contributors 18178825Sdfr * may be used to endorse or promote products derived from this software 19178825Sdfr * without specific prior written permission. 20233294Sstas * 21178825Sdfr * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND 22178825Sdfr * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23178825Sdfr * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24178825Sdfr * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE 25178825Sdfr * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 26178825Sdfr * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 27178825Sdfr * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28178825Sdfr * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 29178825Sdfr * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 30178825Sdfr * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31178825Sdfr * SUCH DAMAGE. 32178825Sdfr */ 33178825Sdfr 34178825Sdfr#include <config.h> 35178825Sdfr 36178825Sdfr#include "roken.h" 37178825Sdfr 38178825Sdfr/* 39178825Sdfr * Write datablob to a filename, don't care about errors. 40178825Sdfr */ 41178825Sdfr 42233294SstasROKEN_LIB_FUNCTION void ROKEN_LIB_CALL 43178825Sdfrrk_dumpdata (const char *filename, const void *buf, size_t size) 44178825Sdfr{ 45178825Sdfr int fd; 46178825Sdfr 47178825Sdfr fd = open(filename, O_WRONLY|O_TRUNC|O_CREAT, 0640); 48178825Sdfr if (fd < 0) 49178825Sdfr return; 50178825Sdfr net_write(fd, buf, size); 51178825Sdfr close(fd); 52178825Sdfr} 53233294Sstas 54233294Sstas/* 55233294Sstas * Read all data from a filename, care about errors. 56233294Sstas */ 57233294Sstas 58233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL 59233294Sstasrk_undumpdata(const char *filename, void **buf, size_t *size) 60233294Sstas{ 61233294Sstas struct stat sb; 62233294Sstas int fd, ret; 63233294Sstas ssize_t sret; 64233294Sstas 65233294Sstas *buf = NULL; 66233294Sstas 67233294Sstas fd = open(filename, O_RDONLY, 0); 68233294Sstas if (fd < 0) 69233294Sstas return errno; 70233294Sstas if (fstat(fd, &sb) != 0){ 71233294Sstas ret = errno; 72233294Sstas goto out; 73233294Sstas } 74233294Sstas *buf = malloc(sb.st_size); 75233294Sstas if (*buf == NULL) { 76233294Sstas ret = ENOMEM; 77233294Sstas goto out; 78233294Sstas } 79233294Sstas *size = sb.st_size; 80233294Sstas 81233294Sstas sret = net_read(fd, *buf, *size); 82233294Sstas if (sret < 0) 83233294Sstas ret = errno; 84233294Sstas else if (sret != (ssize_t)*size) { 85233294Sstas ret = EINVAL; 86233294Sstas free(*buf); 87233294Sstas *buf = NULL; 88233294Sstas } else 89233294Sstas ret = 0; 90233294Sstas 91233294Sstas out: 92233294Sstas close(fd); 93233294Sstas return ret; 94233294Sstas} 95