#define MAXJUMP 4
#define MEMSIZE 10
+#define CHECKALLOC(ptr) \
+ do { \
+ if ((ptr) == NULL) { \
+ VERBOSE (ERROR, fprintf (stderr, "can't get enough memory for '%s'\n", #ptr)); \
+ exit (1); \
+ } \
+ } while (0)
+
/* type definition */
/* gobal variables */
free (buffer);
}
buffer = strdup (optarg);
- if (buffer == NULL) {
- VERBOSE (ERROR, fprintf (stderr, "%s: can't allocate memory\n", progname));
- return 1;
- }
+ CHECKALLOC (buffer);
size = strlen (buffer) + 1;
break;
case 'i':
if (fid) {
while (!feof (fid)) {
buffer = (char *) realloc (buffer, size + BUFSIZE);
- if (buffer == NULL) {
- VERBOSE (ERROR, fprintf (stderr, "%s: can't allocate memory\n", progname));
- return 1;
- }
+ CHECKALLOC (buffer);
memset (buffer + size, 0, BUFSIZE);
n = fread (buffer + size, 1, BUFSIZE, fid);
- if (errno != 0) {
+ if ((n == 0) && (errno != 0)) {
VERBOSE (ERROR, fprintf (stderr, "%s: can't read data from file '%s'\n", progname, input));
return 1;
}
}
/* free buffer */
- if (buffer) {
- free (buffer);
- }
+ free (buffer);
VERBOSE (INFO, fprintf (stdout, "\nmemory:"); int _i; for (_i = 0; _i < MEMSIZE; _i++) fprintf (stdout," %d", mem[_i]); fprintf (stdout,"\n"));