asn1_docextract/word_util.c

49 lines
914 B
C

#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include "word_file_fmt.h"
#include "word_util.h"
struct word_handle *word_file_open(const char *fname)
{
int fd;
struct stat st;
struct word_handle *wh = calloc(1, sizeof(*wh));
struct word_file_hdr *wfh;
fd = open(fname, O_RDONLY);
if (fd < 0) {
free(wh);
return NULL;
}
wh->fd = fd;
fstat(fd, &st);
wh->file_size = st.st_size;
wh->base_addr = mmap(NULL, wh->file_size, PROT_READ, MAP_SHARED, wh->fd, 0);
if (!wh->base_addr) {
close(wh->fd);
free(wh);
return NULL;
}
wfh = (struct word_file_hdr *) wh->base_addr;
if (memcmp(wfh->magic, word_file_magic, sizeof(wfh->magic))) {
fprintf(stderr, "The file does not appear to be a Word for DOS file!\n");
close(wh->fd);
free(wh);
return NULL;
}
return wh;
}