readconf  1.6
設定ファイル読み込みモジュール
 全て データ構造 ファイル 関数 変数 型定義 列挙型 列挙型の値 マクロ定義 グループ
マクロ定義 | 関数 | 変数
readconf.c

設定ファイル読み込み関数定義ファイル。 [詳細]

#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"
readconf.cのインクルード依存関係図

ソースコードを見る。

マクロ定義

#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 RCConfItemfindItem (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
 エラー情報数。 [詳細]
 
RCErrorRCRaisedErrors = 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 = '#'
 コメント開始文字。 [詳細]
 

説明

設定ファイル読み込み関数定義ファイル。

作者
tsntsumi
バージョン
1.6
から
v1.0 2013/12

readconf.c で定義されています。

マクロ定義

#define inline

readconf.c29 行で定義されています。

#define IS_COMMENT (   c)    (c == RCCommentChar)

指定された文字がコメント開始文字かどうかを真偽値で返します。

readconf.c70 行で定義されています。

参照元 readBareString(), readName(), と skipWhitespaces().

#define IS_DELIMITER (   c)    (strchr(RCDelimiters, c) != NULL)

指定された文字がデリミタかどうかを真偽値で返します。

readconf.c66 行で定義されています。

参照元 readBareString(), readName(), と skipWhitespaces().

関数

static void addError ( RCErrorNo  errorNo,
char *  format,
  ... 
)
static

指定されたエラー番号と文字列を、エラー情報構造体配列に追加します。

引数
errorNoエラー番号。
formatエラー理由書式文字列。
...format 引数

readconf.c912 行で定義されています。

参照先 RCError::errorNo, RCError::lineNo, RCMaxReasonLength, RCNumRaisedErrors, RCRaisedErrorArrayCapacity, RCReadConfLineNo, RCError::reason, と shrinkString().

参照元 convertStringToBool(), convertStringToInteger(), convertStringToReal(), initialize(), readBareString(), readconf(), readExpression(), readName(), readNL(), readQuotedString(), と readValue().

関数の呼び出しグラフ:

呼出しグラフ:

static bool convertStringToBool ( const char *  name,
const char *  string,
RCConfValue value 
)
static

文字列を真偽値に変換します。

引数
[in]name変換する設定項目の名前。
[in]string変換する文字列。
[out]value変換した真偽値を格納する変数へのポインタ。
戻り値
変換に成功したら true 、変換できなかったら false 。

readconf.c709 行で定義されています。

参照先 addError(), RCConfValue::boolean, ELEMENTSOF, と RCErrorBoolValue.

参照元 initialize(), と readBool().

関数の呼び出しグラフ:

呼出しグラフ:

static bool convertStringToInteger ( const char *  name,
const char *  string,
RCConvertor  convertor,
RCConfValue value 
)
static

文字列を整数値に変換します。

引数
[in]name変換する設定項目の名前。
[in]string変換する文字列。
[in]convertor変換関数。
[out]value変換した真偽値を格納する変数ポインタ。
戻り値
変換に成功したら true 、変換できなかったら false 。

readconf.c632 行で定義されています。

参照先 addError(), RCConfValue::integer, RCErrorConstantConversion, RCErrorNumberFormat, と RCValueTypeInteger.

参照元 initialize(), と readInteger().

関数の呼び出しグラフ:

呼出しグラフ:

static bool convertStringToReal ( const char *  name,
const char *  string,
RCConvertor  convertor,
RCConfValue value 
)
static

文字列を実数値に変換します。

引数
[in]name変換する設定項目の名前。
[in]string変換する文字列。
[in]convertor変換関数。
[out]value変換した真偽値を格納する変数ポインタ。
戻り値
変換に成功したら true 、変換できなかったら false 。

readconf.c671 行で定義されています。

参照先 addError(), RCErrorConstantConversion, RCErrorNumberFormat, RCValueTypeReal, と RCConfValue::real.

参照元 initialize(), と readReal().

関数の呼び出しグラフ:

呼出しグラフ:

static RCConfItem * findItem ( RCConfItem items,
size_t  numItems,
char *  name 
)
static

指定された名前の設定項目を検索します。

引数
[in]items検索対象の設定項目配列。
[in]numItems検索対象の設定項目の数。
[in]name検索する名前。
戻り値
見つかった設定項目。見つからなかったら NULL。

readconf.c333 行で定義されています。

参照先 RCConfItem::name.

参照元 readExpression().

呼出しグラフ:

static void initialize ( RCConfItem items,
size_t  numItems 
)
static

設定ファイルを読み込む前の初期化を行います。

  • 行番号を 0 に設定。
  • デフォルト値を初期値として設定。
  • 定義行番号を 0 に設定。
引数
[in,out]items初期化する設定項目の構造体配列。
[in]numItems設定項目の数。

readconf.c205 行で定義されています。

参照先 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.c159 行で定義されています。

参照元 initialize(), setValue(), と shrinkString().

呼出しグラフ:

static char * readBareString ( FILE *  conffp)
static

コメント開始文字か改行文字が現れるまでを文字列として読み込みます。

読み込んだ文字列の末尾の空白文字は取り除きます。

読み込む文字列の最大長は、グローバル変数 RCMaxStringLength に格納された値です。 この値は終端文字 \0 を含む長さになります。 読み込む際に、この変数の長さのバッファを割り当てて読み込みに使用します。 読み込んだ後に、読み込んだ長さ分の文字列領域を割り当てて、 バッファからコピーすることで文字列の使用メモリ容量を節約します。

引数
conffp設定ファイルストリーム。
戻り値
読み込んだ文字列。エラーが発生した場合は NULL。

readconf.c811 行で定義されています。

参照先 addError(), IS_COMMENT, IS_DELIMITER, RCErrorNoMemory, RCErrorStringTooLong, RCErrorSyntax, RCMaxStringLength, shrinkString(), と skipToEndOfLine().

参照元 readBool(), readInteger(), readNL(), readReal(), と readString().

関数の呼び出しグラフ:

呼出しグラフ:

static void readBool ( RCConfItem item,
FILE *  conffp 
)
static

真偽値を読み込み、設定項目構造体に登録します。

真偽値を構成する文字列以外を読み込んだ場合は、 エラーにして登録は行いません。

例えば次のような文字列は真偽値です。大文字と小文字は同一視します。

  • true, false
  • yes, no
引数
[out]item読み込んだ真偽値を登録する構造体。
[in]conffp設定ファイルストリーム。

readconf.c605 行で定義されています。

参照先 RCConfValue::boolean, convertStringToBool(), RCConfItem::defaultValue, RCConfItem::lineNo, RCConfItem::name, RCReadConfLineNo, readBareString(), skipWhitespaces(), と RCConfItem::value.

参照元 readValue().

関数の呼び出しグラフ:

呼出しグラフ:

static void readConf ( RCConfItem items,
size_t  numItems,
FILE *  conffp 
)
static

設定ファイルのストリームから設定を読み込み、指定の構造体に格納します。

引数
[in,out]items読み込むべき設定項目の名前とデフォルト値を設定した 構造体配列へのポインタ。 読み込んだ設定項目の値を格納するのにも使用されます。
[in]numItems構造体配列 items の項目数。
[in]conffp読み込む設定ファイルのストリーム。

readconf.c185 行で定義されています。

参照先 RCReadConfLineNo, readExpression(), と readNL().

参照元 readconf().

関数の呼び出しグラフ:

呼出しグラフ:

static void readExpression ( RCConfItem items,
size_t  numItems,
FILE *  conffp 
)
static

設定項目の式を読み込みます。

引数
[in,out]items読み込んだ式の値を格納する設定項目配列。
[in]numItems設定項目配列の要素数。
[in]conffp設定式を読み込むストリーム。

readconf.c281 行で定義されています。

参照先 addError(), findItem(), RCConfItem::lineNo, RCErrorRedefinition, RCErrorSyntax, RCErrorUnexpectedName, readName(), readValue(), skipToEndOfLine(), と skipWhitespaces().

参照元 readConf().

関数の呼び出しグラフ:

呼出しグラフ:

static void readInteger ( RCConfItem item,
FILE *  conffp 
)
static

整数値を読み込み、設定項目構造体に登録します。

整数を構成する文字以外を読み込んだ場合は、 エラーにして登録は行いません。例えば「.」が含まれる場合は、 整数ではなく実数を指定したということでエラーになります。

整数値として「0」や「0x」を接頭辞とする数値を指定できます。 「0」で始まる場合は 8 進数です。そのため「8, 9」が続いた場合は、 エラーになります。また、「0x」で始まる場合は 16 進数です。

引数
[out]item読み込んだ整数値を登録する構造体。
[in]conffp設定ファイルストリーム。

readconf.c540 行で定義されています。

参照先 RCConfItem::convertor, convertStringToInteger(), RCConfItem::defaultValue, RCConfValue::integer, RCConfItem::lineNo, RCConfItem::name, RCReadConfLineNo, readBareString(), skipWhitespaces(), と RCConfItem::value.

参照元 readValue().

関数の呼び出しグラフ:

呼出しグラフ:

static char * readName ( FILE *  conffp)
static

設定ファイルから項目名を読み込みます。

引数
conffp読み込む設定ファイルストリーム。
戻り値
読み込んだ項目名。

readconf.c363 行で定義されています。

参照先 addError(), IS_COMMENT, IS_DELIMITER, RCErrorNameTooLong, RCErrorNoMemory, RCErrorSyntax, RCMaxNameLength, shrinkString(), と skipToEndOfLine().

参照元 readExpression().

関数の呼び出しグラフ:

呼出しグラフ:

static void readNL ( FILE *  conffp)
static

改行文字を読み込みます。

空白文字を読み飛ばした後に改行文字が現れなければ、 エラーになります。

引数
conffp設定ファイルストリーム。

readconf.c469 行で定義されています。

参照先 addError(), RCErrorSyntax, RCReadConfLineNo, readBareString(), skipToEndOfLine(), と skipWhitespaces().

参照元 readConf().

関数の呼び出しグラフ:

呼出しグラフ:

static char * readQuotedString ( FILE *  conffp)
static

引用符で囲まれた文字列を読み込みます。

両端の引用符は取り除きます。

読み込む文字列の最大長は、グローバル変数 RCMaxStringLength に格納された値です。 この値は終端文字 \0 を含む長さになります。 読み込む際に、この変数の長さのバッファを割り当てて読み込みに使用します。 読み込んだ後に、読み込んだ長さ分の文字列領域を割り当てて、 バッファからコピーすることで文字列の使用メモリ容量を節約します。

引数
conffp設定ファイルストリーム。
戻り値
読み込んだ文字列。エラーが発生した場合は NULL。

readconf.c752 行で定義されています。

参照先 addError(), RCErrorNoMemory, RCErrorStringTooLong, RCErrorSyntax, RCMaxStringLength, shrinkString(), と skipToEndOfLine().

参照元 readString().

関数の呼び出しグラフ:

呼出しグラフ:

static void readReal ( RCConfItem item,
FILE *  conffp 
)
static

実数値を読み込み、設定項目構造体に登録します。

実数を構成する文字以外を読み込んだ場合は、 エラーにして登録は行いません。

実数は次の正規表現で表すことが出来ます。

  • [-+]?[0-9]*(.[0-9]*([eE][-+]?[0-9]+)?)?

例えば次のような文字列は実数値です。

  • 3.14
  • +0.
  • -.05
  • 141421356e-8
引数
[out]item読み込んだ実数値を登録する構造体。
[in]conffp設定ファイルストリーム。

readconf.c575 行で定義されています。

参照先 RCConfItem::convertor, convertStringToReal(), RCConfItem::defaultValue, RCConfItem::lineNo, RCConfItem::name, RCReadConfLineNo, readBareString(), RCConfValue::real, skipWhitespaces(), と RCConfItem::value.

参照元 readValue().

関数の呼び出しグラフ:

呼出しグラフ:

static void readString ( RCConfItem item,
FILE *  conffp 
)
static

文字列を読み込み、設定項目構造体に登録します。

読み込む文字列は、引用符で囲まれている場合、 両端の引用符を取り除きます。引用符で囲まれていない場合は、 コメント開始文字か改行文字の直前までを読み込み、 末尾の空白文字を取り除きます。

引数
[out]item読み込んだ文字列を登録する構造体。
[in]conffp設定ファイルストリーム。

readconf.c502 行で定義されています。

参照先 RCConfItem::lineNo, RCReadConfLineNo, readBareString(), readQuotedString(), skipWhitespaces(), RCConfValue::string, と RCConfItem::value.

参照元 readValue().

関数の呼び出しグラフ:

呼出しグラフ:

static void readValue ( RCConfItem item,
FILE *  conffp 
)
static

設定ファイルの値を読み込みます。

引数
[in,out]item読み込んだ値を格納する設定項目構造体。
[in]conffp設定ファイルストリーム。
戻り値
読み込んだ設定ファイルを格納した設定項目構造体へのポインタ。

readconf.c433 行で定義されています。

参照先 addError(), RCConfItem::defaultValue, RCConfItem::name, RCErrorValidationFailed, RCValueTypeBool, RCValueTypeInteger, RCValueTypeReal, RCValueTypeString, readBool(), readInteger(), readReal(), readString(), setValue(), RCConfItem::type, RCConfItem::validator, と RCConfItem::value.

参照元 readExpression().

関数の呼び出しグラフ:

呼出しグラフ:

static void setValue ( RCConfItem item,
RCConfValue  value 
)
inlinestatic

指定された項目に値を設定します。

引数
item値を設定する項目構造体。
value設定する値。

readconf.c414 行で定義されています。

参照先 RCDuplicateString(), RCValueTypeString, RCConfValue::string, RCConfItem::type, と RCConfItem::value.

参照元 readValue().

関数の呼び出しグラフ:

呼出しグラフ:

static char* shrinkString ( char *  str)
inlinestatic

文字列が格納されているメモリ領域を文字列の長さで切り詰めます。

引数
str文字列が格納されているメモリ領域。
戻り値
切り詰めた文字列。

readconf.c351 行で定義されています。

参照先 RCDuplicateString().

参照元 addError(), readBareString(), readName(), と readQuotedString().

関数の呼び出しグラフ:

呼出しグラフ:

static void skipToEndOfLine ( FILE *  conffp)
static

改行文字の直前までを読み捨てます。

引数
conffp設定ファイルストリーム。

readconf.c866 行で定義されています。

参照元 readBareString(), readExpression(), readName(), readNL(), readQuotedString(), と skipWhitespaces().

呼出しグラフ:

static void skipWhitespaces ( FILE *  conffp)
static

連続する空白文字を読み捨てます。

コメント開始文字が現れた場合は、 続くコメントを空白と見なして改行文字の前までを読み捨てます。

引数
conffp設定ファイルストリーム。

readconf.c887 行で定義されています。

参照先 IS_COMMENT, IS_DELIMITER, と skipToEndOfLine().

参照元 readBool(), readExpression(), readInteger(), readNL(), readReal(), と readString().

関数の呼び出しグラフ:

呼出しグラフ:

変数

const char RCCommentChar = '#'
static

コメント開始文字。

readconf.c61 行で定義されています。

const char* const RCDelimiters = " \t\r"
static

デリミタ文字の集合。

readconf.c57 行で定義されています。

const size_t RCMaxReasonLength = 256
static

エラーの原因の文字列の最大の長さ。

readconf.c53 行で定義されています。

参照元 addError().

size_t RCRaisedErrorArrayCapacity = 0
static

設定ファイル読み込み中に発生したエラーを格納する配列のサイズ。

readconf.c49 行で定義されています。

参照元 addError(), と RCFreeRaisedErrors().

size_t RCReadConfLineNo = 0
static

設定ファイルを読み込んでいる時の行番号。

readconf.c45 行で定義されています。

参照元 addError(), initialize(), readBool(), readConf(), readInteger(), readNL(), readReal(), と readString().