#include #include #include "etc.h" #include "etc.m" /* Signale un erreur d'allocation et temine si quit != 0 */ static void near malloc_signal (int quit) { fprintf (stderr,MSG_U(E_NOMEM,"Manque de mémoire\n")); if (quit){ fprintf (stderr,MSG_U(E_CANTCONTINUE ,"Ne peut continuer\n")); exit (-1); } } /* Alloue un bloc et génère un message si erreur Si quit != 0, exit si erreur Retourne bloc alloué ou NULL */ export void far *farmalloc_err (long size, int quit) { void far *pt = NULL; if (size > 0){ pt = malloc(size); /* printf ("size %ld coreleft = %ld\n",size,coreleft()); */ if (pt == NULL) malloc_signal(quit); } return pt; } /* Alloue un bloc et génère un message si erreur Si quit != 0, exit si erreur Retourne bloc alloué ou NULL */ export void *malloc_err (unsigned size, int quit) { void *pt = NULL; if (size > 0){ pt = malloc(size); if (pt == NULL) malloc_signal(quit); } return pt; } /* Alloue un bloc et génère un message si erreur, initialise à 0 Si quit != 0, exit si erreur Retourne bloc alloué ou NULL */ export void *calloc_err (unsigned nelem, int sizelm, int quit) { unsigned size = nelem * sizelm; void *pt = malloc_err (size,quit); if (pt != NULL){ memset (pt,0,size); } return (pt); } /* Realloue un bloc precedemment alloue par malloc Signale un erreur si ne peut alloué, termine si quit != 0 Le pointeur initial peut être NULL */ export void far *farrealloc_err( void *q, unsigned long newsize, int quit) { void far *pt; if (q != NULL){ pt = realloc (q, newsize); if (pt == NULL && newsize > 0){ malloc_signal (quit); } }else{ pt = malloc_err (newsize,quit); } return pt; } /* Realloue un bloc precedemment alloue par malloc Signale un erreur si ne peut alloué, termine si quit != 0 Le pointeur initial peut être NULL */ export void *realloc_err( void *q, unsigned newsize, int quit) { void *pt; if (q != NULL){ pt = realloc (q, newsize); if (pt == NULL && newsize > 0){ malloc_signal (quit); } }else{ pt = malloc_err (newsize,quit); } return pt; } /* Alloue une copie d'une chaine en signalant un message d'erreur Ne retourne pas si quit != 0 */ export char *strdup_err (const char *str, int quit) { char *ret = (char*) malloc_err (strlen(str)+1,quit); if (ret != NULL){ strcpy (ret,str); } return ret; }