A collection of programs written in ponylang.io
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

66 lines
1.2 KiB

#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include <stdlib.h>
FILE *fnvOpenFile(const char *filename)
{
if (strcmp(filename, "-") == 0) {
return stdin;
}
FILE *fp = fopen(filename, "rb");
if (fp) {
return fp;
}
fprintf(stderr, "Error, cannot open file: %s\n", filename);
exit(1);
}
char buf[16384];
void fnvApplyTestPattern(uint64_t howLong,
void (*func)(void *context, void *buf, uint64_t len), void *context)
{
unsigned char c = 0;
unsigned char step = 1;
int i;
if (buf[3] == 0) {
for (i = 0; i < 16384; ++i) {
buf[i] = c;
c += step;
step = (step + 1);
if (step == 19) { step = 0; }
}
}
for (;;) {
uint64_t wantedLen = 16384;
uint64_t len = wantedLen > howLong ? howLong : wantedLen;
if (len > 0) {
func(context, buf, len);
howLong -= len;
}
else {
break;
}
}
}
void fnvIterateThroughFile(const char *filename,
void (*func)(void *context, void *buf, uint64_t len), void *context)
{
FILE *fp = fnvOpenFile(filename);
char buf[65536];
for (;;) {
size_t len = fread(buf, 1, sizeof(buf), fp);
if (len > 0) {
func(context, buf, len);
}
else {
break;
}
}
if (fp != stdin) {
fclose(fp);
}
}