MCPcopy Create free account
hub / github.com/OpenPrinting/cups / cups_raster_read

Function cups_raster_read

cups/raster-stream.c:1417–1564  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1415 */
1416
1417static ssize_t /* O - Number of bytes read */
1418cups_raster_read(cups_raster_t *r, /* I - Raster stream */
1419 unsigned char *buf, /* I - Buffer */
1420 size_t bytes) /* I - Number of bytes to read */
1421{
1422 ssize_t count, /* Number of bytes read */
1423 remaining, /* Remaining bytes in buffer */
1424 total; /* Total bytes read */
1425
1426
1427 DEBUG_printf(("4cups_raster_read(r=%p, buf=%p, bytes=" CUPS_LLFMT "), offset=" CUPS_LLFMT, (void *)r, (void *)buf, CUPS_LLCAST bytes, CUPS_LLCAST (r->iostart + (ssize_t)(r->bufptr - r->buffer))));
1428
1429 if (!r->compressed)
1430 return (cups_raster_io(r, buf, bytes));
1431
1432 /*
1433 * Allocate a read buffer as needed...
1434 */
1435
1436 count = (ssize_t)(2 * r->header.cupsBytesPerLine);
1437 if (count < 65536)
1438 count = 65536;
1439
1440 if ((size_t)count > r->bufsize)
1441 {
1442 ssize_t offset = r->bufptr - r->buffer;
1443 /* Offset to current start of buffer */
1444 ssize_t end = r->bufend - r->buffer;/* Offset to current end of buffer */
1445 unsigned char *rptr; /* Pointer in read buffer */
1446
1447 if (r->buffer)
1448 rptr = realloc(r->buffer, (size_t)count);
1449 else
1450 rptr = malloc((size_t)count);
1451
1452 if (!rptr)
1453 return (0);
1454
1455 r->buffer = rptr;
1456 r->bufptr = rptr + offset;
1457 r->bufend = rptr + end;
1458 r->bufsize = (size_t)count;
1459 }
1460
1461 /*
1462 * Loop until we have read everything...
1463 */
1464
1465 for (total = 0, remaining = (int)(r->bufend - r->bufptr);
1466 total < (ssize_t)bytes;
1467 total += count, buf += count)
1468 {
1469 count = (ssize_t)bytes - total;
1470
1471 DEBUG_printf(("5cups_raster_read: count=" CUPS_LLFMT ", remaining=" CUPS_LLFMT ", buf=%p, bufptr=%p, bufend=%p", CUPS_LLCAST count, CUPS_LLCAST remaining, (void *)buf, (void *)r->bufptr, (void *)r->bufend));
1472
1473 if (remaining == 0)
1474 {

Callers 2

_cupsRasterReadHeaderFunction · 0.85
_cupsRasterReadPixelsFunction · 0.85

Calls 1

cups_raster_ioFunction · 0.85

Tested by

no test coverage detected