} 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
DWord dw_maxlength )
{
int i_result = 0x00;
- int i_fd;
+ //int i_fd;
Byte *pb_start;
Byte *pb_buffer;
Byte *pb_now;
}
memset( pb_buffer, 0x00, dw_maxlength + 1 );
+/*
i_fd = open( pstr_filepath, O_RDWR );
if( 0x00 > i_fd ) {
LibBrownie_Error_SetErrorInfo(
goto goto_LibEditText_File_ReadTextFile_post;
}
p_tinfo->i_fd = i_fd;
-
+*/
dw_nowrow = 0;
dw_pos = 0;
pb_start = pb_buffer;
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 ) {
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 */
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(
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;
test_libfiletype.h
all: $(TARGET) test
+build: $(TARGET)
test: $(TEST_TARGET)
./$(TEST_TARGET)
}
-/*----------------------------------------------------------------------
-----------------------------------------------------------------------*/
+/***********************************************************************
+***********************************************************************/
#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 )
{
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;
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;
}
#endif
-LIBFILETYPE_MAIN_EXTERN
- int LibFileType_CheckFileType(
- LibFileType_FileType *p_filetype, char *pstr_filename );
-
#ifdef LIBFILETYPE_INTERNAL
#endif
/* 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 );
}
/*--------------------------------------------------------------------*/
-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 );
}
/*--------------------------------------------------------------------*/
-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 );
}
/*--------------------------------------------------------------------*/
-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 );
/* 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",
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 );
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 );
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 );
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 );
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;
+}
+
/*----------------------------------------------------------------------
----------------------------------------------------------------------*/
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;
}