FLTK logo

[master] 2f52b54 - Fix unicode support in scandir_win32.c by using GetFileAttributesW (#455)

FLTK matrix user chat room
(using Element browser app)   FLTK gitter user chat room   GitHub FLTK Project   FLTK News RSS Feed  
  FLTK Apps      FLTK Library      Forums      Links     Login 
 All Forums  |  Back to fltk.commit  ]
 
Previous Message ]Next Message ]

[master] 2f52b54 - Fix unicode support in scandir_win32.c by using GetFileAttributesW (#455) "ZJUGKC" Jun 25, 2022  
 
commit 2f52b54a084a7823df43f7f8ed72eba0223a5a05
Author:     ZJUGKC <yxxinyuan@zju.edu.cn>
AuthorDate: Sun Jun 26 02:53:19 2022 +0800
Commit:     GitHub <noreply@github.com>
CommitDate: Sat Jun 25 20:53:19 2022 +0200

    Fix unicode support in scandir_win32.c by using GetFileAttributesW (#455)
    
    * Fix unicode support in scandir_win32.c by using GetFileAttributesW
    
    * Remove the useless comments in scandir_win32.c

 src/scandir_win32.c | 16 +++++++---------
 1 file changed, 7 insertions(+), 9 deletions(-)

diff --git src/scandir_win32.c src/scandir_win32.c
index 874005b..66e6dd0 100644
--- src/scandir_win32.c
+++ src/scandir_win32.c
@@ -88,29 +88,27 @@ int fl_scandir(const char *dirname, struct dirent ***namelist,
   }
   strcpy(findIn, dirname);
 
-  /* #if defined(__GNUC__) */
-  /* #warning FIXME This probably needs to be MORE UTF8 aware now */
-  /* #endif */
   for (d = findIn; *d; d++) if (*d=='/') *d='\\';
   if (len==0) { strcpy(findIn, ".\\*"); }
   if ((len==2)&&findIn[1]==':'&&isalpha(findIn[0])) { *d++ = '\\'; *d = 0; }
   if ((len==1)&& (d[-1]=='.')) { strcpy(findIn, ".\\*"); is_dir = 1; }
   if ((len>0) && (d[-1]=='\\')) { *d++ = '*'; *d = 0; is_dir = 1; }
   if ((len>1) && (d[-1]=='.') && (d[-2]=='\\')) { d[-1] = '*'; is_dir = 1; }
-  if (!is_dir) { /* this file may still be a directory that we need to list */
-    DWORD attr = GetFileAttributes(findIn);
-    if (attr != INVALID_FILE_ATTRIBUTES && (attr & FILE_ATTRIBUTE_DIRECTORY) )
-      strcpy(d, "\\*");
-  }
   { /* Create a block to limit the scope while we find the initial "wide" filename */
      /* unsigned short * wbuf = (unsigned short*)malloc(sizeof(short) *(len + 10)); */
      /* wbuf[fl_utf2unicode(findIn, strlen(findIn), wbuf)] = 0; */
         unsigned short *wbuf = NULL;
         unsigned wlen = fl_utf8toUtf16(findIn, (unsigned) strlen(findIn), NULL, 0); /* Pass NULL to query length */
         wlen++; /* add a little extra for termination etc. */
-        wbuf = (unsigned short*)malloc(sizeof(unsigned short)*wlen);
+        wbuf = (unsigned short*)malloc(sizeof(unsigned short)*(wlen+2));
         wlen = fl_utf8toUtf16(findIn, (unsigned) strlen(findIn), wbuf, wlen); /* actually convert the filename */
         wbuf[wlen] = 0; /* NULL terminate the resultant string */
+        if (!is_dir) { /* this file may still be a directory that we need to list */
+          DWORD attr = GetFileAttributesW(wbuf);
+          if (attr != INVALID_FILE_ATTRIBUTES && (attr & FILE_ATTRIBUTE_DIRECTORY) ) {
+            wbuf[wlen] = '\\'; wbuf[wlen+1] = '*'; wbuf[wlen+2] = 0;
+          }
+        }
         h = FindFirstFileW(wbuf, &findw); /* get a handle to the first filename in the search */
         free(wbuf); /* release the "wide" buffer before the pointer goes out of scope */
   }
Direct Link to Message ]
 
     
Previous Message ]Next Message ]
 
 

Comments are owned by the poster. All other content is copyright 1998-2024 by Bill Spitzak and others. This project is hosted by The FLTK Team. Please report site problems to 'erco@seriss.com'.