#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>
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;
}
#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;
} 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 );
/*--------------------------------------------------------------------*/
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;
}
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",