Lines Matching refs:mf

118 int mfmmap(mFILE *mf, FILE *fp, const char *fn) {  in mfmmap()  argument
124 mf->size = sb.st_size; in mfmmap()
125 mf->data = mmap(NULL, mf->size, PROT_READ, MAP_SHARED, in mfmmap()
128 if (!mf->data) in mfmmap()
131 mf->alloced = 0; in mfmmap()
199 mFILE *mf = (mFILE *)malloc(sizeof(*mf)); in mfcreate() local
200 if (NULL == mf) return NULL; in mfcreate()
201 mf->fp = NULL; in mfcreate()
202 mf->data = data; in mfcreate()
203 mf->alloced = size; in mfcreate()
204 mf->size = size; in mfcreate()
205 mf->eof = 0; in mfcreate()
206 mf->offset = 0; in mfcreate()
207 mf->flush_pos = 0; in mfcreate()
208 mf->mode = MF_READ | MF_WRITE; in mfcreate()
209 return mf; in mfcreate()
216 void mfrecreate(mFILE *mf, char *data, int size) { in mfrecreate() argument
217 if (mf->data) in mfrecreate()
218 free(mf->data); in mfrecreate()
219 mf->data = data; in mfrecreate()
220 mf->size = size; in mfrecreate()
221 mf->alloced = size; in mfrecreate()
222 mf->eof = 0; in mfrecreate()
223 mf->offset = 0; in mfrecreate()
224 mf->flush_pos = 0; in mfrecreate()
238 mFILE *mf; in mfcreate_from() local
241 if (NULL == (mf = mfreopen(path, mode_str, fp))) in mfcreate_from()
245 mf->fp = NULL; in mfcreate_from()
247 return mf; in mfcreate_from()
256 mFILE *mf; in mfreopen() local
288 mf = mfcreate(NULL, 0); in mfreopen()
289 if (NULL == mf) return NULL; in mfreopen()
293 if (mfmmap(mf, fp, path) == -1) { in mfreopen()
294 mf->data = NULL; in mfreopen()
299 if (!mf->data) { in mfreopen()
300 mf->data = mfload(fp, path, &mf->size, b); in mfreopen()
301 mf->alloced = mf->size; in mfreopen()
308 mf = mfcreate(NULL, 0); in mfreopen()
309 if (NULL == mf) return NULL; in mfreopen()
314 mf->fp = fp; in mfreopen()
315 mf->mode = mode; in mfreopen()
318 mf->mode |= MF_MODEX; in mfreopen()
322 mf->flush_pos = mf->size; in mfreopen()
326 return mf; in mfreopen()
348 int mfclose(mFILE *mf) { in mfclose() argument
349 if (!mf) in mfclose()
352 mfflush(mf); in mfclose()
355 if ((mf->mode & MF_MMAP) && mf->data) { in mfclose()
357 munmap(mf->data, mf->size); in mfclose()
358 mf->data = NULL; in mfclose()
362 if (mf->fp) in mfclose()
363 fclose(mf->fp); in mfclose()
365 mfdestroy(mf); in mfclose()
376 int mfdetach(mFILE *mf) { in mfdetach() argument
377 if (!mf) in mfdetach()
380 mfflush(mf); in mfdetach()
381 if (mf->mode & MF_MMAP) in mfdetach()
384 if (mf->fp) { in mfdetach()
385 fclose(mf->fp); in mfdetach()
386 mf->fp = NULL; in mfdetach()
395 int mfdestroy(mFILE *mf) { in mfdestroy() argument
396 if (!mf) in mfdestroy()
399 if (mf->data) in mfdestroy()
400 free(mf->data); in mfdestroy()
401 free(mf); in mfdestroy()
415 void *mfsteal(mFILE *mf, size_t *size_out) { in mfsteal() argument
418 if (!mf) return NULL; in mfsteal()
420 data = mf->data; in mfsteal()
422 if (NULL != size_out) *size_out = mf->size; in mfsteal()
424 if (mfdetach(mf) != 0) in mfsteal()
427 mf->data = NULL; in mfsteal()
428 mfdestroy(mf); in mfsteal()
438 int mfseek(mFILE *mf, long offset, int whence) { in mfseek() argument
441 mf->offset = offset; in mfseek()
444 mf->offset += offset; in mfseek()
447 mf->offset = mf->size + offset; in mfseek()
454 mf->eof = 0; in mfseek()
458 long mftell(mFILE *mf) { in mftell() argument
459 return mf->offset; in mftell()
462 void mrewind(mFILE *mf) { in mrewind() argument
463 mf->offset = 0; in mrewind()
464 mf->eof = 0; in mrewind()
475 void mftruncate(mFILE *mf, long offset) { in mftruncate() argument
476 mf->size = offset != -1 ? offset : mf->offset; in mftruncate()
477 if (mf->offset > mf->size) in mftruncate()
478 mf->offset = mf->size; in mftruncate()
481 int mfeof(mFILE *mf) { in mfeof() argument
482 return mf->eof; in mfeof()
489 size_t mfread(void *ptr, size_t size, size_t nmemb, mFILE *mf) { in mfread() argument
493 if (mf == m_channel[0]) init_mstdin(); in mfread()
495 if (mf->size <= mf->offset) in mfread()
498 len = size * nmemb <= mf->size - mf->offset in mfread()
500 : mf->size - mf->offset; in mfread()
504 memcpy(cptr, &mf->data[mf->offset], len); in mfread()
505 mf->offset += len; in mfread()
508 mf->eof = 1; in mfread()
514 size_t mfwrite(void *ptr, size_t size, size_t nmemb, mFILE *mf) { in mfwrite() argument
515 if (!(mf->mode & MF_WRITE)) in mfwrite()
519 if (mf->mode & MF_APPEND) in mfwrite()
520 mf->offset = mf->size; in mfwrite()
523 while (size * nmemb + mf->offset > mf->alloced) { in mfwrite()
524 size_t new_alloced = mf->alloced ? mf->alloced * 2 : 1024; in mfwrite()
525 void * new_data = realloc(mf->data, new_alloced); in mfwrite()
527 mf->alloced = new_alloced; in mfwrite()
528 mf->data = new_data; in mfwrite()
532 if (mf->offset < mf->flush_pos) in mfwrite()
533 mf->flush_pos = mf->offset; in mfwrite()
536 memcpy(&mf->data[mf->offset], ptr, size * nmemb); in mfwrite()
537 mf->offset += size * nmemb; in mfwrite()
538 if (mf->size < mf->offset) in mfwrite()
539 mf->size = mf->offset; in mfwrite()
544 int mfgetc(mFILE *mf) { in mfgetc() argument
545 if (mf == m_channel[0]) init_mstdin(); in mfgetc()
546 if (mf->offset < mf->size) { in mfgetc()
547 return (unsigned char)mf->data[mf->offset++]; in mfgetc()
550 mf->eof = 1; in mfgetc()
554 int mungetc(int c, mFILE *mf) { in mungetc() argument
555 if (mf->offset > 0) { in mungetc()
556 mf->data[--mf->offset] = c; in mungetc()
560 mf->eof = 1; in mungetc()
564 char *mfgets(char *s, int size, mFILE *mf) { in mfgets() argument
567 if (mf == m_channel[0]) init_mstdin(); in mfgets()
570 if (mf->offset < mf->size) { in mfgets()
571 s[i] = mf->data[mf->offset++]; in mfgets()
575 mf->eof = 1; in mfgets()
594 int mfflush(mFILE *mf) { in mfflush() argument
595 if (!mf->fp) in mfflush()
599 if (mf == m_channel[1] || mf == m_channel[2]) { in mfflush()
600 if (mf->flush_pos < mf->size) { in mfflush()
601 size_t bytes = mf->size - mf->flush_pos; in mfflush()
602 if (fwrite(mf->data + mf->flush_pos, 1, bytes, mf->fp) < bytes) in mfflush()
604 if (0 != fflush(mf->fp)) in mfflush()
609 mf->offset = mf->size = mf->flush_pos = 0; in mfflush()
613 if (mf->mode & MF_WRITE) { in mfflush()
614 if (mf->flush_pos < mf->size) { in mfflush()
615 size_t bytes = mf->size - mf->flush_pos; in mfflush()
616 if (!(mf->mode & MF_MODEX)) { in mfflush()
617 fseek(mf->fp, mf->flush_pos, SEEK_SET); in mfflush()
619 if (fwrite(mf->data + mf->flush_pos, 1, bytes, mf->fp) < bytes) in mfflush()
621 if (0 != fflush(mf->fp)) in mfflush()
624 if (ftell(mf->fp) != -1 && in mfflush()
625 ftruncate(fileno(mf->fp), ftell(mf->fp)) == -1) in mfflush()
627 mf->flush_pos = mf->size; in mfflush()
643 void mfascii(mFILE *mf) { in mfascii() argument
646 for (p1 = p2 = 1; p1 < mf->size; p1++, p2++) { in mfascii()
647 if (mf->data[p1] == '\n' && mf->data[p1-1] == '\r') { in mfascii()
650 mf->data[p2] = mf->data[p1]; in mfascii()
652 mf->size = p2; in mfascii()
654 mf->offset = mf->flush_pos = 0; in mfascii()