Files
failnix/targets/wasm-tacle/sequential/susan/generated/modified_sources/inline/wccfile.c

81 lines
2.2 KiB
C

#include "wccfile.h"
// Wasm loop bounds
__attribute__((import_module("__pragma"), import_name("loopbound"))) extern void
__pragma_loopbound(unsigned int min_bound, unsigned int max_bound);
#define EOF -1
__attribute__((always_inline)) static inline size_t
susan_wccfread(void *ptr, size_t size, size_t count, struct wccFILE *stream) {
if (susan_wccfeof(stream))
return EOF;
unsigned i = stream->cur_pos, i2 = 0;
size_t number_of_chars_to_read =
stream->size - stream->cur_pos >= size * count
? size * count
: stream->size - stream->cur_pos;
__pragma_loopbound(7220, 7220);
while (i < stream->cur_pos + number_of_chars_to_read)
((unsigned char *) ptr)[i2++] = stream->data[i++];
stream->cur_pos += number_of_chars_to_read;
return number_of_chars_to_read;
}
__attribute__((always_inline)) static inline int
susan_wccfgetc(struct wccFILE *stream) {
if (susan_wccfeof(stream))
return EOF;
else
return stream->data[stream->cur_pos++];
}
__attribute__((always_inline)) static inline char *
susan_wccfgets(char *str, int num, struct wccFILE *stream) {
if (!stream || susan_wccfeof(stream) || !str || num <= 0)
return 0;
int pos = 0;
__pragma_loopbound(57, 57);
while (pos < num - 1 && !susan_wccfeof(stream)) {
str[pos] = stream->data[stream->cur_pos];
if (str[pos] == '\n')
break;
stream->cur_pos++;
pos++;
}
str[pos++] = '\0';
return str;
}
int
susan_wccfseek(struct wccFILE *stream, long int offset, enum _Origin_ origin) {
if (origin == WCCSEEK_SET) {
stream->cur_pos = offset;
return 0;
} else if (origin == WCCSEEK_CUR) {
stream->cur_pos += offset;
return 0;
} else if (origin == WCCSEEK_END) {
stream->cur_pos = stream->size + offset;
return 0;
}
return -1;
}
__attribute__((always_inline)) static inline int
susan_wccfgetpos(struct wccFILE *stream, unsigned *position) {
*position = stream->cur_pos;
return 0;
}
__attribute__((always_inline)) static inline int
susan_wccfeof(struct wccFILE *stream) {
return stream->cur_pos == stream->size ? 1 : 0;
}