OSDN Git Service

* ChangeI/F: Append 3rd Operand (File Descriptor) for LibFileType_CheckFileType(...
authorKoine Yuusuke(koinec) <koinec@users.odsn.me>
Tue, 8 Sep 2015 11:41:45 +0000 (20:41 +0900)
committerKoine Yuusuke(koinec) <koinec@users.odsn.me>
Tue, 8 Sep 2015 11:41:45 +0000 (20:41 +0900)
include/libfiletype.h
libedittext/drd64_libedittext_file.c
libfiletype/Makefile
libfiletype/drd64_libfiletype_common.c
libfiletype/drd64_libfiletype_main.c
libfiletype/drd64_libfiletype_main.h
libfiletype/test_libfiletype_common.c
libfiletype/test_libfiletype_main.c

index 4cb5867..3907543 100644 (file)
@@ -72,12 +72,15 @@ typedef     struct  {
 } LibFileType_FileType;
 
 
+// libfiletype_common.c API ----------------------------------------
 LIBFILETYPE_FUNC
        int LibFileType_GetFileType_fromFileName(
                LibFileType_FileType *p_filetype, char *pstr_filename );
+
+// libfiletype_main.c API ------------------------------------------
 LIBFILETYPE_FUNC
        int LibFileType_CheckFileType(
-               LibFileType_FileType *p_filetype, char *pstr_filename );
+               LibFileType_FileType *p_filetype, char *pstr_filename, int i_argfd );
 LIBFILETYPE_FUNC
        int LibFileType_Init( void );
 LIBFILETYPE_FUNC
index 32e222f..56c05f5 100644 (file)
@@ -93,7 +93,7 @@ int
                        DWord   dw_maxlength )
 {
        int             i_result        = 0x00;
-       int             i_fd;
+       //int           i_fd;
        Byte    *pb_start;
        Byte    *pb_buffer;
        Byte    *pb_now;
@@ -114,6 +114,7 @@ int
        }
        memset( pb_buffer, 0x00, dw_maxlength + 1 );
 
+/*
        i_fd    = open( pstr_filepath, O_RDWR );
        if( 0x00 > i_fd )       {
                LibBrownie_Error_SetErrorInfo(
@@ -125,7 +126,7 @@ int
                goto goto_LibEditText_File_ReadTextFile_post;
        }
        p_tinfo->i_fd   = i_fd;
-
+*/
        dw_nowrow       = 0;
        dw_pos          = 0;
        pb_start        = pb_buffer;
@@ -203,13 +204,14 @@ int
                        char    *pstr_path,
                        char    *pstr_filename )
 {
+       int             i_fd;
        int             i_result;
-       LibFileType_FileType            t_ftype;
-       LibEditText_TextInfo            *p_tinfo;
-       char    str_filepath[DRD64_MAX_PATH + 1];
        DWord   dw_maxline;
        DWord   dw_bufline;
        DWord   dw_bufsize;
+       char    str_filepath[DRD64_MAX_PATH + 1];
+       LibFileType_FileType    t_ftype;
+       LibEditText_TextInfo    *p_tinfo;
        
        i_result        = LibEditText_File_CatPathFilename( str_filepath, pstr_path, pstr_filename );
        if( 0x00 != i_result )  {
@@ -221,27 +223,40 @@ int
                return -0x01;
        }
 
+       // Open File Descriptor ---
+       i_fd    = open( str_filepath, O_RDWR );
+       if( 0x00 > i_fd )       {
+               LibBrownie_Error_SetErrorInfo(
+                               DRD64_ERROR( DRD64_ERROR_PTN_SYSCALL, 0x01, 0x02 ),
+                               LOCATION( FUNCID_LibEditText_OpenTextFile ),
+                               errno, (QWord)i_fd, (QWord)0x00, __LINE__ ); 
+
+               return -0x02;
+       }
+
        /* Get FileSize & Judge text-file & Count TextLines */
-       i_result        = LibFileType_CheckFileType( &t_ftype, str_filepath );
+       i_result        = LibFileType_CheckFileType( &t_ftype, str_filepath, i_fd );
        if( 0x00 != i_result )  {
                LibBrownie_Error_SetErrorInfo(
-                               DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x02 ),
+                               DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x03 ),
                                LOCATION( FUNCID_LibEditText_OpenTextFile ),
                                errno, (QWord)i_result, (QWord)0x00, __LINE__ ); 
 
-               return -0x02;
+               return -0x03;
+       }
+       if( DRD64_LIBFILETYPE_TEXT != t_ftype.b_type )  {
+               return 0x04;
        }
-       if( DRD64_LIBFILETYPE_TEXT != t_ftype.b_type )  { return 0x03; }
 
        /* Alloc TextInfo Struct. */
        p_tinfo = LibEditText_System_AllocTextInfo();
        if( NULL == p_tinfo )   {
                LibBrownie_Error_SetErrorInfo(
-                               DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x04 ),
+                               DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x05 ),
                                LOCATION( FUNCID_LibEditText_OpenTextFile ),
                                errno, (QWord)0x00, (QWord)0x00, __LINE__ ); 
 
-               return -0x04;
+               return -0x05;
        }
 
        /* Alloc File-Buffer */
@@ -264,6 +279,7 @@ int
 
        strncpy( p_tinfo->str_pathname, pstr_path, DRD64_MAX_PATH );
        strncpy( p_tinfo->str_filename, pstr_filename, DRD64_MAX_PATH );
+       p_tinfo->i_fd   = i_fd;
 
        /* Read Textfile & Generate LineInfo */
        i_result        = LibEditText_File_ReadTextFile(
@@ -373,7 +389,7 @@ int
                                                DRD64_LIBEDITTEXT_DEFAULT_RESERVEBUF_INLINE
                                + DRD64_LIBEDITTEXT_DEFAULT_BUFSIZE_RESERVELINE );
 
-       p_tinfo->i_fd           = -1;
+       p_tinfo->i_fd                   = -1;
        p_tinfo->dw_line_start  = p_line->dw_id;
        p_tinfo->dw_line_end    = p_line->dw_id;
        
index d9ba5a5..7ddb29f 100644 (file)
@@ -74,6 +74,7 @@ TEST_HEADER = \
                test_libfiletype.h
 
 all:   $(TARGET) test
+build: $(TARGET)
 test:  $(TEST_TARGET)
        ./$(TEST_TARGET)
 
index b1af744..cf100f3 100644 (file)
@@ -97,12 +97,12 @@ char *
 }
 
 
-/*----------------------------------------------------------------------
-----------------------------------------------------------------------*/
+/***********************************************************************
+***********************************************************************/
 #define        FUNCID_LibFileType_Common_GetFileType_fromFileName              0x04
-LIBFILETYPE_COMMON_EXTERN
+LIBFILETYPE_FUNC
 int
-       LibFileType_Common_GetFileType_fromFileName(
+       LibFileType_GetFileType_fromFileName(
                LibFileType_FileType    *p_filetype,
                char    *pstr_filepath )
 {
index 9784fb9..45324c8 100644 (file)
@@ -52,35 +52,53 @@ LIBFILETYPE_FUNC
 int
        LibFileType_CheckFileType(
                LibFileType_FileType    *p_filetype,
-               char    *pstr_filename )
+               char    *pstr_filename,
+               int             i_argfd )
 {
        struct  stat    t_stat;
        int             i_result        = 0x00;
        int             i_fd;
        int             i_err;
+       off_t   t_foffset;
        DWord   dw_lines;
        DWord   dw_length;
 
-       i_result = LibFileType_Common_GetFileType_fromFileName( p_filetype, pstr_filename );
+       i_result = LibFileType_GetFileType_fromFileName( p_filetype, pstr_filename );
 
-       i_fd    = open( pstr_filename, O_RDONLY );
-       if( -0x01 == i_fd )     {
+       // Open File-Descriptor ---
+       if( -0x01 == i_argfd )  {
+               i_fd    = open( pstr_filename, O_RDONLY );
+               if( -0x01 == i_fd )     {
+                       LibBrownie_Error_SetErrorInfo(
+                                       DRD64_WARNING( DRD64_ERROR_PTN_SYSCALL, 0x00, 0x01 ),
+                                       LOCATION( FUNCID_LibFileType_CheckFileType ),
+                                       errno, (QWord)i_fd, (QWord)0x00, __LINE__ ); 
+                       return 0x01;
+               }
+       }
+       else
+               { i_fd  = i_argfd; }
+
+       // Save Now File-Cursor ---
+       t_foffset       = lseek( i_fd, 0, SEEK_CUR );
+       if( -0x01 == t_foffset )        {
                LibBrownie_Error_SetErrorInfo(
-                               DRD64_WARNING( DRD64_ERROR_PTN_SYSCALL, 0x00, 0x01 ),
+                               DRD64_ERROR( DRD64_ERROR_PTN_SYSCALL, 0x01, 0x02 ),
                                LOCATION( FUNCID_LibFileType_CheckFileType ),
-                               errno, (QWord)i_fd, (QWord)0x00, __LINE__ ); 
-               return 0x01;
+                               errno, (QWord)i_fd, (QWord)t_foffset, __LINE__ ); 
+               i_result        = -0x02;
+               goto goto_LibFileType_CheckFileType_post;
        }
        
        /* Get FileSize from fstat func. */
        i_err   = fstat( i_fd, &t_stat );
        if( -0x01 == i_err )    {
                LibBrownie_Error_SetErrorInfo(
-                               DRD64_ERROR( DRD64_ERROR_PTN_LIBCALL, 0x01, 0x02 ),
+                               DRD64_ERROR( DRD64_ERROR_PTN_LIBCALL, 0x01, 0x03 ),
                                LOCATION( FUNCID_LibFileType_CheckFileType ),
                                errno, (QWord)i_fd, (QWord)i_err, __LINE__ ); 
-               i_result        = -0x02;
-               goto goto_LibFileType_CheckFileType_post;
+               i_result        = -0x03;
+               goto goto_LibFileType_CheckFileType_error;
        }
        p_filetype->dw_filesize = t_stat.st_size;
 
@@ -89,18 +107,30 @@ int
                i_err   = LibFileType_TextFile_VerifyTextFile( &dw_lines, &dw_length, i_fd );
                if( 0 > i_err )         {
                        LibBrownie_Error_SetErrorInfo(
-                               DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x03 ),
+                               DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x04 ),
                                LOCATION( FUNCID_LibFileType_CheckFileType ),
                                errno, (QWord)i_fd, (QWord)i_err, __LINE__ ); 
-                       i_result        = -0x03;
-                       goto goto_LibFileType_CheckFileType_post;
+                       i_result        = -0x04;
+                       goto goto_LibFileType_CheckFileType_error;
                }
                p_filetype->dw_lines            = dw_lines;
                p_filetype->dw_maxlength        = dw_length;
        }
 
+goto_LibFileType_CheckFileType_error:
+       // Restore Now File-Cursor ---
+       t_foffset       = lseek( i_fd, t_foffset, SEEK_SET );
+       if( -0x01 == t_foffset )        {
+               LibBrownie_Error_SetErrorInfo(
+                               DRD64_ERROR( DRD64_ERROR_PTN_SYSCALL, 0x01, 0x05 ),
+                               LOCATION( FUNCID_LibFileType_CheckFileType ),
+                               errno, (QWord)i_fd, (QWord)t_foffset, __LINE__ ); 
+               // NO set i_result Value because orig. i_result value clear.
+       }
+       
 goto_LibFileType_CheckFileType_post:
-       close( i_fd );
+       if( -0x01 == i_argfd )
+               { close( i_fd ); }
        
        return i_result;
 }
index 1b3daf3..4e087b3 100644 (file)
@@ -52,10 +52,6 @@ Comment:
 #endif
 
 
-LIBFILETYPE_MAIN_EXTERN
-       int LibFileType_CheckFileType(
-                       LibFileType_FileType *p_filetype, char *pstr_filename );
-
 #ifdef LIBFILETYPE_INTERNAL
 #endif
 
index ac1986e..7a1e672 100644 (file)
@@ -93,14 +93,14 @@ void Test_LibFileType_Common_GetFileExtPosition_test01_002(void)
 
 /* LibFileType_Common_GetFileType_fromFileName ************************/
 /*--------------------------------------------------------------------*/
-void Test_LibFileType_Common_GetFileType_fromFileName_test00_001(void)
+void Test_LibFileType_GetFileType_fromFileName_test00_001(void)
 {
        int             i_result;
        LibFileType_FileType            t_ftype;
 
        LibFileType_Init();
        
-       i_result        = LibFileType_Common_GetFileType_fromFileName(
+       i_result        = LibFileType_GetFileType_fromFileName(
                                                        &t_ftype, "./testdata/drcc_testfile.c");
 
        CU_ASSERT( 0x00 == i_result );
@@ -113,14 +113,14 @@ void Test_LibFileType_Common_GetFileType_fromFileName_test00_001(void)
 }
 
 /*--------------------------------------------------------------------*/
-void Test_LibFileType_Common_GetFileType_fromFileName_test00_002(void)
+void Test_LibFileType_GetFileType_fromFileName_test00_002(void)
 {
        int             i_result;
        LibFileType_FileType            t_ftype;
 
        LibFileType_Init();
        
-       i_result        = LibFileType_Common_GetFileType_fromFileName(
+       i_result        = LibFileType_GetFileType_fromFileName(
                                                        &t_ftype, "./testdata/drcc_testfile.h");
 
        CU_ASSERT( 0x00 == i_result );
@@ -133,14 +133,14 @@ void Test_LibFileType_Common_GetFileType_fromFileName_test00_002(void)
 }
 
 /*--------------------------------------------------------------------*/
-void Test_LibFileType_Common_GetFileType_fromFileName_test00_003(void)
+void Test_LibFileType_GetFileType_fromFileName_test00_003(void)
 {
        int             i_result;
        LibFileType_FileType            t_ftype;
 
        LibFileType_Init();
        
-       i_result        = LibFileType_Common_GetFileType_fromFileName(
+       i_result        = LibFileType_GetFileType_fromFileName(
                                                                &t_ftype, "./testdata/drcc_testfile.o");
 
        CU_ASSERT( 0x00 == i_result );
@@ -153,14 +153,14 @@ void Test_LibFileType_Common_GetFileType_fromFileName_test00_003(void)
 }
 
 /*--------------------------------------------------------------------*/
-void Test_LibFileType_Common_GetFileType_fromFileName_test01_001(void)
+void Test_LibFileType_GetFileType_fromFileName_test01_001(void)
 {
        int             i_result;
        LibFileType_FileType            t_ftype;
 
        LibFileType_Init();
        
-       i_result        = LibFileType_Common_GetFileType_fromFileName(
+       i_result        = LibFileType_GetFileType_fromFileName(
                                                                &t_ftype, "./testdata/drcc_notexistfile");
 
        CU_ASSERT( 0x00 == i_result );
@@ -186,13 +186,13 @@ int
 
        /* FileType_Common_GetFileType_fromFileName ******************************/
        CU_add_test( pt_filetype, "FileType_Common_GetFileType_fromFileName_test00_001",
-                                       Test_LibFileType_Common_GetFileType_fromFileName_test00_001 );
+                                       Test_LibFileType_GetFileType_fromFileName_test00_001 );
        CU_add_test( pt_filetype, "FileType_Common_GetFileType_fromFileName_test00_002",
-                                       Test_LibFileType_Common_GetFileType_fromFileName_test00_002 );
+                                       Test_LibFileType_GetFileType_fromFileName_test00_002 );
        CU_add_test( pt_filetype, "FileType_Common_GetFileType_fromFileName_test00_003",
-                                       Test_LibFileType_Common_GetFileType_fromFileName_test00_003 );
+                                       Test_LibFileType_GetFileType_fromFileName_test00_003 );
        CU_add_test( pt_filetype, "FileType_Common_GetFileType_fromFileName_test01_001",
-                                       Test_LibFileType_Common_GetFileType_fromFileName_test01_001 );
+                                       Test_LibFileType_GetFileType_fromFileName_test01_001 );
 
        /* FileType_Common_GetFileExtPosition ************************************/
        CU_add_test( pt_filetype, "FileType_Common_GetFileExtPosition_test00_001",
index 5c77731..f745b3d 100644 (file)
@@ -49,7 +49,7 @@ void Test_LibFileType_CheckFileType_test00_001(void)
 
        LibFileType_Init();
        
-       i_result        = LibFileType_CheckFileType( &t_ftype, "./testdata/drcc_testfile.c");
+       i_result        = LibFileType_CheckFileType( &t_ftype, "./testdata/drcc_testfile.c", -0x01 );
 
        CU_ASSERT_FATAL( 0x00 == i_result );
        CU_ASSERT_FATAL( t_ftype.b_type == DRD64_LIBFILETYPE_TEXT );
@@ -69,7 +69,7 @@ void Test_LibFileType_CheckFileType_test00_002(void)
 
        LibFileType_Init();
        
-       i_result        = LibFileType_CheckFileType( &t_ftype, "./testdata/drcc_testfile.h");
+       i_result        = LibFileType_CheckFileType( &t_ftype, "./testdata/drcc_testfile.h", -0x01 );
 
        CU_ASSERT_FATAL( 0x00 == i_result );
        CU_ASSERT_FATAL( t_ftype.b_type == DRD64_LIBFILETYPE_TEXT );
@@ -89,7 +89,7 @@ void Test_LibFileType_CheckFileType_test00_003(void)
 
        LibFileType_Init();
        
-       i_result        = LibFileType_CheckFileType( &t_ftype, "./testdata/drcc_testfile.o");
+       i_result        = LibFileType_CheckFileType( &t_ftype, "./testdata/drcc_testfile.o", -0x01 );
 
        CU_ASSERT_FATAL( 0x00 == i_result );
        CU_ASSERT_FATAL( t_ftype.b_type == DRD64_LIBFILETYPE_BINARY );
@@ -109,7 +109,7 @@ void Test_LibFileType_CheckFileType_test01_001(void)
 
        LibFileType_Init();
        
-       i_result        = LibFileType_CheckFileType( &t_ftype, "./testdata/drcc_notexistfile");
+       i_result        = LibFileType_CheckFileType( &t_ftype, "./testdata/drcc_notexistfile", -0x01 );
 
        CU_ASSERT_FATAL( 0x00 != i_result );
 
@@ -118,6 +118,84 @@ void Test_LibFileType_CheckFileType_test01_001(void)
        return;
 }
 
+/*--------------------------------------------------------------------*/
+void Test_LibFileType_CheckFileType_test02_001(void)
+{
+       int             i_fd;
+       int             i_result;
+       LibFileType_FileType            t_ftype;
+
+       LibFileType_Init();
+
+       i_fd    = open( "./testdata/drcc_testfile.c", O_RDONLY );
+       CU_ASSERT( 0 <= i_fd );
+       
+       i_result        = LibFileType_CheckFileType( &t_ftype, "./testdata/drcc_testfile.c", i_fd );
+
+       CU_ASSERT_FATAL( 0x00 == i_result );
+       CU_ASSERT_FATAL( t_ftype.b_type == DRD64_LIBFILETYPE_TEXT );
+       CU_ASSERT_FATAL( t_ftype.w_subtype == DRD64_LIBFILETYPE_SUB_CSRC );
+       CU_ASSERT_FATAL( t_ftype.dw_filesize > 0 );
+
+       close( i_fd );
+
+       LibFileType_Term();
+
+       return;
+}
+
+/*--------------------------------------------------------------------*/
+void Test_LibFileType_CheckFileType_test02_002(void)
+{
+       int             i_fd;
+       int             i_result;
+       LibFileType_FileType            t_ftype;
+
+       LibFileType_Init();
+       
+       i_fd    = open( "./testdata/drcc_testfile.h", O_RDONLY );
+       CU_ASSERT( 0 <= i_fd );
+       
+       i_result        = LibFileType_CheckFileType( &t_ftype, "./testdata/drcc_testfile.h", i_fd );
+
+       CU_ASSERT_FATAL( 0x00 == i_result );
+       CU_ASSERT_FATAL( t_ftype.b_type == DRD64_LIBFILETYPE_TEXT );
+       CU_ASSERT_FATAL( t_ftype.w_subtype == DRD64_LIBFILETYPE_SUB_CHEADER );
+       CU_ASSERT_FATAL( t_ftype.dw_filesize > 0 );
+
+       close( i_fd );
+
+       LibFileType_Term();
+
+       return;
+}
+
+/*--------------------------------------------------------------------*/
+void Test_LibFileType_CheckFileType_test02_003(void)
+{
+       int             i_fd;
+       int             i_result;
+       LibFileType_FileType            t_ftype;
+
+       LibFileType_Init();
+       
+       i_fd    = open( "./testdata/drcc_testfile.o", O_RDONLY );
+       CU_ASSERT( 0 <= i_fd );
+       
+       i_result        = LibFileType_CheckFileType( &t_ftype, "./testdata/drcc_testfile.o", i_fd );
+
+       CU_ASSERT_FATAL( 0x00 == i_result );
+       CU_ASSERT_FATAL( t_ftype.b_type == DRD64_LIBFILETYPE_BINARY );
+       CU_ASSERT_FATAL( t_ftype.w_subtype == DRD64_LIBFILETYPE_SUB_ELF_OBJ );
+       CU_ASSERT_FATAL( t_ftype.dw_filesize > 0 );
+
+       close( i_fd );
+
+       LibFileType_Term();
+
+       return;
+}
+
 
 /*----------------------------------------------------------------------
 ----------------------------------------------------------------------*/
@@ -139,6 +217,12 @@ int
                                        Test_LibFileType_CheckFileType_test00_003 );
        CU_add_test( pt_filetype, "FileType_CheckFileType_test01_001",
                                        Test_LibFileType_CheckFileType_test01_001 );
+       CU_add_test( pt_filetype, "FileType_CheckFileType_test02_001",
+                                       Test_LibFileType_CheckFileType_test02_001 );
+       CU_add_test( pt_filetype, "FileType_CheckFileType_test02_002",
+                                       Test_LibFileType_CheckFileType_test02_002 );
+       CU_add_test( pt_filetype, "FileType_CheckFileType_test02_003",
+                                       Test_LibFileType_CheckFileType_test02_003 );
 
        return 0x00;
 }