fork download
  1. /*
  2.  * ファイル名を受け取ってファイルサイズ分のメモリを動的確保し、
  3.  * ファイルから読み込んだデータのバッファのポインタを返す関数
  4.  * sizeポインタがNULL出ない場合はsizeにはファイルサイズが入ります。
  5.  * 返されたバッファは必ずfreeで開放することを忘れないこと
  6.  */
  7. void* ReadFile(const char *file, int *size)
  8. {
  9. int file_size, fh;
  10. void *buffer = NULL;
  11.  
  12. file_size = FileRead_size(file);
  13. if (file_size == -1) { /* ファイルサイズ取得失敗 */
  14. printf("Cannot get file size: %s\n", file);
  15. return NULL;
  16. }
  17.  
  18. fh = FileRead_open(file, FALSE);
  19. if (fh == 0) { /* ファイルオープン失敗 */
  20. printf("Cannot open file: %s\n", file);
  21. return NULL;
  22. }
  23.  
  24. /* ファイルサイズ分のメモリを動的確保*/
  25. buffer = malloc(file_size);
  26. if (buffer == NULL) { /* メモリ確保失敗 */
  27. printf("Cannot allocate memory: %s %dbytes\n", file, file_size);
  28. FileRead_close(fh);
  29. return NULL;
  30. }
  31.  
  32. /* ファイルの データを一括で読み込む*/
  33. if (FileRead_read(buffer, file_size, fh) != file_size) { /* ファイル読み込み失敗*/
  34. printf("Cannot read file: %s\n", file);
  35. free(buffer);
  36. FileRead_close(fh);
  37. return NULL;
  38. }
  39.  
  40. if (size != NULL) {
  41. *size = file_size;
  42. }
  43.  
  44. FileRead_close(fh);
  45. return buffer;
  46. }
  47.  
  48. /*
  49.  * ShowSaveDialogの拡張版
  50.  * SaveDetailまではShowSaveDialogと同じ
  51.  * icon0以降は使いたいファイルパス(使わないならNULL)を指定すればOK
  52.  */
  53. int ShowSaveDialogEx(
  54. int mode,
  55. void *buf, unsigned int size,
  56. const char *GameName,
  57. const char *GameTitle, const char *SaveTitle, const char *SaveDetail,
  58. const char *icon0, const char *icon1, const char *pic1, const char *snd0
  59. )
  60. {
  61. void *icon0_buffer = NULL, *icon1_buffer = NULL, *pic1_buffer = NULL;
  62. void *snd0_buffer = NULL;
  63. int file_size, result;
  64.  
  65. /* NULLでないなら各リソースを設定 */
  66. file_size = 0;
  67. if (icon0 != NULL) {
  68. icon0_buffer = ReadFile(icon0, &file_size);
  69. }
  70. SetSaveResource(DXP_SAVE_RESOURCE_ICON0, icon0_buffer, file_size);
  71.  
  72. file_size = 0;
  73. if (icon1 != NULL) {
  74. icon1_buffer = ReadFile(icon1, &file_size);
  75. }
  76. SetSaveResource(DXP_SAVE_RESOURCE_ICON1, icon1_buffer, file_size);
  77.  
  78. file_size = 0;
  79. if (pic1 != NULL) {
  80. pic1_buffer = ReadFile(pic1, &file_size);
  81. }
  82. SetSaveResource(DXP_SAVE_RESOURCE_PIC1, pic1_buffer, file_size);
  83.  
  84. file_size = 0;
  85. if (snd0 != NULL) {
  86. snd0_buffer = ReadFile(snd0, &file_size);
  87. }
  88. SetSaveResource(DXP_SAVE_RESOURCE_SND0, snd0_buffer, file_size);
  89.  
  90. result = ShowSaveDialog(
  91. mode,
  92. buf, size,
  93. GameName,
  94. GameTitle, SaveTitle, SaveDetail
  95. );
  96.  
  97. /* きちんとメモリを開放する */
  98. free(icon0_buffer);
  99. free(icon1_buffer);
  100. free(pic1_buffer);
  101. free(snd0_buffer);
  102.  
  103. return result;
  104. }
  105.  
  106.  
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.c: In function ‘ReadFile’:
prog.c:10:17: error: ‘NULL’ undeclared (first use in this function)
  void *buffer = NULL;
                 ^
prog.c:10:17: note: each undeclared identifier is reported only once for each function it appears in
prog.c:12:2: warning: implicit declaration of function ‘FileRead_size’ [-Wimplicit-function-declaration]
  file_size = FileRead_size(file);
  ^
prog.c:14:3: warning: implicit declaration of function ‘printf’ [-Wimplicit-function-declaration]
   printf("Cannot get file size: %s\n", file);
   ^
prog.c:14:3: warning: incompatible implicit declaration of built-in function ‘printf’ [enabled by default]
prog.c:18:2: warning: implicit declaration of function ‘FileRead_open’ [-Wimplicit-function-declaration]
  fh = FileRead_open(file, FALSE);
  ^
prog.c:18:27: error: ‘FALSE’ undeclared (first use in this function)
  fh = FileRead_open(file, FALSE);
                           ^
prog.c:20:3: warning: incompatible implicit declaration of built-in function ‘printf’ [enabled by default]
   printf("Cannot open file: %s\n", file);
   ^
prog.c:25:2: warning: implicit declaration of function ‘malloc’ [-Wimplicit-function-declaration]
  buffer = malloc(file_size);
  ^
prog.c:25:11: warning: incompatible implicit declaration of built-in function ‘malloc’ [enabled by default]
  buffer = malloc(file_size);
           ^
prog.c:27:3: warning: incompatible implicit declaration of built-in function ‘printf’ [enabled by default]
   printf("Cannot allocate memory: %s %ubytes\n", file, file_size);
   ^
prog.c:28:3: warning: implicit declaration of function ‘FileRead_close’ [-Wimplicit-function-declaration]
   FileRead_close(fh);
   ^
prog.c:33:2: warning: implicit declaration of function ‘FileRead_read’ [-Wimplicit-function-declaration]
  if (FileRead_read(buffer, file_size, fh) != file_size) { /* ファイル読み込み失敗*/
  ^
prog.c:34:3: warning: incompatible implicit declaration of built-in function ‘printf’ [enabled by default]
   printf("Cannot read file: %s\n", file);
   ^
prog.c:35:3: warning: implicit declaration of function ‘free’ [-Wimplicit-function-declaration]
   free(buffer);
   ^
prog.c:35:3: warning: incompatible implicit declaration of built-in function ‘free’ [enabled by default]
prog.c: In function ‘ShowSaveDialogEx’:
prog.c:61:23: error: ‘NULL’ undeclared (first use in this function)
  void *icon0_buffer = NULL, *icon1_buffer = NULL, *pic1_buffer = NULL;
                       ^
prog.c:68:3: warning: implicit declaration of function ‘SetSaveResource’ [-Wimplicit-function-declaration]
   SetSaveResource(DXP_SAVE_RESOURCE_ICON0, icon0_buffer, file_size);
   ^
prog.c:68:19: error: ‘DXP_SAVE_RESOURCE_ICON0’ undeclared (first use in this function)
   SetSaveResource(DXP_SAVE_RESOURCE_ICON0, icon0_buffer, file_size);
                   ^
prog.c:72:19: error: ‘DXP_SAVE_RESOURCE_ICON1’ undeclared (first use in this function)
   SetSaveResource(DXP_SAVE_RESOURCE_ICON1, icon1_buffer, file_size);
                   ^
prog.c:76:19: error: ‘DXP_SAVE_RESOURCE_PIC1’ undeclared (first use in this function)
   SetSaveResource(DXP_SAVE_RESOURCE_PIC1, pic1_buffer, file_size);
                   ^
prog.c:80:19: error: ‘DXP_SAVE_RESOURCE_SND0’ undeclared (first use in this function)
   SetSaveResource(DXP_SAVE_RESOURCE_SND0, snd0_buffer, file_size);
                   ^
prog.c:83:2: warning: implicit declaration of function ‘ShowSaveDialog’ [-Wimplicit-function-declaration]
  result = ShowSaveDialog(
  ^
prog.c:91:2: warning: incompatible implicit declaration of built-in function ‘free’ [enabled by default]
  free(icon0_buffer);
  ^
prog.c:96:2: warning: ‘return’ with a value, in function returning void [enabled by default]
  return result;
  ^
stdout
Standard output is empty