Diff for /np2/sdl/dosio.c between versions 1.1 and 1.5

version 1.1, 2003/11/21 06:51:12 version 1.5, 2004/01/12 08:01:00
Line 4 Line 4
 #include        "dosio.h"  #include        "dosio.h"
 #if defined(WIN32)  #if defined(WIN32)
 #include        <direct.h>  #include        <direct.h>
   #else
   #include        <dirent.h>
 #endif  #endif
 #if 0  #if 0
 #include <sys/param.h>  #include <sys/param.h>
Line 98  struct stat sb; Line 100  struct stat sb;
         return(-1);          return(-1);
 }  }
   
   static BOOL cnv_sttime(time_t *t, DOSDATE *dosdate, DOSTIME *dostime) {
   
   struct tm       *ftime;
   
           ftime = localtime(t);
           if (ftime == NULL) {
                   return(FAILURE);
           }
           if (dosdate) {
                   dosdate->year = ftime->tm_year + 1900;
                   dosdate->month = ftime->tm_mon + 1;
                   dosdate->day = ftime->tm_mday;
           }
           if (dostime) {
                   dostime->hour = ftime->tm_hour;
                   dostime->minute = ftime->tm_min;
                   dostime->second = ftime->tm_sec;
           }
           return(SUCCESS);
   }
   
 short file_getdatetime(FILEH handle, DOSDATE *dosdate, DOSTIME *dostime) {  short file_getdatetime(FILEH handle, DOSDATE *dosdate, DOSTIME *dostime) {
   
 struct stat sb;  struct stat sb;
 struct tm       *ftime;  
   
         if (fstat(fileno(handle), &sb) == 0) {          if (fstat(fileno(handle), &sb) == 0) {
                 ftime = localtime(&sb.st_mtime);                  if (cnv_sttime(&sb.st_mtime, dosdate, dostime) == SUCCESS) {
                 if (ftime) {  
                         if (dosdate) {  
                                 dosdate->year = ftime->tm_year + 1900;  
                                 dosdate->month = ftime->tm_mon + 1;  
                                 dosdate->day = ftime->tm_mday;  
                         }  
                         if (dostime) {  
                                 dostime->hour = ftime->tm_hour;  
                                 dostime->minute = ftime->tm_min;  
                                 dostime->second = ftime->tm_sec;  
                         }  
                         return(0);                          return(0);
                 }                  }
         }          }
Line 181  short file_attr_c(const char *path) { Line 192  short file_attr_c(const char *path) {
         return(file_attr_c(curpath));          return(file_attr_c(curpath));
 }  }
   
   #if defined(WIN32)
   static BOOL cnvdatetime(FILETIME *file, DOSDATE *dosdate, DOSTIME *dostime) {
   
           FILETIME        localtime;
           SYSTEMTIME      systime;
   
           if ((FileTimeToLocalFileTime(file, &localtime) == 0) ||
                   (FileTimeToSystemTime(&localtime, &systime) == 0)) {
                   return(FAILURE);
           }
           if (dosdate) {
                   dosdate->year = (UINT16)systime.wYear;
                   dosdate->month = (UINT8)systime.wMonth;
                   dosdate->day = (UINT8)systime.wDay;
           }
           if (dostime) {
                   dostime->hour = (UINT8)systime.wHour;
                   dostime->minute = (UINT8)systime.wMinute;
                   dostime->second = (UINT8)systime.wSecond;
           }
           return(SUCCESS);
   }
   
   static BOOL setflist(WIN32_FIND_DATA *w32fd, FLINFO *fli) {
   
           if ((w32fd->dwFileAttributes & FILEATTR_DIRECTORY) &&
                   ((!file_cmpname(w32fd->cFileName, ".")) ||
                   (!file_cmpname(w32fd->cFileName, "..")))) {
                   return(FAILURE);
           }
           fli->caps = FLICAPS_SIZE | FLICAPS_ATTR;
           fli->size = w32fd->nFileSizeLow;
           fli->attr = w32fd->dwFileAttributes;
           if (cnvdatetime(&w32fd->ftLastWriteTime, &fli->date, &fli->time)
                                                                                                                                   == SUCCESS) {
                   fli->caps |= FLICAPS_DATE | FLICAPS_TIME;
           }
           milstr_ncpy(fli->path, w32fd->cFileName, sizeof(fli->path));
           return(SUCCESS);
   }
   
   FLISTH file_list1st(const char *dir, FLINFO *fli) {
   
           char                    path[MAX_PATH];
           HANDLE                  hdl;
           WIN32_FIND_DATA w32fd;
   
           milsjis_ncpy(path, dir, sizeof(path));
           file_setseparator(path, sizeof(path));
           milsjis_ncat(path, "*.*", sizeof(path));
           hdl = FindFirstFile(path, &w32fd);
           if (hdl != INVALID_HANDLE_VALUE) {
                   do {
                           if (setflist(&w32fd, fli) == SUCCESS) {
                                   return(hdl);
                           }
                   } while(FindNextFile(hdl, &w32fd));
                   FindClose(hdl);
           }
           return(FLISTH_INVALID);
   }
   
   BOOL file_listnext(FLISTH hdl, FLINFO *fli) {
   
           WIN32_FIND_DATA w32fd;
   
           while(FindNextFile(hdl, &w32fd)) {
                   if (setflist(&w32fd, fli) == SUCCESS) {
                           return(SUCCESS);
                   }
           }
           return(FAILURE);
   }
   
   void file_listclose(FLISTH hdl) {
   
           FindClose(hdl);
   }
   #else
   FLISTH file_list1st(const char *dir, FLINFO *fli) {
   
           DIR             *ret;
   
           ret = opendir(dir);
           if (ret == NULL) {
                   goto ff1_err;
           }
           if (file_listnext((FLISTH)ret, fli) == SUCCESS) {
                   return((FLISTH)ret);
           }
           closedir(ret);
   
   ff1_err:
           return(FLISTH_INVALID);
   }
   
   BOOL file_listnext(FLISTH hdl, FLINFO *fli) {
   
   struct dirent   *de;
   struct stat             sb;
           UINT32          attr;
   
           de = readdir((DIR *)hdl);
           if (de == NULL) {
                   return(FAILURE);
           }
           if (fli) {
                   if (stat(de->d_name, &sb) == 0) {
                           fli->caps = FLICAPS_SIZE | FLICAPS_ATTR;
                           fli->size = sb.st_size;
                           attr = 0;
                           if (S_ISDIR(sb.st_mode)) {
                                   attr = FILEATTR_DIRECTORY;
                           }
                           else if (!(sb.st_mode & S_IWUSR)) {
                                   attr = FILEATTR_READONLY;
                           }
                           fli->attr = attr;
                           if (cnv_sttime(&sb.st_mtime, &fli->date, &fli->time) == SUCCESS) {
                                   fli->caps |= FLICAPS_DATE | FLICAPS_TIME;
                           }
                   }
                   else {
                           fli->caps = 0;
                           fli->size = 0;
                           fli->attr = 0;
                   }
                   mileuc_ncpy(fli->path, de->d_name, sizeof(fli->path));
           }
           return(SUCCESS);
   }
   
   void file_listclose(FLISTH hdl) {
   
           closedir((DIR *)hdl);
   }
   #endif
   
 void file_catname(char *path, const char *name, int maxlen) {  void file_catname(char *path, const char *name, int maxlen) {
   
         char    c;          char    c;
Line 197  void file_catname(char *path, const char Line 346  void file_catname(char *path, const char
                 while(maxlen > 0) {                  while(maxlen > 0) {
                         maxlen--;                          maxlen--;
                         c = *name++;                          c = *name++;
                         maxlen = 0;  
                         if (ISKANJI1ST(c)) {                          if (ISKANJI1ST(c)) {
                                 if ((maxlen == 0) || (*name == '\0')) {                                  if ((maxlen == 0) || (*name == '\0')) {
                                         break;                                          break;
Line 292  void file_cutseparator(char *path) { Line 440  void file_cutseparator(char *path) {
         int             pos;          int             pos;
   
         pos = strlen(path) - 1;          pos = strlen(path) - 1;
         if ((pos > 0) && (path[pos] == '/')) {          if ((pos > 0) &&                                                        // 2文字以上でー
                   (path[pos] == '/') &&                                   // ケツが \ でー
                   ((pos != 1) || (path[0] != '.'))) {             // './' ではなかったら
                 path[pos] = '\0';                  path[pos] = '\0';
         }          }
 }  }

Removed from v.1.1  
changed lines
  Added in v.1.5


RetroPC.NET-CVS <cvs@retropc.net>