X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=CHNOSProject%2Fchn%2Fchnlib02.c;h=39d5d22bba736badc3f34d075fb3f6bd784458a1;hb=f1b1537c613260de4c7e0bb7f11bac11ca96a759;hp=5a3e48c10fce38155681d821ad64de404bb00974;hpb=7236168362115269547b3c01a556443ded4dcf24;p=chnosproject%2FCHNOSProject.git diff --git a/CHNOSProject/chn/chnlib02.c b/CHNOSProject/chn/chnlib02.c index 5a3e48c..39d5d22 100644 --- a/CHNOSProject/chn/chnlib02.c +++ b/CHNOSProject/chn/chnlib02.c @@ -62,7 +62,9 @@ int CHNLIB_UIPArray_GetSeparatedStringByUIPArray(CHNLIB_UIPArray **separated, co { //listにある文字列でsを分割し、その結果をseparatedに追加する。 //listに存在する文字列は新しくメモリを確保せず、リスト中のStringタグへのポインタをseparatedに記録する。 - //従ってseparatedを解放する際は、listのdata32をすべてTrueにした上で、CHNLIB_UIPArray_FreeSelectedAllを利用するべきである。 + ////従ってseparatedを解放する際は、listのdata32をすべてTrueにした上で、CHNLIB_UIPArray_FreeSelectedAllを利用するべきである。 + //referenceCountは、list中の文字列は2以上になり、listにない文字列は1となる。 + //従って、separatedをreleaseすれば、安全に解放できる。 //listにない文字列はdata32==False(0) //listにある文字列はdata32==tag->data32 int index, end, end_end, location; @@ -79,14 +81,14 @@ int CHNLIB_UIPArray_GetSeparatedStringByUIPArray(CHNLIB_UIPArray **separated, co //もうリストの文字列はない if(end != end_end){ //でもまだ文字列は残っている - CHNLIB_UIPArray_AppendLast(separated, False, CHNLIB_String_ExtractByLength(s, end, CHNLIB_MAX_STRING_LENGTH)); + CHNLIB_UIPArray_AppendLast(separated, False, autorelease(CHNLIB_String_ExtractByLength(s, end, CHNLIB_MAX_STRING_LENGTH))); } break; } //リストの文字列が見つかった if(location != 0){ //リストの文字列の前に、リストにない文字列がある - CHNLIB_UIPArray_AppendLast(separated, False, CHNLIB_String_ExtractByLength(s, end, location)); + CHNLIB_UIPArray_AppendLast(separated, False, autorelease(CHNLIB_String_ExtractByLength(s, end, location))); end += location; } CHNLIB_UIPArray_AppendLast(separated, CHNLIB_UIPArray_GetData32ByIndex(list, index), CHNLIB_UIPArray_GetPointerByIndex(list, index)); @@ -116,7 +118,7 @@ int CHNLIB_UIPArray_GetSeparatedUTF8Character(CHNLIB_UIPArray **separated, const //終端文字 break; } - CHNLIB_UIPArray_AppendLast(separated, u, CHNLIB_String_ExtractByLength(s, (int)(p - p_base), (int)(q - p))); + CHNLIB_UIPArray_AppendLast(separated, u, autorelease(CHNLIB_String_ExtractByLength(s, (int)(p - p_base), (int)(q - p)))); p = q; } @@ -125,6 +127,7 @@ int CHNLIB_UIPArray_GetSeparatedUTF8Character(CHNLIB_UIPArray **separated, const CHNLIB_String *CHNLIB_ReadLine(FILE *fp) { + //改行文字を削除して、読み込んだ文字列一行を返す。 char s[CHNLIB_MAX_STRING_LENGTH]; if(fgets(s, sizeof(s), fp) == NULL){ @@ -136,4 +139,19 @@ CHNLIB_String *CHNLIB_ReadLine(FILE *fp) return CHNLIB_String_Initialize(s); } +CHNLIB_UUID *CHNLIB_GenerateUUIDVersion4WithRandomGeneratorMT(CHNLIB_RandomGeneratorMT *mt) +{ + //mtが有効でない場合、NullUUIDを返す。 + CHNLIB_UUID *uuid; + + uuid = CHNLIB_UUID_Initialise(); + + if(CHNLIB_StructureHeader_GetTypeID(mt) != CHNLIB_STRUCT_ID_RandomGeneratorMT){ + return uuid; + } + + CHNLIB_UUID_SetValueAsUUIDVersion4CompatibleWithRFC4122(uuid, CHNLIB_RandomGeneratorMT_GetRandomUnsignedInteger32(mt), CHNLIB_RandomGeneratorMT_GetRandomUnsignedInteger32(mt), CHNLIB_RandomGeneratorMT_GetRandomUnsignedInteger32(mt), CHNLIB_RandomGeneratorMT_GetRandomUnsignedInteger32(mt)); + + return uuid; +}