Allocation of char_string is very important.
I could easily controll keep filename when I used copyof.
// list_directory.cpp
//
//
//
//
//
char* FileControler::copyof ( char* str ) {
int ac = array_count(str);
char* mem = (char*)malloc( sizeof(char) * (ac + 1) );
for ( int i=0; i<ac; i++) {
mem[i] = str[i];
}
mem[ac] = '\0';
return mem;
}
// list_directory.cpp
//
//
//
//
//
char** FileControler::get_files ( char* lpcstr_path ) {
WIN32_FIND_DATA ffd;
HANDLE hFind = INVALID_HANDLE_VALUE;
char* ffdc_filename;
// Prepare string for use with FindFile functions. First, copy the
// string to a buffer, then append '\*' to the directory name.
hFind = FindFirstFile( TEXT( lpcstr_path ), &ffd );
ffdc_filename = TEXT( ffd.cFileName );
printf ( "filename: %s\r\n", ffdc_filename );
printf ( "lpcstr_path: %s\r\n", TEXT( lpcstr_path ) );
int index = 0;
// List all the files in the directory with some info about them.
do
{
// Allocation of char_string
ffdc_filename = copyof( (char*)ffd.cFileName );
printf ( "ffdc_filename: %d: %s\r\n", index, ffdc_filename );
//this->print_strings ();
index++;
char* char_directory = to_directory ( lpcstr_path, ffdc_filename );
if ( char_directory == NULL || m_compare( ffdc_filename, (char*)".") == 1 || m_compare( ffdc_filename, (char*)"..") == 1 ) {
printf( "skip away : %s\r\n", ffdc_filename );
} else {
this->put_string ( char_directory ); //fullpath
if ( ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) {
char* listfiles = (char*) m_concat( (char*)char_directory, (char*)"\\*" );
this->get_files( (char*) listfiles );
}
}
}
while ( FindNextFile(hFind, &ffd ) != 0);
FindClose(hFind);
}
I'm pleasure if you download the below.
https://github.com/WaitrudWeber/source_zip/blob/master/php_20190103.zip
Please reffer to the below for compilation.
https://waitrudweber.hatenablog.com/entry/2018/05/01/005938
> .\main_000.exe
start_index: 2
filename: .
lpcstr_path: .\*
ffdc_filename: 0: .
skip away : .
ffdc_filename: 1: ..
skip away : ..
ffdc_filename: 2: aDebug.cpp
index: 0 str .\aDebug.cpp
index: 1 str .\aDebug.cpp|.\aDebug.cpp
ffdc_filename: 3: aDebug.h
index: 1 str .\aDebug.h
index: 2 str .\aDebug.h|.\aDebug.h
ffdc_filename: 4: aDebug.o
index: 2 str .\aDebug.o
index: 3 str .\aDebug.o|.\aDebug.o
ffdc_filename: 5: array_counter.cpp
index: 3 str .\array_counter.cpp
index: 4 str .\array_counter.cpp|.\array_counter.cpp
ffdc_filename: 6: array_counter.h
index: 4 str .\array_counter.h
index: 5 str .\array_counter.h|.\array_counter.h
ffdc_filename: 7: array_counter.o
index: 5 str .\array_counter.o
index: 6 str .\array_counter.o|.\array_counter.o
ffdc_filename: 8: list_directory.cpp
index: 6 str .\list_directory.cpp
index: 7 str .\list_directory.cpp|.\list_directory.cpp
ffdc_filename: 9: list_directory.h
index: 7 str .\list_directory.h
index: 8 str .\list_directory.h|.\list_directory.h
ffdc_filename: 10: list_directory.o
index: 8 str .\list_directory.o
index: 9 str .\list_directory.o|.\list_directory.o
ffdc_filename: 11: main_000.cpp
index: 9 str .\main_000.cpp
index: 10 str .\main_000.cpp|.\main_000.cpp
ffdc_filename: 12: main_000.exe
index: 10 str .\main_000.exe
index: 11 str .\main_000.exe|.\main_000.exe
ffdc_filename: 13: main_000.o
index: 11 str .\main_000.o
index: 12 str .\main_000.o|.\main_000.o
ffdc_filename: 14: Makefile
index: 12 str .\Makefile
index: 13 str .\Makefile|.\Makefile
ffdc_filename: 15: parse.cpp
index: 13 str .\parse.cpp
index: 14 str .\parse.cpp|.\parse.cpp
ffdc_filename: 16: parse.h
index: 14 str .\parse.h
index: 15 str .\parse.h|.\parse.h
ffdc_filename: 17: parse.o
index: 15 str .\parse.o
index: 16 str .\parse.o|.\parse.o
ffdc_filename: 18: php
index: 16 str .\php
index: 17 str .\php|.\php
filename: .
lpcstr_path: .\php\*
ffdc_filename: 0: .
skip away : .
ffdc_filename: 1: ..
skip away : ..
ffdc_filename: 2: ClassLoader.php
index: 17 str .\php\ClassLoader.php
index: 18 str .\php\ClassLoader.php|.\php\ClassLoader.php
ffdc_filename: 3: ClassLoader.php_tmp.php
index: 18 str .\php\ClassLoader.php_tmp.php
index: 19 str .\php\ClassLoader.php_tmp.php|.\php\ClassLoader.php_tmp.php
ffdc_filename: 4: container
index: 19 str .\php\container
index: 20 str .\php\container|.\php\container
filename: .
lpcstr_path: .\php\container\*
ffdc_filename: 0: .
skip away : .
ffdc_filename: 1: ..
skip away : ..
ffdc_filename: 5: img
index: 20 str .\php\img
index: 21 str .\php\img|.\php\img
filename: .
lpcstr_path: .\php\img\*
ffdc_filename: 0: .
skip away : .
ffdc_filename: 1: ..
skip away : ..
ffdc_filename: 19: php_analyzer.cpp
index: 21 str .\php_analyzer.cpp
index: 22 str .\php_analyzer.cpp|.\php_analyzer.cpp
ffdc_filename: 20: php_analyzer.h
index: 22 str .\php_analyzer.h
index: 23 str .\php_analyzer.h|.\php_analyzer.h
ffdc_filename: 21: php_analyzer.o
index: 23 str .\php_analyzer.o
index: 24 str .\php_analyzer.o|.\php_analyzer.o
ffdc_filename: 22: php_struct.cpp
index: 24 str .\php_struct.cpp
index: 25 str .\php_struct.cpp|.\php_struct.cpp
ffdc_filename: 23: php_struct.h
index: 25 str .\php_struct.h
index: 26 str .\php_struct.h|.\php_struct.h
ffdc_filename: 24: php_struct.o
index: 26 str .\php_struct.o
index: 27 str .\php_struct.o|.\php_struct.o
ffdc_filename: 25: Print.cpp
index: 27 str .\Print.cpp
index: 28 str .\Print.cpp|.\Print.cpp
ffdc_filename: 26: Print.h
index: 28 str .\Print.h
index: 29 str .\Print.h|.\Print.h
ffdc_filename: 27: Print.o
index: 29 str .\Print.o
index: 30 str .\Print.o|.\Print.o
ffdc_filename: 28: specification.txt
index: 30 str .\specification.txt
index: 31 str .\specification.txt|.\specification.txt
ffdc_filename: 29: tmp-specification.txt
index: 31 str .\tmp-specification.txt
index: 32 str .\tmp-specification.txt|.\tmp-specification.txt
list_dummy_ary[0]=.\aDebug.cpp
list_dummy_ary[1]=.\aDebug.h
list_dummy_ary[2]=.\aDebug.o
list_dummy_ary[3]=.\array_counter.cpp
list_dummy_ary[4]=.\array_counter.h
list_dummy_ary[5]=.\array_counter.o
list_dummy_ary[6]=.\list_directory.cpp
list_dummy_ary[7]=.\list_directory.h
list_dummy_ary[8]=.\list_directory.o
list_dummy_ary[9]=.\main_000.cpp
list_dummy_ary[10]=.\main_000.exe
list_dummy_ary[11]=.\main_000.o
list_dummy_ary[12]=.\Makefile
list_dummy_ary[13]=.\parse.cpp
list_dummy_ary[14]=.\parse.h
list_dummy_ary[15]=.\parse.o
list_dummy_ary[16]=.\php
list_dummy_ary[17]=.\php\ClassLoader.php
list_dummy_ary[18]=.\php\ClassLoader.php_tmp.php
list_dummy_ary[19]=.\php\container
list_dummy_ary[20]=.\php\img
list_dummy_ary[21]=.\php_analyzer.cpp
list_dummy_ary[22]=.\php_analyzer.h
list_dummy_ary[23]=.\php_analyzer.o
list_dummy_ary[24]=.\php_struct.cpp
list_dummy_ary[25]=.\php_struct.h
list_dummy_ary[26]=.\php_struct.o
list_dummy_ary[27]=.\Print.cpp
list_dummy_ary[28]=.\Print.h
list_dummy_ary[29]=.\Print.o
list_dummy_ary[30]=.\specification.txt
list_dummy_ary[31]=.\tmp-specification.txt