Flössie 0731975ff0 Apply modernize-use-nullptr
Setup:
- `mkdir tidy; cd tidy`
- `cmake .. -DCMAKE_BUILD_TYPE=debug -DPROC_TARGET_NUMBER=1 -DCACHE_NAME_SUFFIX=4 -DBINDIR=. -DDATADIR=. -DBUILD_BUNDLE=ON -DWITH_LTO=OFF -DOPTION_OMP=OFF -DCMAKE_EXPORT_COMPILE_COMMANDS=ON`
- `cd ..`
- `find -name '*.cc' -exec clang-tidy-3.8 -header-filter=.* -p=tidy -fix-errors -checks=modernize-use-nullptr {} \;`
2016-10-12 17:48:40 +02:00

354 lines
6.7 KiB
C++

/*********************************************************************
* pnmio.c
*
* Various routines to manipulate PNM files.
*********************************************************************/
/* Standard includes */
#include <cstdio> /* FILE */
#include <cstdlib> /* malloc(), atoi() */
/* Our includes */
#include "error.h"
#define LENGTH 80
/*********************************************************************/
static void _getNextString(
FILE *fp,
char *line)
{
int i;
line[0] = '\0';
while (line[0] == '\0') {
fscanf(fp, "%s", line);
i = -1;
do {
i++;
if (line[i] == '#') {
line[i] = '\0';
while (fgetc(fp) != '\n') ;
}
} while (line[i] != '\0');
}
}
/*********************************************************************
* pnmReadHeader
*/
void pnmReadHeader(
FILE *fp,
int *magic,
int *ncols, int *nrows,
int *maxval)
{
char line[LENGTH];
/* Read magic number */
_getNextString(fp, line);
if (line[0] != 'P') {
KLTError("(pnmReadHeader) Magic number does not begin with 'P', "
"but with a '%c'", line[0]);
exit(1);
}
sscanf(line, "P%d", magic);
/* Read size, skipping comments */
_getNextString(fp, line);
*ncols = atoi(line);
_getNextString(fp, line);
*nrows = atoi(line);
if (*ncols < 0 || *nrows < 0 || *ncols > 10000 || *nrows > 10000) {
KLTError("(pnmReadHeader) The dimensions %d x %d are unacceptable",
*ncols, *nrows);
exit(1);
}
/* Read maxval, skipping comments */
_getNextString(fp, line);
*maxval = atoi(line);
fread(line, 1, 1, fp); /* Read newline which follows maxval */
if (*maxval != 255)
KLTWarning("(pnmReadHeader) Maxval is not 255, but %d", *maxval);
}
/*********************************************************************
* pgmReadHeader
*/
void pgmReadHeader(
FILE *fp,
int *magic,
int *ncols, int *nrows,
int *maxval)
{
pnmReadHeader(fp, magic, ncols, nrows, maxval);
if (*magic != 5) {
KLTError("(pgmReadHeader) Magic number is not 'P5', but 'P%d'", *magic);
exit(1);
}
}
/*********************************************************************
* ppmReadHeader
*/
void ppmReadHeader(
FILE *fp,
int *magic,
int *ncols, int *nrows,
int *maxval)
{
pnmReadHeader(fp, magic, ncols, nrows, maxval);
if (*magic != 6) {
KLTError("(ppmReadHeader) Magic number is not 'P6', but 'P%d'", *magic);
exit(1);
}
}
/*********************************************************************
* pgmReadHeaderFile
*/
void pgmReadHeaderFile(
const char *fname,
int *magic,
int *ncols, int *nrows,
int *maxval)
{
FILE *fp;
/* Open file */
if ( (fp = fopen(fname, "rb")) == nullptr) {
KLTError("(pgmReadHeaderFile) Can't open file named '%s' for reading\n", fname);
exit(1);
}
/* Read header */
pgmReadHeader(fp, magic, ncols, nrows, maxval);
/* Close file */
fclose(fp);
}
/*********************************************************************
* ppmReadHeaderFile
*/
void ppmReadHeaderFile(
const char *fname,
int *magic,
int *ncols, int *nrows,
int *maxval)
{
FILE *fp;
/* Open file */
if ( (fp = fopen(fname, "rb")) == nullptr) {
KLTError("(ppmReadHeaderFile) Can't open file named '%s' for reading\n", fname);
exit(1);
}
/* Read header */
ppmReadHeader(fp, magic, ncols, nrows, maxval);
/* Close file */
fclose(fp);
}
/*********************************************************************
* pgmRead
*
* NOTE: If img is NULL, memory is allocated.
*/
unsigned char* pgmRead(
FILE *fp,
unsigned char *img,
int *ncols, int *nrows)
{
unsigned char *ptr;
int magic, maxval;
int i;
/* Read header */
pgmReadHeader(fp, &magic, ncols, nrows, &maxval);
/* Allocate memory, if necessary, and set pointer */
if (img == nullptr) {
ptr = (unsigned char *) malloc(*ncols * *nrows * sizeof(char));
if (ptr == nullptr) {
KLTError("(pgmRead) Memory not allocated");
exit(1);
}
}
else
ptr = img;
/* Read binary image data */
{
unsigned char *tmpptr = ptr;
for (i = 0 ; i < *nrows ; i++) {
fread(tmpptr, *ncols, 1, fp);
tmpptr += *ncols;
}
}
return ptr;
}
/*********************************************************************
* pgmReadFile
*
* NOTE: If img is NULL, memory is allocated.
*/
unsigned char* pgmReadFile(
const char *fname,
unsigned char *img,
int *ncols, int *nrows)
{
unsigned char *ptr;
FILE *fp;
/* Open file */
if ( (fp = fopen(fname, "rb")) == nullptr) {
KLTError("(pgmReadFile) Can't open file named '%s' for reading\n", fname);
exit(1);
}
/* Read file */
ptr = pgmRead(fp, img, ncols, nrows);
/* Close file */
fclose(fp);
return ptr;
}
/*********************************************************************
* pgmWrite
*/
void pgmWrite(
FILE *fp,
const unsigned char *img,
int ncols,
int nrows)
{
int i;
/* Write header */
fprintf(fp, "P5\n");
fprintf(fp, "%d %d\n", ncols, nrows);
fprintf(fp, "255\n");
/* Write binary data */
for (i = 0 ; i < nrows ; i++) {
fwrite(img, ncols, 1, fp);
img += ncols;
}
}
/*********************************************************************
* pgmWriteFile
*/
void pgmWriteFile(
const char *fname,
const unsigned char *img,
int ncols,
int nrows)
{
FILE *fp;
/* Open file */
if ( (fp = fopen(fname, "wb")) == nullptr) {
KLTError("(pgmWriteFile) Can't open file named '%s' for writing\n", fname);
exit(1);
}
/* Write to file */
pgmWrite(fp, img, ncols, nrows);
/* Close file */
fclose(fp);
}
/*********************************************************************
* ppmWrite
*/
void ppmWrite(
FILE *fp,
const unsigned char *redimg,
const unsigned char *greenimg,
const unsigned char *blueimg,
int ncols,
int nrows)
{
int i, j;
/* Write header */
fprintf(fp, "P6\n");
fprintf(fp, "%d %d\n", ncols, nrows);
fprintf(fp, "255\n");
/* Write binary data */
for (j = 0 ; j < nrows ; j++) {
for (i = 0 ; i < ncols ; i++) {
fwrite(redimg, 1, 1, fp);
fwrite(greenimg, 1, 1, fp);
fwrite(blueimg, 1, 1, fp);
redimg++; greenimg++; blueimg++;
}
}
}
/*********************************************************************
* ppmWriteFileRGB
*/
void ppmWriteFileRGB(
const char *fname,
const unsigned char *redimg,
const unsigned char *greenimg,
const unsigned char *blueimg,
int ncols,
int nrows)
{
FILE *fp;
/* Open file */
if ( (fp = fopen(fname, "wb")) == nullptr) {
KLTError("(ppmWriteFileRGB) Can't open file named '%s' for writing\n", fname);
exit(1);
}
/* Write to file */
ppmWrite(fp, redimg, greenimg, blueimg, ncols, nrows);
/* Close file */
fclose(fp);
}