⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fread.c

📁 Axis 221 camera embedded programing interface
💻 C
字号:
/* Copyright (C) 2004       Manuel Novoa III    <mjn3@codepoet.org> * * GNU Library General Public License (LGPL) version 2 or later. * * Dedicated to Toni.  See uClibc/DEDICATION.mjn3 for details. */#include "_stdio.h"#ifdef __DO_UNLOCKEDweak_alias(__fread_unlocked,fread_unlocked);#ifndef __UCLIBC_HAS_THREADS__weak_alias(__fread_unlocked,fread);#endifsize_t __fread_unlocked(void * __restrict ptr, size_t size, size_t nmemb,						FILE * __restrict stream){	__STDIO_STREAM_VALIDATE(stream);	assert(stream->__filedes >= -1);	/* Note: If nmbem * size > SIZE_MAX then there is an application	 * bug since no array can be larger than SIZE_MAX in size. */	if ((__STDIO_STREAM_IS_NARROW_READING(stream)		 || !__STDIO_STREAM_TRANS_TO_READ(stream, __FLAG_NARROW))		&& size && nmemb		) {		if (nmemb <= (SIZE_MAX / size)) {			unsigned char *buffer = (unsigned char *) ptr;			size_t todo, bytes, avail;			todo = bytes = size * nmemb;			/* Check for ungots... */			while (stream->__modeflags & __FLAG_UNGOT) {				*buffer++ = stream->__ungot[(stream->__modeflags--) & 1];				stream->__ungot[1] = 0;				if (!--todo) {					goto DONE;				}			}#ifdef __STDIO_BUFFERS			/* Next check for available buffered... */			if ((avail = stream->__bufread - stream->__bufpos) > 0) {				if (avail > todo) {					avail = todo;				}				memcpy(buffer, stream->__bufpos, avail);				buffer += avail;				stream->__bufpos += avail;				if (!(todo -= avail)) {					goto DONE;				}			} 			/* We need to read from the host environment, so we must			 * flush all line buffered streams if the stream is not			 * fully buffered. */			if (!__STDIO_STREAM_IS_FBF(stream)) {				__STDIO_FLUSH_LBF_STREAMS;			}#endif#ifdef __UCLIBC_MJN3_ONLY__#warning CONSIDER: should we refill and read from the buffer sometimes?#endif			while ((avail = __stdio_READ(stream, buffer, todo)) > 0) {				buffer += avail;				if (!(todo -= avail)) {					break;				}			}		DONE:			__STDIO_STREAM_VALIDATE(stream);			return (bytes - todo) / size;		}		__STDIO_STREAM_SET_ERROR(stream);		__set_errno(EINVAL);	}	__STDIO_STREAM_VALIDATE(stream);	return 0;}#elif defined __UCLIBC_HAS_THREADS__size_t fread(void * __restrict ptr, size_t size, size_t nmemb,			 register FILE * __restrict stream){	size_t retval;	__STDIO_AUTO_THREADLOCK_VAR;	__STDIO_AUTO_THREADLOCK(stream);	retval = __fread_unlocked(ptr, size, nmemb, stream);	__STDIO_AUTO_THREADUNLOCK(stream);	return retval;}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -