設定ファイル読み込み関数定義ファイル。 [詳細]
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <errno.h>
#include <ctype.h>
#include <math.h>
#include <strings.h>
#include "readconf.h"
マクロ定義 | |
#define | inline |
#define | IS_DELIMITER(c) (strchr(RCDelimiters, c) != NULL) |
指定された文字がデリミタかどうかを真偽値で返します。 [詳細] | |
#define | IS_COMMENT(c) (c == RCCommentChar) |
指定された文字がコメント開始文字かどうかを真偽値で返します。 [詳細] | |
関数 | |
static void | readConf (RCConfItem *items, size_t numItems, FILE *conffp) |
設定ファイルのストリームから設定を読み込み、指定の構造体に格納します。 [詳細] | |
static void | initialize (RCConfItem *items, size_t numItems) |
設定ファイルを読み込む前の初期化を行います。 [詳細] | |
static void | readExpression (RCConfItem *items, size_t numItems, FILE *conffp) |
設定項目の式を読み込みます。 [詳細] | |
static RCConfItem * | findItem (RCConfItem *items, size_t numItems, char *name) |
指定された名前の設定項目を検索します。 [詳細] | |
static char * | readName (FILE *conffp) |
設定ファイルから項目名を読み込みます。 [詳細] | |
static void | readValue (RCConfItem *item, FILE *conffp) |
設定ファイルの値を読み込みます。 [詳細] | |
static void | readNL (FILE *conffp) |
改行文字を読み込みます。 [詳細] | |
static void | readString (RCConfItem *item, FILE *conffp) |
文字列を読み込み、設定項目構造体に登録します。 [詳細] | |
static void | readInteger (RCConfItem *item, FILE *conffp) |
整数値を読み込み、設定項目構造体に登録します。 [詳細] | |
static void | readReal (RCConfItem *item, FILE *conffp) |
実数値を読み込み、設定項目構造体に登録します。 [詳細] | |
static void | readBool (RCConfItem *item, FILE *conffp) |
真偽値を読み込み、設定項目構造体に登録します。 [詳細] | |
static bool | convertStringToInteger (const char *name, const char *string, RCConvertor convertor, RCConfValue *value) |
文字列を整数値に変換します。 [詳細] | |
static bool | convertStringToReal (const char *name, const char *string, RCConvertor convertor, RCConfValue *value) |
文字列を実数値に変換します。 [詳細] | |
static bool | convertStringToBool (const char *name, const char *string, RCConfValue *value) |
文字列を真偽値に変換します。 [詳細] | |
static char * | readQuotedString (FILE *conffp) |
引用符で囲まれた文字列を読み込みます。 [詳細] | |
static char * | readBareString (FILE *conffp) |
コメント開始文字か改行文字が現れるまでを文字列として読み込みます。 [詳細] | |
static void | skipToEndOfLine (FILE *conffp) |
改行文字の直前までを読み捨てます。 [詳細] | |
static void | skipWhitespaces (FILE *conffp) |
連続する空白文字を読み捨てます。 [詳細] | |
static void | addError (RCErrorNo errorNo, char *format,...) |
指定されたエラー番号と文字列を、エラー情報構造体配列に追加します。 [詳細] | |
bool | readconf (RCConfItem *items, size_t numItems, const char *confPath) |
指定の設定ファイルから設定を読み込み、指定された構造体配列に格納します。 [詳細] | |
void | RCFreeStringValueInItems (RCConfItem *items, size_t numItems) |
指定された設定項目構造体配列の文字列を解放します。 [詳細] | |
void | RCFreeRaisedErrors (void) |
readconf() による読み込み処理で発生したエラー情報構造体配列を解放します。 [詳細] | |
char * | RCDuplicateString (const char *str) |
指定された文字列を複製します。 [詳細] | |
static char * | shrinkString (char *str) |
文字列が格納されているメモリ領域を文字列の長さで切り詰めます。 [詳細] | |
static void | setValue (RCConfItem *item, RCConfValue value) |
指定された項目に値を設定します。 [詳細] | |
変数 | |
size_t | RCNumRaisedErrors = 0 |
エラー情報数。 [詳細] | |
RCError * | RCRaisedErrors = NULL |
エラー情報格納配列。 [詳細] | |
size_t | RCMaxNameLength = 64 |
設定ファイルから項目名を読み込む際の最大の長さ。 [詳細] | |
size_t | RCMaxStringLength = 128 |
設定ファイルから文字列を読み込む際の最大の長さ。 [詳細] | |
static size_t | RCReadConfLineNo = 0 |
設定ファイルを読み込んでいる時の行番号。 [詳細] | |
static size_t | RCRaisedErrorArrayCapacity = 0 |
設定ファイル読み込み中に発生したエラーを格納する配列のサイズ。 [詳細] | |
static const size_t | RCMaxReasonLength = 256 |
エラーの原因の文字列の最大の長さ。 [詳細] | |
static const char *const | RCDelimiters = " \t\r" |
デリミタ文字の集合。 [詳細] | |
static const char | RCCommentChar = '#' |
コメント開始文字。 [詳細] | |
#define inline |
readconf.c の 29 行で定義されています。
#define IS_COMMENT | ( | c | ) | (c == RCCommentChar) |
指定された文字がコメント開始文字かどうかを真偽値で返します。
readconf.c の 70 行で定義されています。
参照元 readBareString(), readName(), と skipWhitespaces().
#define IS_DELIMITER | ( | c | ) | (strchr(RCDelimiters, c) != NULL) |
指定された文字がデリミタかどうかを真偽値で返します。
readconf.c の 66 行で定義されています。
参照元 readBareString(), readName(), と skipWhitespaces().
|
static |
指定されたエラー番号と文字列を、エラー情報構造体配列に追加します。
errorNo | エラー番号。 |
format | エラー理由書式文字列。 |
... | format 引数 |
readconf.c の 912 行で定義されています。
参照先 RCError::errorNo, RCError::lineNo, RCMaxReasonLength, RCNumRaisedErrors, RCRaisedErrorArrayCapacity, RCReadConfLineNo, RCError::reason, と shrinkString().
参照元 convertStringToBool(), convertStringToInteger(), convertStringToReal(), initialize(), readBareString(), readconf(), readExpression(), readName(), readNL(), readQuotedString(), と readValue().
|
static |
文字列を真偽値に変換します。
[in] | name | 変換する設定項目の名前。 |
[in] | string | 変換する文字列。 |
[out] | value | 変換した真偽値を格納する変数へのポインタ。 |
readconf.c の 709 行で定義されています。
参照先 addError(), RCConfValue::boolean, ELEMENTSOF, と RCErrorBoolValue.
参照元 initialize(), と readBool().
|
static |
文字列を整数値に変換します。
[in] | name | 変換する設定項目の名前。 |
[in] | string | 変換する文字列。 |
[in] | convertor | 変換関数。 |
[out] | value | 変換した真偽値を格納する変数ポインタ。 |
readconf.c の 632 行で定義されています。
参照先 addError(), RCConfValue::integer, RCErrorConstantConversion, RCErrorNumberFormat, と RCValueTypeInteger.
参照元 initialize(), と readInteger().
|
static |
文字列を実数値に変換します。
[in] | name | 変換する設定項目の名前。 |
[in] | string | 変換する文字列。 |
[in] | convertor | 変換関数。 |
[out] | value | 変換した真偽値を格納する変数ポインタ。 |
readconf.c の 671 行で定義されています。
参照先 addError(), RCErrorConstantConversion, RCErrorNumberFormat, RCValueTypeReal, と RCConfValue::real.
参照元 initialize(), と readReal().
|
static |
指定された名前の設定項目を検索します。
[in] | items | 検索対象の設定項目配列。 |
[in] | numItems | 検索対象の設定項目の数。 |
[in] | name | 検索する名前。 |
readconf.c の 333 行で定義されています。
参照先 RCConfItem::name.
参照元 readExpression().
|
static |
設定ファイルを読み込む前の初期化を行います。
[in,out] | items | 初期化する設定項目の構造体配列。 |
[in] | numItems | 設定項目の数。 |
readconf.c の 205 行で定義されています。
参照先 addError(), RCConfValue::boolean, RCConfItem::convertor, convertStringToBool(), convertStringToInteger(), convertStringToReal(), RCConfItem::defaultAsString, RCConfItem::defaultValue, RCConfValue::integer, RCConfItem::lineNo, RCConfItem::name, RCDuplicateString(), RCErrorNoMemory, RCReadConfLineNo, RCValueTypeBool, RCValueTypeInteger, RCValueTypeReal, RCValueTypeString, RCConfValue::real, RCConfValue::string, RCConfItem::type, と RCConfItem::value.
参照元 readconf().
char* RCDuplicateString | ( | const char * | str | ) |
指定された文字列を複製します。
str | 複製する文字列。 |
readconf.c の 159 行で定義されています。
参照元 initialize(), setValue(), と shrinkString().
|
static |
コメント開始文字か改行文字が現れるまでを文字列として読み込みます。
読み込んだ文字列の末尾の空白文字は取り除きます。
読み込む文字列の最大長は、グローバル変数 RCMaxStringLength に格納された値です。 この値は終端文字 \0
を含む長さになります。 読み込む際に、この変数の長さのバッファを割り当てて読み込みに使用します。 読み込んだ後に、読み込んだ長さ分の文字列領域を割り当てて、 バッファからコピーすることで文字列の使用メモリ容量を節約します。
conffp | 設定ファイルストリーム。 |
readconf.c の 811 行で定義されています。
参照先 addError(), IS_COMMENT, IS_DELIMITER, RCErrorNoMemory, RCErrorStringTooLong, RCErrorSyntax, RCMaxStringLength, shrinkString(), と skipToEndOfLine().
参照元 readBool(), readInteger(), readNL(), readReal(), と readString().
|
static |
真偽値を読み込み、設定項目構造体に登録します。
真偽値を構成する文字列以外を読み込んだ場合は、 エラーにして登録は行いません。
例えば次のような文字列は真偽値です。大文字と小文字は同一視します。
true, false
yes, no
[out] | item | 読み込んだ真偽値を登録する構造体。 |
[in] | conffp | 設定ファイルストリーム。 |
readconf.c の 605 行で定義されています。
参照先 RCConfValue::boolean, convertStringToBool(), RCConfItem::defaultValue, RCConfItem::lineNo, RCConfItem::name, RCReadConfLineNo, readBareString(), skipWhitespaces(), と RCConfItem::value.
参照元 readValue().
|
static |
設定ファイルのストリームから設定を読み込み、指定の構造体に格納します。
[in,out] | items | 読み込むべき設定項目の名前とデフォルト値を設定した 構造体配列へのポインタ。 読み込んだ設定項目の値を格納するのにも使用されます。 |
[in] | numItems | 構造体配列 items の項目数。 |
[in] | conffp | 読み込む設定ファイルのストリーム。 |
readconf.c の 185 行で定義されています。
参照先 RCReadConfLineNo, readExpression(), と readNL().
参照元 readconf().
|
static |
設定項目の式を読み込みます。
[in,out] | items | 読み込んだ式の値を格納する設定項目配列。 |
[in] | numItems | 設定項目配列の要素数。 |
[in] | conffp | 設定式を読み込むストリーム。 |
readconf.c の 281 行で定義されています。
参照先 addError(), findItem(), RCConfItem::lineNo, RCErrorRedefinition, RCErrorSyntax, RCErrorUnexpectedName, readName(), readValue(), skipToEndOfLine(), と skipWhitespaces().
参照元 readConf().
|
static |
整数値を読み込み、設定項目構造体に登録します。
整数を構成する文字以外を読み込んだ場合は、 エラーにして登録は行いません。例えば「.」が含まれる場合は、 整数ではなく実数を指定したということでエラーになります。
整数値として「0」や「0x」を接頭辞とする数値を指定できます。 「0」で始まる場合は 8 進数です。そのため「8, 9」が続いた場合は、 エラーになります。また、「0x」で始まる場合は 16 進数です。
[out] | item | 読み込んだ整数値を登録する構造体。 |
[in] | conffp | 設定ファイルストリーム。 |
readconf.c の 540 行で定義されています。
参照先 RCConfItem::convertor, convertStringToInteger(), RCConfItem::defaultValue, RCConfValue::integer, RCConfItem::lineNo, RCConfItem::name, RCReadConfLineNo, readBareString(), skipWhitespaces(), と RCConfItem::value.
参照元 readValue().
|
static |
設定ファイルから項目名を読み込みます。
conffp | 読み込む設定ファイルストリーム。 |
readconf.c の 363 行で定義されています。
参照先 addError(), IS_COMMENT, IS_DELIMITER, RCErrorNameTooLong, RCErrorNoMemory, RCErrorSyntax, RCMaxNameLength, shrinkString(), と skipToEndOfLine().
参照元 readExpression().
|
static |
改行文字を読み込みます。
空白文字を読み飛ばした後に改行文字が現れなければ、 エラーになります。
conffp | 設定ファイルストリーム。 |
readconf.c の 469 行で定義されています。
参照先 addError(), RCErrorSyntax, RCReadConfLineNo, readBareString(), skipToEndOfLine(), と skipWhitespaces().
参照元 readConf().
|
static |
引用符で囲まれた文字列を読み込みます。
両端の引用符は取り除きます。
読み込む文字列の最大長は、グローバル変数 RCMaxStringLength に格納された値です。 この値は終端文字 \0
を含む長さになります。 読み込む際に、この変数の長さのバッファを割り当てて読み込みに使用します。 読み込んだ後に、読み込んだ長さ分の文字列領域を割り当てて、 バッファからコピーすることで文字列の使用メモリ容量を節約します。
conffp | 設定ファイルストリーム。 |
readconf.c の 752 行で定義されています。
参照先 addError(), RCErrorNoMemory, RCErrorStringTooLong, RCErrorSyntax, RCMaxStringLength, shrinkString(), と skipToEndOfLine().
参照元 readString().
|
static |
実数値を読み込み、設定項目構造体に登録します。
実数を構成する文字以外を読み込んだ場合は、 エラーにして登録は行いません。
実数は次の正規表現で表すことが出来ます。
[-+]?[0-9]*(.[0-9]*([eE][-+]?[0-9]+)?)?
例えば次のような文字列は実数値です。
3.14
+0.
-.05
141421356e-8
[out] | item | 読み込んだ実数値を登録する構造体。 |
[in] | conffp | 設定ファイルストリーム。 |
readconf.c の 575 行で定義されています。
参照先 RCConfItem::convertor, convertStringToReal(), RCConfItem::defaultValue, RCConfItem::lineNo, RCConfItem::name, RCReadConfLineNo, readBareString(), RCConfValue::real, skipWhitespaces(), と RCConfItem::value.
参照元 readValue().
|
static |
文字列を読み込み、設定項目構造体に登録します。
読み込む文字列は、引用符で囲まれている場合、 両端の引用符を取り除きます。引用符で囲まれていない場合は、 コメント開始文字か改行文字の直前までを読み込み、 末尾の空白文字を取り除きます。
[out] | item | 読み込んだ文字列を登録する構造体。 |
[in] | conffp | 設定ファイルストリーム。 |
readconf.c の 502 行で定義されています。
参照先 RCConfItem::lineNo, RCReadConfLineNo, readBareString(), readQuotedString(), skipWhitespaces(), RCConfValue::string, と RCConfItem::value.
参照元 readValue().
|
static |
設定ファイルの値を読み込みます。
[in,out] | item | 読み込んだ値を格納する設定項目構造体。 |
[in] | conffp | 設定ファイルストリーム。 |
readconf.c の 433 行で定義されています。
参照先 addError(), RCConfItem::defaultValue, RCConfItem::name, RCErrorValidationFailed, RCValueTypeBool, RCValueTypeInteger, RCValueTypeReal, RCValueTypeString, readBool(), readInteger(), readReal(), readString(), setValue(), RCConfItem::type, RCConfItem::validator, と RCConfItem::value.
参照元 readExpression().
|
inlinestatic |
指定された項目に値を設定します。
item | 値を設定する項目構造体。 |
value | 設定する値。 |
readconf.c の 414 行で定義されています。
参照先 RCDuplicateString(), RCValueTypeString, RCConfValue::string, RCConfItem::type, と RCConfItem::value.
参照元 readValue().
|
inlinestatic |
文字列が格納されているメモリ領域を文字列の長さで切り詰めます。
str | 文字列が格納されているメモリ領域。 |
readconf.c の 351 行で定義されています。
参照先 RCDuplicateString().
参照元 addError(), readBareString(), readName(), と readQuotedString().
|
static |
改行文字の直前までを読み捨てます。
conffp | 設定ファイルストリーム。 |
readconf.c の 866 行で定義されています。
参照元 readBareString(), readExpression(), readName(), readNL(), readQuotedString(), と skipWhitespaces().
|
static |
連続する空白文字を読み捨てます。
コメント開始文字が現れた場合は、 続くコメントを空白と見なして改行文字の前までを読み捨てます。
conffp | 設定ファイルストリーム。 |
readconf.c の 887 行で定義されています。
参照先 IS_COMMENT, IS_DELIMITER, と skipToEndOfLine().
参照元 readBool(), readExpression(), readInteger(), readNL(), readReal(), と readString().
|
static |
コメント開始文字。
readconf.c の 61 行で定義されています。
|
static |
デリミタ文字の集合。
readconf.c の 57 行で定義されています。
|
static |
|
static |
|
static |
設定ファイルを読み込んでいる時の行番号。
readconf.c の 45 行で定義されています。
参照元 addError(), initialize(), readBool(), readConf(), readInteger(), readNL(), readReal(), と readString().