1.1 --- a/librazor/util.c Fri Oct 17 10:10:57 2014 +0100
1.2 +++ b/librazor/util.c Mon Jul 04 10:48:18 2016 +0100
1.3 @@ -1,7 +1,7 @@
1.4 /*
1.5 * Copyright (C) 2008 Kristian Høgsberg <krh@redhat.com>
1.6 * Copyright (C) 2008 Red Hat, Inc
1.7 - * Copyright (C) 2009, 2011, 2012, 2014 J. Ali Harlow <ali@juiblex.co.uk>
1.8 + * Copyright (C) 2009, 2011, 2012, 2014, 2016 J. Ali Harlow <ali@juiblex.co.uk>
1.9 *
1.10 * This program is free software; you can redistribute it and/or modify
1.11 * it under the terms of the GNU General Public License as published by
1.12 @@ -22,32 +22,20 @@
1.13
1.14 #include <limits.h>
1.15 #include <string.h>
1.16 -#include <sys/types.h>
1.17 -#include <sys/stat.h>
1.18 #include <stdlib.h>
1.19 #include <stdio.h>
1.20 #include <stdint.h>
1.21 #include <errno.h>
1.22 #include <unistd.h>
1.23 -#include <fcntl.h>
1.24 -#ifdef MSWIN_API
1.25 -#include <windows.h>
1.26 -#include <direct.h>
1.27 -#else
1.28 +#ifndef MSWIN_API
1.29 #include <sys/utsname.h>
1.30 #endif
1.31 -#if HAVE_SYS_MMAN_H
1.32 -#include <sys/mman.h>
1.33 -#endif
1.34 #include <assert.h>
1.35
1.36 #include "razor.h"
1.37 +#include "types/types.h"
1.38 #include "razor-internal.h"
1.39
1.40 -#ifndef O_BINARY
1.41 -#define O_BINARY 0
1.42 -#endif
1.43 -
1.44 /* Required by gnulib on non-libc platforms */
1.45 char *program_name = "librazor";
1.46
1.47 @@ -62,130 +50,6 @@
1.48 return p;
1.49 }
1.50
1.51 -#if HAVE_SYS_MMAN_H
1.52 -#define OPEN_FILE_USED (1U<<0)
1.53 -#define OPEN_FILE_MMAPPED (1U<<1)
1.54 -
1.55 -struct open_file {
1.56 - void *addr;
1.57 - size_t length;
1.58 - uint32_t flags;
1.59 -};
1.60 -
1.61 -struct array open_files = { 0, };
1.62 -#endif /* HAVE_SYS_MMAN_H */
1.63 -
1.64 -void *
1.65 -razor_file_get_contents(const char *filename, size_t *length, int private,
1.66 - struct razor_error **error)
1.67 -{
1.68 - int fd;
1.69 - struct stat st;
1.70 - void *addr = NULL;
1.71 - size_t nb;
1.72 - ssize_t res;
1.73 -#if HAVE_SYS_MMAN_H
1.74 - struct open_file *of, *ofend;
1.75 -#endif
1.76 -
1.77 - fd = open(filename, O_RDONLY | O_BINARY);
1.78 - if (fd < 0) {
1.79 - razor_set_error_posix(error, filename);
1.80 - return NULL;
1.81 - }
1.82 -
1.83 - if (fstat(fd, &st) < 0) {
1.84 - razor_set_error_posix(error, filename);
1.85 - close(fd);
1.86 - return NULL;
1.87 - }
1.88 -
1.89 - *length = st.st_size;
1.90 -
1.91 -#if HAVE_SYS_MMAN_H
1.92 - ofend = open_files.data + open_files.size;
1.93 - for (of = open_files.data; of < ofend; of++)
1.94 - if (!(of->flags & OPEN_FILE_USED))
1.95 - break;
1.96 - if (of == ofend) {
1.97 - of = array_add(&open_files, sizeof *of);
1.98 - of->flags = 0;
1.99 - }
1.100 -
1.101 - if (!private) {
1.102 - addr = mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
1.103 - if (addr == MAP_FAILED)
1.104 - addr = NULL;
1.105 - else
1.106 - of->flags = OPEN_FILE_USED | OPEN_FILE_MMAPPED;
1.107 - }
1.108 -#endif /* HAVE_SYS_MMAN_H */
1.109 - if (!addr) {
1.110 - addr = malloc(st.st_size);
1.111 - if (addr) {
1.112 -#if HAVE_SYS_MMAN_H
1.113 - of->flags = OPEN_FILE_USED;
1.114 -#endif
1.115 - nb = 0;
1.116 - while(nb < st.st_size) {
1.117 - res = read(fd, addr + nb, st.st_size - nb);
1.118 - if (res <= 0) {
1.119 - razor_set_error_posix(error, filename);
1.120 - free(addr);
1.121 - addr = NULL;
1.122 - break;
1.123 - }
1.124 - nb += res;
1.125 - }
1.126 - } else
1.127 - razor_set_error(error, RAZOR_POSIX_ERROR, ENOMEM, NULL,
1.128 - "Not enough memory");
1.129 - }
1.130 - close(fd);
1.131 -
1.132 -#if HAVE_SYS_MMAN_H
1.133 - of->addr = addr;
1.134 - of->length = st.st_size;
1.135 -#endif
1.136 -
1.137 - return addr;
1.138 -}
1.139 -
1.140 -int razor_file_free_contents(void *addr, size_t length)
1.141 -{
1.142 -#if HAVE_SYS_MMAN_H
1.143 - int retval, mmapped;
1.144 - struct open_file *of, *ofend;
1.145 -
1.146 - ofend = open_files.data + open_files.size;
1.147 - for (of = open_files.data; of < ofend; of++)
1.148 - if ((of->flags & OPEN_FILE_USED) && of->addr == addr)
1.149 - break;
1.150 -
1.151 - if (of == ofend)
1.152 - return 1;
1.153 -
1.154 - length = of->length;
1.155 - mmapped = of->flags & OPEN_FILE_MMAPPED;
1.156 - of->flags &= ~OPEN_FILE_USED;
1.157 -
1.158 - for (of = open_files.data; of < ofend; of++)
1.159 - if (of->flags & OPEN_FILE_USED)
1.160 - break;
1.161 -
1.162 - if (of == ofend) {
1.163 - array_release(&open_files);
1.164 - array_init(&open_files);
1.165 - }
1.166 -
1.167 - if (mmapped)
1.168 - return munmap(addr, length);
1.169 -#endif
1.170 -
1.171 - free(addr);
1.172 - return 0;
1.173 -}
1.174 -
1.175 struct qsort_context {
1.176 size_t size;
1.177 razor_compare_with_data_func_t compare;