OSDN Git Service

add tadsegment structure validation.
authorornse01 <ornse01@users.sourceforge.jp>
Tue, 19 Aug 2014 17:55:43 +0000 (17:55 +0000)
committerornse01 <ornse01@users.sourceforge.jp>
Tue, 19 Aug 2014 17:55:43 +0000 (17:55 +0000)
git-svn-id: http://svn.sourceforge.jp/svnroot/bchan/bchanf/trunk@625 20a0b8eb-f62a-4a12-8fe1-b598822500fb

src/tad/tadsegment.c
src/tad/tadsegment.h
src/tad/test_tadsegment.c

index c76ffa5..14086c9 100644 (file)
@@ -53,3 +53,31 @@ EXPORT W tadsegment_getvariable(tadsegment *segment, UB *segid, UW *seglen, UB *
 
        return 0;
 }
+
+EXPORT Bool tadsegment_isvalid(tadsegment *segment)
+{
+       LTADSEG *seg;
+
+       switch (segment->type) {
+       case TADSEGMENT_TYPE_VARIABLE:
+               seg = (LTADSEG*)segment->value.variable.raw;
+               if (seg->len == 0xffff) {
+                       if (segment->value.variable.rawlen != (seg->llen + 8)) {
+                               return False;
+                       }
+               } else {
+                       if (segment->value.variable.rawlen != (seg->len + 4)) {
+                               return False;
+                       }
+               }
+               return True;
+       case TADSEGMENT_TYPE_CHARACTOR:
+               if ((segment->value.ch & 0xFF00) == 0xFE00) {
+                       return False;
+               }
+               return True;
+       case TADSEGMENT_TYPE_LANGCODE:
+               return True;
+       }
+       return False;
+}
index 02bf2d2..0af9b59 100644 (file)
@@ -49,5 +49,6 @@ struct tadsegment_ {
 typedef struct tadsegment_ tadsegment;
 
 IMPORT W tadsegment_getvariable(tadsegment *segment, UB *segid, UW *seglen, UB **segdata);
+IMPORT Bool tadsegment_isvalid(tadsegment *segment);
 
 #endif
index a8ef953..58917a6 100644 (file)
@@ -128,10 +128,132 @@ LOCAL UNITTEST_RESULT test_tadsegment_4()
        return UNITTEST_RESULT_FAIL;
 }
 
+LOCAL UNITTEST_RESULT test_tadsegment_isvalid_1()
+{
+       tadsegment segment;
+       Bool ok;
+
+       segment.type = TADSEGMENT_TYPE_VARIABLE;
+       segment.value.variable.raw = (UB*)(TC[]){ 0xFFA2, 0x0006, 0x0300, 0x0101, 0x0101 };
+       segment.value.variable.rawlen = 10;
+
+       ok = tadsegment_isvalid(&segment);
+       if (ok == False) {
+               return UNITTEST_RESULT_FAIL;
+       }
+
+       return UNITTEST_RESULT_PASS;
+}
+
+LOCAL UNITTEST_RESULT test_tadsegment_isvalid_2()
+{
+       tadsegment segment;
+       Bool ok;
+
+       segment.type = TADSEGMENT_TYPE_VARIABLE;
+       segment.value.variable.raw = (UB*)(TC[]){ 0xFFE5, 0xFFFF, 0xFF00, 0x0001 };
+       segment.value.variable.rawlen = 0x1FF00 + 8;
+
+       ok = tadsegment_isvalid(&segment);
+       if (ok == False) {
+               return UNITTEST_RESULT_FAIL;
+       }
+
+       return UNITTEST_RESULT_PASS;
+}
+
+LOCAL UNITTEST_RESULT test_tadsegment_isvalid_3()
+{
+       tadsegment segment;
+       Bool ok;
+
+       segment.type = TADSEGMENT_TYPE_CHARACTOR;
+       segment.value.ch = 0x2121;
+
+       ok = tadsegment_isvalid(&segment);
+       if (ok == False) {
+               return UNITTEST_RESULT_FAIL;
+       }
+
+       return UNITTEST_RESULT_PASS;
+}
+
+LOCAL UNITTEST_RESULT test_tadsegment_isvalid_4()
+{
+       tadsegment segment;
+       Bool ok;
+
+       segment.type = TADSEGMENT_TYPE_LANGCODE;
+
+       ok = tadsegment_isvalid(&segment);
+       if (ok == False) {
+               return UNITTEST_RESULT_FAIL;
+       }
+
+       return UNITTEST_RESULT_PASS;
+}
+
+LOCAL UNITTEST_RESULT test_tadsegment_isvalid_5()
+{
+       tadsegment segment;
+       Bool ok;
+
+       segment.type = TADSEGMENT_TYPE_VARIABLE;
+       segment.value.variable.raw = (UB*)(TC[]){ 0xFFA2, 0x0006, 0x0300, 0x0101, 0x0101 };
+       segment.value.variable.rawlen = 12;
+
+       ok = tadsegment_isvalid(&segment);
+       if (ok != False) {
+               return UNITTEST_RESULT_FAIL;
+       }
+
+       return UNITTEST_RESULT_PASS;
+}
+
+LOCAL UNITTEST_RESULT test_tadsegment_isvalid_6()
+{
+       tadsegment segment;
+       Bool ok;
+
+       segment.type = TADSEGMENT_TYPE_VARIABLE;
+       segment.value.variable.raw = (UB*)(TC[]){ 0xFFE5, 0xFFFF, 0xFF00, 0x0001 };
+       segment.value.variable.rawlen = 0x1FF00 + 10;
+
+       ok = tadsegment_isvalid(&segment);
+       if (ok != False) {
+               return UNITTEST_RESULT_FAIL;
+       }
+
+       return UNITTEST_RESULT_PASS;
+}
+
+LOCAL UNITTEST_RESULT test_tadsegment_isvalid_7()
+{
+       tadsegment segment;
+       Bool ok;
+
+       segment.type = TADSEGMENT_TYPE_CHARACTOR;
+       segment.value.ch = 0xFE21;
+
+       ok = tadsegment_isvalid(&segment);
+       if (ok != False) {
+               return UNITTEST_RESULT_FAIL;
+       }
+
+       return UNITTEST_RESULT_PASS;
+}
+
 EXPORT VOID test_tadsegment_main(unittest_driver_t *driver)
 {
        UNITTEST_DRIVER_REGIST(driver, test_tadsegment_1);
        UNITTEST_DRIVER_REGIST(driver, test_tadsegment_2);
        UNITTEST_DRIVER_REGIST(driver, test_tadsegment_3);
        UNITTEST_DRIVER_REGIST(driver, test_tadsegment_4);
+       UNITTEST_DRIVER_REGIST(driver, test_tadsegment_isvalid_1);
+       UNITTEST_DRIVER_REGIST(driver, test_tadsegment_isvalid_2);
+       UNITTEST_DRIVER_REGIST(driver, test_tadsegment_isvalid_3);
+       UNITTEST_DRIVER_REGIST(driver, test_tadsegment_isvalid_4);
+       UNITTEST_DRIVER_REGIST(driver, test_tadsegment_isvalid_5);
+       UNITTEST_DRIVER_REGIST(driver, test_tadsegment_isvalid_6);
+       UNITTEST_DRIVER_REGIST(driver, test_tadsegment_isvalid_7);
 }