• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

Commit MetaInfo

Revision1ebe1976adb135226c5018295c65cef0f1d039ed (tree)
Time2019-03-10 22:02:55
Authordhrname <dhrname@user...>
Commiterdhrname

Log Message

Modify the ST_readFile for the No POSIX mode

Change Summary

Incremental Difference

--- a/source_code/shadowstar.c
+++ b/source_code/shadowstar.c
@@ -1309,45 +1309,82 @@ uint_fast64_t ST_readFile(ST_Char *name, ST_File_Call callback)
13091309 return ST_FILE_FAIL;
13101310 }
13111311
1312- /*POSIX規格のシステムコールを使って、ファイルを出力*/
1313-
1314- /*ファイルディスクリプタ
1315- * 該当するファイルがなければ、新規作成*/
1316- int fd = open(name, O_RDONLY|O_CREAT, 0644);
1317-
1318- if ( ST_FILE_FAIL == fd )
1319- {
1320- /*ファイルを開くことを失敗した場合*/
1321- eprint_log("Fail to open that file\n");
1322- return ST_FILE_FAIL;
1323- }
1324-
1312+
13251313 /*ファイルの文字列を格納する配列*/
13261314 ST_Char s[ST_TEXT_LENGTH] = {'\0'};
1327-
1328- /*ファイルの長さ*/
1329- ssize_t filelength = read(fd, s, sizeof(s));
1330-
1331- if (ST_FILE_FAIL == filelength)
1332- {
1333- /*ファイルの読み込みを失敗した場合*/
1334- eprint_log("Fail to read that file\n");
1335- close(fd);
1336- return ST_FILE_FAIL;
1337- }
1338- else
1339- {
1340- callback(s, (uint_fast64_t)filelength);
1341- }
1342-
1343- if ( ST_FILE_FAIL == close(fd) )
1344- {
1345- /*ファイルを閉じることを失敗した場合*/
1346- eprint_log("Fail to close that file\n");
1347- return ST_FILE_FAIL;
1348- }
1349-
1350- return (uint_fast64_t)filelength;
1315+
1316+ #ifdef ST_IS_NOPOSIX
1317+ /*テキストファイルをバイナリファイルとして読み込む*/
1318+ FILE *fp = fopen(name, "rb");
1319+
1320+ if (NULL == fp)
1321+ {
1322+ /*ファイルを開くことを失敗した場合*/
1323+ eprint_log("Fail to open that file\n");
1324+ return ST_FILE_FAIL;
1325+ }
1326+
1327+ /*ファイルの長さ*/
1328+ size_t filelength = fread(s, sizeof(ST_Char), ST_TEXT_LENGTH, fp);
1329+
1330+ if ( ferror(fp) )
1331+ {
1332+ /*ファイルの読み込みに失敗した場合*/
1333+ eprint_log("Fail to read that file\n");
1334+ fclose(fp);
1335+ return ST_FILE_FAIL;
1336+ }
1337+ else
1338+ {
1339+ callback(s, (uint_fast64_t)filelength);
1340+ }
1341+
1342+ if ( EOF == fclose(fp) )
1343+ {
1344+ /*ファイルを閉じることに失敗した場合*/
1345+ eprint_log("Fail to close that file\n");
1346+ return ST_FILE_FAIL;
1347+ }
1348+
1349+ return (uint_fast64_t)filelength;
1350+ #else
1351+ /*POSIX規格のシステムコールを使って、ファイルを出力*/
1352+
1353+ /*ファイルディスクリプタ
1354+ * 該当するファイルがなければ、新規作成*/
1355+ int fd = open(name, O_RDONLY|O_CREAT, 0644);
1356+
1357+ if ( ST_FILE_FAIL == fd )
1358+ {
1359+ /*ファイルを開くことを失敗した場合*/
1360+ eprint_log("Fail to open that file\n");
1361+ return ST_FILE_FAIL;
1362+ }
1363+
1364+ /*ファイルの長さ*/
1365+ ssize_t filelength = read(fd, s, sizeof(s));
1366+
1367+ if (ST_FILE_FAIL == filelength)
1368+ {
1369+ /*ファイルの読み込みを失敗した場合*/
1370+ eprint_log("Fail to read that file\n");
1371+ close(fd);
1372+ return ST_FILE_FAIL;
1373+ }
1374+ else
1375+ {
1376+ callback(s, (uint_fast64_t)filelength);
1377+ }
1378+
1379+ if ( ST_FILE_FAIL == close(fd) )
1380+ {
1381+ /*ファイルを閉じることを失敗した場合*/
1382+ eprint_log("Fail to close that file\n");
1383+ return ST_FILE_FAIL;
1384+ }
1385+
1386+ return (uint_fast64_t)filelength;
1387+ #endif
13511388 }
13521389
13531390 /*alloca_tokens 関数
--- a/source_code/shadowstar.h
+++ b/source_code/shadowstar.h
@@ -28,6 +28,11 @@ typedef enum {
2828 /*ファイルを読み書きするときの長さ*/
2929 #define ST_TEXT_LENGTH 1048576
3030
31+/*ファイルの読み込み方式をPOSIX規格にするかどうか
32+ *msys2のMinGW-64bitではPOSIX規格だとうまくいかなかったので、
33+ * デフォルトでは使わないようにする*/
34+#define ST_IS_NOPOSIX
35+
3136 /*ファイルの入出力に失敗したときの値*/
3237 #define ST_FILE_FAIL -1
3338
Binary files a/source_code/shadowstar.o and b/source_code/shadowstar.o differ
--- a/source_code/star.h
+++ b/source_code/star.h
@@ -33,4 +33,4 @@
3333
3434 #include "orderedpair/list/tree/nodelist/ntree.h"
3535
36-#include "class/class.h"
36+#include "orderedpair/list/tree/nodelist/class/class.h"