fmemopen port for iOS and Mac OS X
C Objective-C
Switch branches/tags
Nothing to show
Latest commit 79ce0dd Feb 19, 2014 @jverkoey jverkoey Update the copyrights.
Permalink
Failed to load latest commit information.
src Update the copyrights. Feb 20, 2014
README.md Typo. Jun 25, 2012
deps.json Port fmemopen to NimbusKit. Feb 20, 2014

README.md

fmemopen for Mac OS and iOS

Originally ported from ingenuitas python-tesseract. Ported by Jeff Verkoeyen under the Apache 2.0 License.

From the fmemopen man page:

FILE *fmemopen(void *buf, size_t size, const char *mode);

The fmemopen() function opens a stream that permits the access specified by mode. The stream allows I/O to be performed on the string or memory buffer pointed to by buf. This buffer must be at least size bytes long.

Alas, this method does not exist on BSD operating systems (specifically Mac OS X and iOS). It is possible to recreate this functionality using a BSD-specific method called funopen.

From the funopen man page:

FILE * funopen(const void *cookie, int (*readfn)(void *, char *, int), int (*writefn)(void *, const char *, int), fpos_t (*seekfn)(void *, fpos_t, int), int (*closefn)(void *));

The funopen() function associates a stream with up to four ``I/O functions''. Either readfn or writefn must be specified; the others can be given as an appropriately-typed NULL pointer. These I/O functions will be used to read, write, seek and close the new stream.

fmemopen.c provides a simple implementation of fmemopen using funopen so that you can create FILE pointers to blocks of memory.

Adding it to your Project

Drag fmemopen.h and fmemopen.c to your project and add them to your target. #include "fmemopen.h" wherever you need to use fmemopen.

Examples

#import "fmemopen.h"

NSString* string = @"fmemopen in Objective-C";
const char* cstr = [string UTF8String];
FILE* file = fmemopen((void *)cstr, sizeof(char) * (string.length + 1), "r");

// fread on file will now read the contents of the NSString

fclose(file);