diff --git a/source/bforce/nodelist.c b/source/bforce/nodelist.c index a7c2987..a22652c 100644 --- a/source/bforce/nodelist.c +++ b/source/bforce/nodelist.c @@ -254,9 +254,6 @@ s_nodelist *nodelist_open(const char *dir, const char *name, int mode) char *ext; /* extension */ memset(&tmp, '\0', sizeof(s_nodelist)); char *lastname; - char *cutname; - - strcpy(cutname,name+strlen(name)-3); /* * Select nodelist index open mode */ @@ -290,18 +287,20 @@ s_nodelist *nodelist_open(const char *dir, const char *name, int mode) * example config for details) */ if( strcmp(name+strlen(name)-4, ".999") == 0 ) { - int count; - struct stat *tmpbuf; char *tmpseek; tmpseek = (char*) malloc(255); - + char *tmpname; + tmpname = (char*) malloc(255); +/* int count; + struct stat *tmpbuf; +*/ + /* 23.00 coming, and i am not at home :( * Later i will rewrite this part with seekdir(3) */ - for (count=0; count<365; count++) +/* for (count=0; count<365; count++) { -/* tmpseek = '\0'; */ strncpy(tmpseek, dir, 255-strlen(tmpseek)); if( (strcmp(&tmpseek[strlen(tmpseek)-1], DIRSEPSTR)) != 0 ) { @@ -314,8 +313,41 @@ s_nodelist *nodelist_open(const char *dir, const char *name, int mode) name = tmpseek; } + } */ +/* free(tmpseek);*/ + + struct dirent *ndir; + DIR *ndirstream; + if( opendir(dir) == NULL ) + { + log("error opening nodelist directory: %s", dir); } + else + { + *tmpname = *name; + struct stat *ndfile; + time_t lasttime = 0; + while( (ndir = readdir(ndirstream)) != NULL ) + { + strnxcpy(tmpseek, ndir->d_name, 255-strlen(tmpseek)); + tmpseek[strlen(tmpseek)-3] = '\0'; + tmpname[strlen(name)-3] = '\0'; + if( strcmp(tmpseek, tmpname) ) + { + if( stat(tmpseek, ndfile) ) + { + if( ndfile->st_mtime > lasttime ) + { + lasttime = ndfile->st_mtime; + strnxcpy(name, tmpname, 255-strlen(tmpseek)); + } + } + } + } + } + free(tmpname); free(tmpseek); + } strnxcpy(tmp.name_nodelist, dir, sizeof(tmp.name_nodelist));