OSDN Git Service

* Coded Function: FileType_CheckFileType
authorKoine Yuusuke(koinec) <koinec@users.sourceforge.jp>
Mon, 30 Mar 2015 19:00:43 +0000 (04:00 +0900)
committerKoine Yuusuke(koinec) <koinec@users.sourceforge.jp>
Mon, 30 Mar 2015 19:00:43 +0000 (04:00 +0900)
drcc/drcc.h
drcc/drcc_filetype.c
drcc/drcc_filetype.h
drcc/test_drcc_filetype.c

index 374422a..aab03b7 100644 (file)
@@ -39,7 +39,9 @@ Comment:
 
 #include<stdio.h>
 #include<stdlib.h>
+#include<unistd.h>
 #include<assert.h>
+#include<string.h>
 #include<fcntl.h>
 #include<sys/types.h>
 #include<sys/stat.h>
index 47d0893..2f257ae 100644 (file)
@@ -70,19 +70,53 @@ DRCC_FILETYPE_EXTERN
                Drd64_Drcc_FileType     *p_filetype,
                char    *pstr_filename )
 {
-       FILE    *fp;
        struct  stat    t_stat;
-       int             fd;
+       char    *pstr_ext;
+       int             i_fd;
        int             i_err;
+       int             i_cnt;
 
-       fd      = open( pstr_filename, O_RDONLY );
-       if( -0x01 == fd )       { return 0x01; }
+       i_fd    = open( pstr_filename, O_RDONLY );
+       if( -0x01 == i_fd )     { return 0x01; }
        
-       i_err   = fstat( fd, &t_stat );
+       i_err   = fstat( i_fd, &t_stat );
        if( -0x01 == i_err )    { return 0x02; }
 
        p_filetype->dw_filesize = t_stat.st_size;
 
+       close( i_fd );
+
+       /* Search from Ext. DB --- */
+       pstr_ext        = Drcc_FileType_GetFileExtPosition( pstr_filename );
+       i_cnt   = 0;
+       do      {
+               if( !strncmp( pstr_ext, fexttypedb[i_cnt].str_ext, DRD64_MAX_PATH ) )
+                               {
+                       p_filetype->b_type              = fexttypedb[i_cnt].b_type;
+                       p_filetype->w_subtype   = fexttypedb[i_cnt].w_subtype;
+                       goto goto_Drcc_FileType_CheckFileType_verification;
+               }
+       }while( (Byte)0xff != fexttypedb[++i_cnt].b_type );
+
+       /* Judge of Special File-Name */
+       i_cnt   = 0;
+       do      {
+               if( !strncmp( pstr_filename, fnametypedb[i_cnt].str_filename, DRD64_MAX_PATH ) )
+                               {
+                       p_filetype->b_type              = fnametypedb[i_cnt].b_type;
+                       p_filetype->w_subtype   = fnametypedb[i_cnt].w_subtype;
+                       goto goto_Drcc_FileType_CheckFileType_verification;
+               }
+       }while( (Byte)0xff != fnametypedb[++i_cnt].b_type );
+                       
+       /* XXX */
+       p_filetype->b_type              = DRD64_DRCC_FILETYPE_BINARY;
+       p_filetype->w_subtype   = DRD64_DRCC_FILESUBTYPE_BINARY;
+
+goto_Drcc_FileType_CheckFileType_verification:
+
+       /* XXX : Verify Data-File (Text or Binray) */
+       
        return 0x00;
 }
 
index 5246411..5c39da0 100644 (file)
@@ -47,6 +47,21 @@ Comment:
 #define        DRD64_DRCC_FILETYPE_TEXT        1
 
 
+#define        DRD64_DRCC_FILESUBTYPE_TEXT             0x0101
+
+#define        DRD64_DRCC_FILESUBTYPE_CSRC             0x0201
+#define        DRD64_DRCC_FILESUBTYPE_CHEADER  0x0202
+#define        DRD64_DRCC_FILESUBTYPE_CFUNC    0x0203
+#define        DRD64_DRCC_FILESUBTYPE_CMAKE    0x0291
+#define        DRD64_DRCC_FILESUBTYPE_CPPSRC   0x0211
+
+#define        DRD64_DRCC_FILESUBTYPE_BINARY   0x0101
+#define        DRD64_DRCC_FILESUBTYPE_ELF              0x0201
+#define        DRD64_DRCC_FILESUBTYPE_ELF_OBJ  0x0202
+#define        DRD64_DRCC_FILESUBTYPE_ELF_SO   0x0203
+#define        DRD64_DRCC_FILESUBTYPE_ELF_CORE 0x0299
+#define        DRD64_DRCC_FILESUBTYPE_COFF             0x0301
+
 typedef        struct  {
        Byte    b_type;
        Word    w_subtype;
@@ -54,6 +69,43 @@ typedef      struct  {
 
 } Drd64_Drcc_FileType;
 
+typedef        struct  {
+       char    str_ext[5];
+       Byte    b_type;
+       Word    w_subtype;
+} Drd64_Drcc_FileExtTypeDB;
+
+typedef        struct  {
+       char    str_filename[DRD64_MAX_PATH];
+       Byte    b_type;
+       Word    w_subtype;
+} Drd64_Drcc_FileNameTypeDB;
+       
+
+#ifdef DRD64_SRC_DRCC_FILETYPE
+Drd64_Drcc_FileExtTypeDB       fexttypedb[]    =       {
+       { "c", DRD64_DRCC_FILETYPE_TEXT, DRD64_DRCC_FILESUBTYPE_CSRC },
+       { "h", DRD64_DRCC_FILETYPE_TEXT, DRD64_DRCC_FILESUBTYPE_CHEADER },
+       { "f", DRD64_DRCC_FILETYPE_TEXT, DRD64_DRCC_FILESUBTYPE_CFUNC },
+       { "cpp", DRD64_DRCC_FILETYPE_TEXT, DRD64_DRCC_FILESUBTYPE_CPPSRC },
+
+       { "txt", DRD64_DRCC_FILETYPE_TEXT, DRD64_DRCC_FILESUBTYPE_TEXT },
+       { "log", DRD64_DRCC_FILETYPE_TEXT, DRD64_DRCC_FILESUBTYPE_TEXT },
+       { "xml", DRD64_DRCC_FILETYPE_TEXT, DRD64_DRCC_FILESUBTYPE_TEXT },
+
+       { "o", DRD64_DRCC_FILETYPE_BINARY, DRD64_DRCC_FILESUBTYPE_ELF_OBJ },
+       { "core", DRD64_DRCC_FILETYPE_BINARY, DRD64_DRCC_FILESUBTYPE_ELF_CORE },
+
+       { "\0", 0xff, 0xffff }
+};
+
+Drd64_Drcc_FileNameTypeDB      fnametypedb[]   = {
+       { "Makefile", DRD64_DRCC_FILETYPE_TEXT, DRD64_DRCC_FILESUBTYPE_CMAKE }, 
+       { "\0", 0xff, 0xffff }
+};
+#endif
+
+
 DRCC_FILETYPE_EXTERN
 int Drcc_FileType_CheckFileType(
                Drd64_Drcc_FileType *p_filetype, char *pstr_filename );
index 1786a7e..e468757 100644 (file)
@@ -74,10 +74,57 @@ void Test_DrCC_FileType_GetFileExtPosition_test01_002(void)
 /*--------------------------------------------------------------------*/
 void Test_DrCC_FileType_CheckFileType_test00_001(void)
 {
-       int             i_result        = 0x00;
+       int             i_result;
+       Drd64_Drcc_FileType             t_ftype;
 
-       //i_result      = DrCC_EditText_Term();
-       CU_ASSERT( 0x00 == i_result );
+       i_result        = Drcc_FileType_CheckFileType( &t_ftype, "./testdata/drcc_testfile.c");
+
+       CU_ASSERT_FATAL( 0x00 == i_result );
+       CU_ASSERT_FATAL( t_ftype.b_type == DRD64_DRCC_FILETYPE_TEXT );
+       CU_ASSERT_FATAL( t_ftype.w_subtype == DRD64_DRCC_FILESUBTYPE_CSRC );
+
+       return;
+}
+
+/*--------------------------------------------------------------------*/
+void Test_DrCC_FileType_CheckFileType_test00_002(void)
+{
+       int             i_result;
+       Drd64_Drcc_FileType             t_ftype;
+
+       i_result        = Drcc_FileType_CheckFileType( &t_ftype, "./testdata/drcc_testfile.h");
+
+       CU_ASSERT_FATAL( 0x00 == i_result );
+       CU_ASSERT_FATAL( t_ftype.b_type == DRD64_DRCC_FILETYPE_TEXT );
+       CU_ASSERT_FATAL( t_ftype.w_subtype == DRD64_DRCC_FILESUBTYPE_CHEADER );
+
+       return;
+}
+
+/*--------------------------------------------------------------------*/
+void Test_DrCC_FileType_CheckFileType_test00_003(void)
+{
+       int             i_result;
+       Drd64_Drcc_FileType             t_ftype;
+
+       i_result        = Drcc_FileType_CheckFileType( &t_ftype, "./testdata/drcc_testfile.o");
+
+       CU_ASSERT_FATAL( 0x00 == i_result );
+       CU_ASSERT_FATAL( t_ftype.b_type == DRD64_DRCC_FILETYPE_BINARY );
+       CU_ASSERT_FATAL( t_ftype.w_subtype == DRD64_DRCC_FILESUBTYPE_ELF_OBJ );
+
+       return;
+}
+
+/*--------------------------------------------------------------------*/
+void Test_DrCC_FileType_CheckFileType_test01_001(void)
+{
+       int             i_result;
+       Drd64_Drcc_FileType             t_ftype;
+
+       i_result        = Drcc_FileType_CheckFileType( &t_ftype, "./testdata/drcc_notexistfile");
+
+       CU_ASSERT_FATAL( 0x00 != i_result );
 
        return;
 }
@@ -94,8 +141,15 @@ int
 
        pt_edittext     = CU_add_suite( "DrCC_FileType", NULL, NULL );
 
+       /* FileType_CheckFileType *****************************************/
        CU_add_test( pt_edittext, "FileType_CheckFileType_test00_001",
                                        Test_DrCC_FileType_CheckFileType_test00_001 );
+       CU_add_test( pt_edittext, "FileType_CheckFileType_test00_002",
+                                       Test_DrCC_FileType_CheckFileType_test00_002 );
+       CU_add_test( pt_edittext, "FileType_CheckFileType_test00_003",
+                                       Test_DrCC_FileType_CheckFileType_test00_003 );
+       CU_add_test( pt_edittext, "FileType_CheckFileType_test01_001",
+                                       Test_DrCC_FileType_CheckFileType_test01_001 );
 
        /* FileType_GetFileExtPosition ************************************/
        CU_add_test( pt_edittext, "FileType_GetFileExtPosition_test00_001",