Revision | 1ebe1976adb135226c5018295c65cef0f1d039ed (tree) |
---|---|
Time | 2019-03-10 22:02:55 |
Author | dhrname <dhrname@user...> |
Commiter | dhrname |
Modify the ST_readFile for the No POSIX mode
@@ -1309,45 +1309,82 @@ uint_fast64_t ST_readFile(ST_Char *name, ST_File_Call callback) | ||
1309 | 1309 | return ST_FILE_FAIL; |
1310 | 1310 | } |
1311 | 1311 | |
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 | + | |
1325 | 1313 | /*ファイルの文字列を格納する配列*/ |
1326 | 1314 | 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 | |
1351 | 1388 | } |
1352 | 1389 | |
1353 | 1390 | /*alloca_tokens 関数 |
@@ -28,6 +28,11 @@ typedef enum { | ||
28 | 28 | /*ファイルを読み書きするときの長さ*/ |
29 | 29 | #define ST_TEXT_LENGTH 1048576 |
30 | 30 | |
31 | +/*ファイルの読み込み方式をPOSIX規格にするかどうか | |
32 | + *msys2のMinGW-64bitではPOSIX規格だとうまくいかなかったので、 | |
33 | + * デフォルトでは使わないようにする*/ | |
34 | +#define ST_IS_NOPOSIX | |
35 | + | |
31 | 36 | /*ファイルの入出力に失敗したときの値*/ |
32 | 37 | #define ST_FILE_FAIL -1 |
33 | 38 |
@@ -33,4 +33,4 @@ | ||
33 | 33 | |
34 | 34 | #include "orderedpair/list/tree/nodelist/ntree.h" |
35 | 35 | |
36 | -#include "class/class.h" | |
36 | +#include "orderedpair/list/tree/nodelist/class/class.h" |