MCPcopy Create free account
hub / github.com/apache/trafficserver / fread

Method fread

src/api/InkAPIInternal.cc:361–412  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

359}
360
361ssize_t
362FileImpl::fread(void *buf, size_t length)
363{
364 size_t amount;
365 ssize_t err;
366
367 if ((m_mode != READ) || (m_fd == -1)) {
368 return -1;
369 }
370
371 if (!m_buf) {
372 m_bufpos = 0;
373 m_bufsize = 1024;
374 m_buf = (char *)ats_malloc(m_bufsize);
375 }
376
377 if (m_bufpos < length) {
378 amount = length;
379 if (amount < 1024) {
380 amount = 1024;
381 }
382 if (amount > (m_bufsize - m_bufpos)) {
383 while (amount > (m_bufsize - m_bufpos)) {
384 m_bufsize *= 2;
385 }
386 m_buf = (char *)ats_realloc(m_buf, m_bufsize);
387 }
388
389 do {
390 err = read(m_fd, &m_buf[m_bufpos], amount);
391 } while ((err < 0) && (errno == EINTR));
392
393 if (err < 0) {
394 return -1;
395 }
396
397 m_bufpos += err;
398 }
399
400 if (buf) {
401 amount = length;
402 if (amount > m_bufpos) {
403 amount = m_bufpos;
404 }
405 memcpy(buf, m_buf, amount);
406 memmove(m_buf, &m_buf[amount], m_bufpos - amount);
407 m_bufpos -= amount;
408 return amount;
409 } else {
410 return m_bufpos;
411 }
412}
413
414ssize_t
415FileImpl::fwrite(const void *buf, size_t length)

Callers 1

TSfreadFunction · 0.80

Calls 4

ats_mallocFunction · 0.85
ats_reallocFunction · 0.85
readFunction · 0.50
memcpyFunction · 0.50

Tested by

no test coverage detected