fsal_nds.c
上传用户:holyzs
上传日期:2022-06-29
资源大小:2335k
文件大小:3k
源码类别:

编辑器/阅读器

开发平台:

C/C++

  1. #include <reader_core.h>
  2. #include <ConvertUTF.h>
  3. extern int chdir(const char *path);
  4. static UTF8 utf8_buf[256];
  5. int fsal_chdir(unsigned short *dirname) {
  6.   UTF16 *utf16Start = dirname;
  7.   UTF16 *utf16End = dirname + reader_wcslen(dirname) + 1;
  8.   UTF8 *utf8Start = utf8_buf;
  9.   ConversionResult result;
  10.   //convert utf-16 to utf-8
  11.   result = ConvertUTF16toUTF8((const UTF16 **)&utf16Start, utf16End, &utf8Start, 
  12.       (UTF8 *)&(utf8_buf[256]), strictConversion);
  13.   if (result != conversionOK) {
  14.     return 1;
  15.   }
  16.   //pass utf-8 to chdir()
  17.   return chdir((char *)utf8_buf);
  18. }
  19. fsal_dir_handle_t fsal_diropen(unsigned short *path) {
  20.   UTF16 *utf16Start = path;
  21.   UTF16 *utf16End = path + reader_wcslen(path) + 1;
  22.   UTF8 *utf8Start = utf8_buf;
  23.   ConversionResult result;
  24.   //convert utf-16 to utf-8
  25.   result = ConvertUTF16toUTF8((const UTF16 **)&utf16Start, utf16End, &utf8Start, 
  26.       (UTF8 *)&(utf8_buf[256]), strictConversion);
  27.   if (result != conversionOK) {
  28.     return 0;
  29.   }
  30.   //pass utf-8 to diropen()
  31.   return (fsal_dir_handle_t)diropen((char *)utf8_buf);
  32. }
  33. //fetch lfn, if no lfn is found, return an empty filename
  34. int fsal_dirnext(fsal_dir_handle_t hdir, unsigned short *filename, struct stat *st) {
  35.   UTF16 *utf16Start = filename;
  36.   UTF8 *utf8Start = utf8_buf;
  37.   UTF8 *utf8End;
  38.   int ret;
  39.   ConversionResult result;
  40.   ret = dirnext((DIR_ITER *)hdir, (char *)utf8_buf, st);
  41.   utf8End = utf8_buf + strlen((char *)utf8_buf) + 1;
  42.   result = ConvertUTF8toUTF16((const UTF8 **)&utf8Start, utf8End, &utf16Start, 
  43.       &filename[256], strictConversion);
  44.   if (result != conversionOK) {
  45.     filename[0] = 0;
  46.   }
  47.   return ret;
  48. }
  49. int fsal_dirclose(fsal_dir_handle_t hdir) {
  50.   return dirclose((DIR_ITER *)hdir);
  51. }
  52. int fsal_init(void) {
  53.   return fatInitDefault();
  54. }
  55. size_t fsal_read(void *buffer, size_t size, size_t count, fsal_file_handle_t stream) {
  56.   return fread(buffer, size, count, (FILE *)stream);
  57. }
  58. fsal_file_handle_t fsal_open(unsigned short *fn, char *mode) {
  59.   UTF16 *utf16Start = fn;
  60.   UTF16 *utf16End = fn + reader_wcslen(fn) + 1;
  61.   UTF8 *utf8Start = utf8_buf;
  62.   ConversionResult result;
  63.   //convert utf-16 to utf-8
  64.   result = ConvertUTF16toUTF8((const UTF16 **)&utf16Start, utf16End, &utf8Start, 
  65.       (UTF8 *)&(utf8_buf[256]), strictConversion);
  66.   if (result != conversionOK) {
  67.     return 0;
  68.   }
  69.   //pass utf-8 to fopen()
  70.   return (fsal_file_handle_t)fopen((char *)utf8_buf, mode);
  71. }
  72. int fsal_close(fsal_file_handle_t fd) {
  73.   return fclose((FILE *)fd);
  74. }
  75. int fsal_seek(fsal_file_handle_t stream, long offset, int origin) {
  76.   return fseek((FILE *)stream, offset, origin);
  77. }
  78. size_t fsal_write(void *buffer, size_t size, size_t count, fsal_file_handle_t stream) {
  79.   return fwrite(buffer, size, count, (FILE *)stream);
  80. }
  81. int fsal_tell(fsal_file_handle_t stream) {
  82.   return ftell((FILE *)stream);
  83. }
  84. void fsal_rewind(fsal_file_handle_t stream) {
  85.   rewind((FILE *)stream);
  86. }