void _range_check(int n,int n_min,int n_max,const char *var,const char *file,int line) { char buf[1024]; if ((n < n_min) || (n >= n_max)) { if (strlen(warn_buf) > 0) { strcpy(buf,warn_buf); strcat(buf,"\n"); warn_buf[0] = '\0'; } else buf[0] = '\0'; sprintf(buf+strlen(buf),"Variable %s has value %d. It should have been " "within [ %d .. %d ]\n",var,n,n_min,n_max); _gmx_error("range",buf,file,line); } }
void gmx_fatal(int f_errno,const char *file,int line,const char *fmt,...) { va_list ap; const char *p; char cval,*sval,msg[STRLEN]; char ibuf[64],ifmt[64]; int index,ival,fld,len; double dval; #ifdef _SPECIAL_VAR_ARG int f_errno,line; char *fmt,*file; va_start(ap,); f_errno = va_arg(ap,int); file = va_arg(ap,char *); line = va_arg(ap,int); fmt = va_arg(ap,char *); #else va_start(ap,fmt); #endif clean_fatal_tmp_file(); len=0; for (p=fmt; *p; p++) { if (*p!='%') bputc(msg,&len,*p); else { p++; fld=getfld(&p); switch(*p) { case 'x': ival=va_arg(ap,int); sprintf(ifmt,"0x%%%dx",fld); sprintf(ibuf,ifmt,(unsigned int)ival); for(index=0; (index<(int)strlen(ibuf)); index++) bputc(msg,&len,ibuf[index]); break; case 'd': ival=va_arg(ap,int); sprintf(ifmt,"%%%dd",fld); sprintf(ibuf,ifmt,ival); for(index=0; (index<(int)strlen(ibuf)); index++) bputc(msg,&len,ibuf[index]); break; case 'u': ival=va_arg(ap,unsigned); sprintf(ifmt,"%%%du",fld); sprintf(ibuf,ifmt,ival); for(index=0; (index<(int)strlen(ibuf)); index++) bputc(msg,&len,ibuf[index]); break; case 'f': dval=va_arg(ap,double); sprintf(ifmt,"%%%df",fld); sprintf(ibuf,ifmt,dval); for(index=0; (index<(int)strlen(ibuf)); index++) bputc(msg,&len,ibuf[index]); break; case 'g': dval=va_arg(ap,double); sprintf(ifmt,"%%%dg",fld); sprintf(ibuf,ifmt,dval); for(index=0; (index<(int)strlen(ibuf)); index++) bputc(msg,&len,ibuf[index]); break; case 'c': cval=(char) va_arg(ap,int); /* char is promoted to int */ bputc(msg,&len,cval); break; case 's': sval=va_arg(ap,char *); if (sval == NULL) sval = strdup("(null)"); bputs(msg,&len,sval,fld); break; case '%': bputc(msg,&len,*p); break; default: break; } } } va_end(ap); bputc(msg,&len,'\0'); fatal_errno = f_errno; _gmx_error("fatal",msg,file,line); }