-/* $Id: preconv.c,v 1.3 2011/05/26 14:43:07 kristaps Exp $ */
+/* $Id: preconv.c,v 1.6 2013/06/02 03:52:21 schwarze Exp $ */
/*
* Copyright (c) 2011 Kristaps Dzonsons <kristaps@bsd.lv>
*
#include "config.h"
#endif
+#ifdef HAVE_MMAP
#include <sys/stat.h>
#include <sys/mman.h>
+#endif
#include <assert.h>
#include <fcntl.h>
/*
* The read_whole_file() and resize_buf() functions are copied from
- * read.c, including all dependency code (MAP_FILE, etc.).
+ * read.c, including all dependency code.
*/
-#ifndef MAP_FILE
-#define MAP_FILE 0
-#endif
-
enum enc {
ENC_UTF_8, /* UTF-8 */
ENC_US_ASCII, /* US-ASCII */
/* Quick test for big-endian value. */
- if ( ! (*((char *)(&one))))
+ if ( ! (*((const char *)(&one))))
be = 1;
for (i = b->offs; i < b->sz; i++) {
read_whole_file(const char *f, int fd,
struct buf *fb, int *with_mmap)
{
- struct stat st;
size_t off;
ssize_t ssz;
+#ifdef HAVE_MMAP
+ struct stat st;
if (-1 == fstat(fd, &st)) {
perror(f);
return(0);
if (S_ISREG(st.st_mode)) {
*with_mmap = 1;
fb->sz = (size_t)st.st_size;
- fb->buf = mmap(NULL, fb->sz, PROT_READ,
- MAP_FILE|MAP_SHARED, fd, 0);
+ fb->buf = mmap(NULL, fb->sz, PROT_READ, MAP_SHARED, fd, 0);
if (fb->buf != MAP_FAILED)
return(1);
}
+#endif
/*
* If this isn't a regular file (like, say, stdin), then we must
/* Check us against known encodings. */
- for (i = 0; i < ENC__MAX; i++) {
+ for (i = 0; i < (int)ENC__MAX; i++) {
nsz = strlen(encs[i].name);
if (phsz < nsz)
continue;
struct buf b;
const char *fn;
enum enc enc, def;
- const char bom[3] = { 0xEF, 0xBB, 0xBF };
+ unsigned char bom[3] = { 0xEF, 0xBB, 0xBF };
size_t offs;
extern int optind;
extern char *optarg;
case ('D'):
/* FALLTHROUGH */
case ('e'):
- for (i = 0; i < ENC__MAX; i++) {
+ for (i = 0; i < (int)ENC__MAX; i++) {
if (strcasecmp(optarg, encs[i].name))
continue;
break;
}
- if (i < ENC__MAX) {
+ if (i < (int)ENC__MAX) {
if ('D' == ch)
def = (enum enc)i;
else
rc = EXIT_SUCCESS;
out:
+#ifdef HAVE_MMAP
if (map)
munmap(b.buf, b.sz);
else
+#endif
free(b.buf);
if (fd > STDIN_FILENO)