11 #if !defined(WIN32) || defined(__CYGWIN__)
27 #define access(PATH,MODE) _access(PATH,00)
36 int write(
int fd,
const void* buf,
int count)
38 return write(fd,(
void*)buf,(
size_t)count);
41 int stat(
const char* fn,
struct stat* buf)
43 return stat((
char*)fn, buf);
56 rs =
new char[strlen(s) + 1];
66 if ( ! err_msg ) err_msg =
"(unknown error)";
67 CkPrintf(
"EXITING: %s\n", err_msg);
70 if (CmiNumPartitions() > 1) {
71 sprintf(repstr,
"REPLICA %d ", CmiMyPartition());
73 CkAbort(
"%sEXITING: %s\n", repstr, err_msg);
75 CkError(
"%sEXITING: %s\n", repstr, err_msg);
76 #if CHARM_VERSION < 61000
87 if ( ! err_msg ) err_msg =
"(unknown error)";
88 CkPrintf(
"FATAL ERROR: %s\n", err_msg);
91 if (CmiNumPartitions() > 1) {
92 sprintf(repstr,
"REPLICA %d ", CmiMyPartition());
94 CkAbort(
"%sFATAL ERROR: %s\n", repstr, err_msg);
96 CkError(
"%sFATAL ERROR: %s\n", repstr, err_msg);
97 #if CHARM_VERSION < 61000
108 if ( ! err_msg ) err_msg =
"(unknown error)";
109 const char *sys_err_msg = strerror(errno);
110 if ( ! sys_err_msg ) sys_err_msg =
"(unknown error)";
111 CkPrintf(
"FATAL ERROR: %s: %s\n", err_msg, sys_err_msg);
113 char repstr[24] =
"";
114 if (CmiNumPartitions() > 1) {
115 sprintf(repstr,
"REPLICA %d ", CmiMyPartition());
117 CkAbort(
"%sFATAL ERROR: %s: %s\n", repstr, err_msg, sys_err_msg);
119 CkError(
"%sFATAL ERROR: %s: %s\n", repstr, err_msg, sys_err_msg);
120 #if CHARM_VERSION < 61000
131 if ( ! err_msg ) err_msg =
"(unknown error)";
132 const char *bug_msg =
133 "FATAL ERROR: See http://www.ks.uiuc.edu/Research/namd/bugreport.html";
134 CkPrintf(
"FATAL ERROR: %s\n%s\n",err_msg, bug_msg);
136 char repstr[24] =
"";
137 if (CmiNumPartitions() > 1) {
138 sprintf(repstr,
"REPLICA %d ", CmiMyPartition());
140 CkAbort(
"%sFATAL ERROR: %s\n%s\n", repstr, err_msg, bug_msg);
142 CkError(
"%sFATAL ERROR: %s\n%s\n", repstr, err_msg, bug_msg);
143 #if CHARM_VERSION < 61000
154 rval = access(filename, F_OK);
155 }
while ( rval != 0 && errno == EINTR );
156 if ( rval != 0 && errno != ENOENT ) {
157 const char *sys_err_msg = strerror(errno);
158 if ( ! sys_err_msg ) sys_err_msg =
"(unknown error)";
160 << filename <<
": " << sys_err_msg <<
"\n" <<
endi;
170 if ( ! extension ) extension =
".BAK";
171 char *backup =
new char[strlen(filename)+strlen(extension)+1];
172 strcpy(backup, filename);
173 strcat(backup, extension);
174 #if defined(WIN32) && !defined(__CYGWIN__)
175 if (
remove(backup) )
if ( errno != ENOENT ) {
176 char *sys_err_msg = strerror(errno);
177 if ( ! sys_err_msg ) sys_err_msg =
"(unknown error)";
179 << backup <<
": " << sys_err_msg <<
"\n" <<
endi;
183 while ( rename(filename,backup) )
185 if ( errno == EINTR )
continue;
186 const char *sys_err_msg = strerror(errno);
187 if ( ! sys_err_msg ) sys_err_msg =
"(unknown error)";
188 iout <<
iERROR <<
"Error on renaming file " << filename
189 <<
" to " << backup <<
": " << sys_err_msg <<
"\n" <<
endi;
191 if ( errno == EXDEV )
continue;
207 while ( (fd = _open(fname, O_WRONLY|(append?O_APPEND:O_EXCL)|O_CREAT|O_TEXT,_S_IREAD|_S_IWRITE)) < 0) {
209 #ifdef NAMD_NO_O_EXCL
210 while ( (fd = open(fname, O_WRONLY|(append?O_APPEND:O_TRUNC)|O_CREAT,
212 while ( (fd = open(fname, O_WRONLY|(append?O_APPEND:O_EXCL)|O_CREAT,
214 S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH)) < 0) {
216 if ( errno != EINTR ) {
218 sprintf(errmsg,
"Unable to open text file %s", fname);
227 void NAMD_write(
int fd,
const char *buf,
size_t count,
const char *fname) {
229 #if defined(WIN32) && !defined(__CYGWIN__)
230 long retval = _write(fd,buf,count);
232 ssize_t retval = write(fd,buf,count);
234 if ( retval < 0 && errno == EINTR ) retval = 0;
237 sprintf(errmsg,
"Error on writing to file %s", fname);
240 if ( retval > count )
NAMD_bug(
"extra bytes written in NAMD_write()");
249 while ( _close(fd) ) {
251 while ( close(fd) ) {
253 if ( errno != EINTR ) {
255 sprintf(errmsg,
"Error on closing file %s", fname);
273 FILE *
Fopen (
const char *filename,
const char *mode)
278 #if defined(NOCOMPRESSED)
279 if (!stat(filename,&buf))
282 while ( ! (rval = fopen(filename,mode)) ) {
283 if ( errno != EINTR )
break;
288 if (!stat(filename,&buf))
290 if (!S_ISDIR(buf.st_mode)) {
292 while ( ! (rval = fopen(filename,mode)) ) {
293 if ( errno != EINTR )
break;
302 command = (
char *)malloc(strlen(filename)+25);
304 sprintf(command,
"zcat %s.Z",filename);
305 realfilename = command+5;
306 iout <<
"Command = " << command <<
"\n" <<
endi;
307 iout <<
"Filename.Z = " << realfilename <<
"\n" <<
endi;
308 if (!stat(realfilename,&buf))
310 if (!S_ISDIR(buf.st_mode))
312 fout = popen(command,mode);
320 if (isalnum(C) || isspace(C))
331 sprintf(command,
"gzip -d -c %s.gz",filename);
332 realfilename = command+11;
333 iout <<
"Command = " << command <<
"\n" <<
endi;
334 iout <<
"Filename.gz = " << realfilename <<
"\n" <<
endi;
335 if (!stat(realfilename,&buf))
337 if (!S_ISDIR(buf.st_mode))
339 fout = popen(command,mode);
347 if (isalnum(C) || isspace(C))
370 #if !defined(NOCOMPRESSED)
void NAMD_err(const char *err_msg)
int NAMD_open_text(const char *fname, int append)
void NAMD_quit(const char *err_msg)
std::ostream & endi(std::ostream &s)
int NAMD_file_exists(const char *filename)
char * NAMD_stringdup(const char *s)
void NAMD_bug(const char *err_msg)
FILE * Fopen(const char *filename, const char *mode)
void NAMD_die(const char *err_msg)
void NAMD_backup_file(const char *filename, const char *extension)
std::ostream & iERROR(std::ostream &s)