2424
2525#define MAX_ERROR_MSG 0x1000
2626#define MAX_CNTF 50 // 최대 검출 파일 개수 //
27+ #define ERASER_SIZE 512 //1k
28+ #define ERASER_ENC_SIZE 896 //1k
2729
2830typedef struct Data_storage
2931{
@@ -42,17 +44,20 @@ typedef struct Data_storage
4244data_storage ds [MAX_CNTF ]; // 파일기준의 data구조체 //
4345
4446static gchar * path ; // 검사 파일경로 //
45- static gchar * vsf_path ; // 검사결과 리스트 선택 파일경로 //
47+
4648static int cntf = 0 ; // 파일개수 cnt //
4749static char chk_fname [20 ]; // 정규식돌고있는 파일이름 //
50+ static char chk_fpath [1024 ]; // 검출 결과에서 선택한 파일경로 //
51+ static uint chk_fsize ; // 검출 결과에서 선택한 파일크기 //
4852static int chk_tf ; // chk_true or false //
4953//uint data_flag = 1; // 민감정보 종류 확인 flag //
5054
5155
5256GtkWidget * detect_window ,
5357 * setting_window ,
5458 * d_progressbar_status ,
55- * d_progressbar ;
59+ * d_progressbar ,
60+ * window ;
5661
5762GtkEntry * d_detect_entry ;
5863
@@ -712,6 +717,126 @@ int detect_func(gchar *path)
712717}
713718/* end of detect_func(); */
714719
720+ // gtk_dialog_modal
721+ int func_gtk_dialog_modal (int type , GtkWidget * widget , char * message )
722+ {
723+ GtkWidget * dialog , * label , * content_area ;
724+ GtkDialogFlags flags = GTK_DIALOG_MODAL ;
725+ int rtn = GTK_RESPONSE_REJECT ;
726+
727+ switch (type )
728+ {
729+ case 0 :
730+ dialog = gtk_dialog_new_with_buttons ("Dialog" , GTK_WINDOW (widget ), flags ,
731+ ("_OK" ), GTK_RESPONSE_ACCEPT , NULL );
732+ break ;
733+
734+ case 1 :
735+ dialog = gtk_dialog_new_with_buttons ("Dialog" , GTK_WINDOW (widget ), flags ,
736+ ("_OK" ), GTK_RESPONSE_ACCEPT ,
737+ ("_Cancel" ), GTK_RESPONSE_REJECT , NULL );
738+ break ;
739+
740+ default :
741+ break ;
742+ }
743+
744+ label = gtk_label_new (message );
745+ content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog ));
746+ gtk_container_add (GTK_CONTAINER (content_area ), label );
747+ gtk_widget_show_all (dialog );
748+
749+ rtn = gtk_dialog_run (GTK_DIALOG (dialog ));
750+ gtk_widget_destroy (dialog );
751+ return (rtn );
752+ }
753+
754+ // 삭제 //
755+ int func_file_eraser (int type )
756+ {
757+ FILE * fp ;
758+ int mode = R_OK | W_OK ;
759+ char MsgTmp [5 ];
760+ gdouble size = 0.0 ;
761+ char * msize ;
762+
763+ if ( access ( chk_fpath , mode ) != 0 )
764+ {
765+ func_gtk_dialog_modal (0 , window , "\n 파일이 삭제 가능한 상태가 아닙니다. \n" );
766+ }
767+
768+ else
769+ {
770+ msize = malloc (ERASER_SIZE );
771+ fp = fopen (chk_fpath , "w" );
772+
773+ for ( int i = 0 ; i < type ; i ++ )
774+ {
775+ size = 0 ;
776+
777+ while (size < chk_fsize )
778+ {
779+ switch (i )
780+ {
781+ case 0 :
782+ MsgTmp [0 ] = 'A' ;
783+ memset ( msize , MsgTmp [0 ], ERASER_SIZE );
784+ break ;
785+
786+ case 1 :
787+ MsgTmp [0 ] = '^' ;
788+ memset ( msize , MsgTmp [0 ], ERASER_SIZE );
789+ break ;
790+
791+ case 2 :
792+ srand (time (NULL ));
793+ if ( size < ERASER_SIZE )
794+ for ( int j = 0 ; j < ERASER_SIZE ; j ++ )
795+ msize [j ] = 'A' + (random () % 26 );
796+ break ;
797+
798+ case 3 :
799+ MsgTmp [0 ] = 'Z' ;
800+ memset ( msize , MsgTmp [0 ], ERASER_SIZE );
801+ break ;
802+
803+ case 4 :
804+ MsgTmp [0 ] = 'A' ;
805+ memset ( msize , MsgTmp [0 ], ERASER_SIZE );
806+ break ;
807+
808+ case 5 :
809+ MsgTmp [0 ] = '^' ;
810+ memset ( msize , MsgTmp [0 ], ERASER_SIZE );
811+ break ;
812+
813+ case 6 :
814+ srand (time (NULL ));
815+ if ( size < ERASER_SIZE )
816+ for ( int j = 0 ; j < ERASER_SIZE ; j ++ )
817+ msize [j ] = 'A' + (random () % 26 );
818+ break ;
819+
820+ default :
821+ break ;
822+ }
823+ }
824+
825+ fseek ( fp , 0L , SEEK_SET );
826+ }
827+
828+ fclose (fp );
829+ free (msize );
830+ }
831+
832+ remove ( chk_fpath );
833+ func_gtk_dialog_modal (0 , window , "\n 삭제가 완료되었습니다. \n" );
834+
835+ return ( TRUE );
836+ }
837+ // end of func_file_eraser(); //
838+
839+
715840// 계정이 있는지 확인: TRUE(1)=있다 FALSE(0)=없다 //
716841int chk_user ()
717842{
@@ -807,22 +932,29 @@ view_selection_func (GtkTreeSelection *selection,
807932 gpointer userdata )
808933{
809934 GtkTreeIter iter ;
810-
935+ gchar * vs_fpath ;
936+ guint vs_fsize = 0 ;
937+
811938 if (gtk_tree_model_get_iter (model , & iter , path ))
812939 {
813- gtk_tree_model_get (model , & iter , d_treeview_filelocation , & vsf_path , -1 );
940+ gtk_tree_model_get (model , & iter , d_treeview_filelocation , & vs_fpath , -1 );
941+ gtk_tree_model_get (model , & iter , d_treeview_size , vs_fsize , -1 );
814942
815943 if (!path_currently_selected )
816944 {
817- g_print ("%s 선택.\n" , vsf_path );
945+ g_print ("%s 선택.\n" , vs_fpath );
818946 }
819947
820948 else
821949 {
822- g_print ("%s 선택 해제.\n" , vsf_path );
950+ g_print ("%s 선택 해제.\n" , vs_fpath );
823951 }
824-
825- g_free (vsf_path );
952+
953+ strcpy (chk_fpath ,vs_fpath );
954+ chk_fsize = vs_fsize ;
955+
956+ g_free (vs_fpath );
957+ vs_fsize = 0 ;
826958 }
827959
828960 return TRUE; /* allow selection state to change */
@@ -1003,8 +1135,29 @@ void d_encrypt_btn_clicked (GtkButton *d_encrypt_btn, gpointer *data)//미구현
10031135 return ;
10041136}
10051137
1006- void d_delete_btn_clicked (GtkButton * d_delete_btn , gpointer * data )//미구현//
1138+ void d_delete_btn_clicked (GtkButton * d_delete_btn , gpointer * data )
10071139{
1140+ char message [1024 ];
1141+
1142+ if ( chk_fpath [0 ] == 0x00 )
1143+ {
1144+ func_gtk_dialog_modal (0 , window , "\n 대상파일이 선택되지 않았습니다. \n" );
1145+ }
1146+ else
1147+ {
1148+ sprintf ( message ,
1149+ "\n 삭제 후에 복구가 불가능 합니다.\n 아래 파일을 삭제하시겠습니까?\n [ %s ] \n" , chk_fpath );
1150+
1151+ if ( func_gtk_dialog_modal (1 , window , message ) == GTK_RESPONSE_ACCEPT )
1152+ {
1153+ func_file_eraser (3 );
1154+ }
1155+ else
1156+ {
1157+ printf ("취소 되었습니다.\n" );
1158+ }
1159+ }
1160+
10081161 return ;
10091162}
10101163
@@ -1050,7 +1203,7 @@ void s_cloese_btn_clicked (GtkButton *setting_window, gpointer *data)
10501203// main //
10511204int main (int argc , char * argv [])
10521205{
1053- GtkBuilder * builder ;
1206+ GtkBuilder * builder ;
10541207 GtkWidget * main_window ,
10551208 * enrollment_window ;
10561209
@@ -1089,6 +1242,8 @@ int main (int argc, char *argv[])
10891242 gtk_widget_show (main_window );
10901243 gtk_main ();
10911244 }
1245+
1246+ gtk_widget_show (window );
10921247
10931248 return 0 ;
10941249}
0 commit comments