semctl/semctl01.c: cleanup
PATCH v2 1/2 semctl/semctl01.c: cleanup
1. Remove useless comments
2. Revise code to follow ltp-code-style
--- testcases/kernel/syscalls/ipc/semctl/semctl01.c | 306 +++++++++--------------- 1 file changed, 119 insertions(+), 187 deletions(-)
testcases/kernel/syscalls/ipc/semctl/semctl01.c +119 -187
@@ -1,20 +1,19 @@/* +* Copyright (c) International Business Machines Corp., 2001 * -* Copyright (c) International Business Machines Corp., 2001 +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. * -* This program is free software; you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or -* (at your option) any later version. +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See +* the GNU General Public License for more details. * -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See -* the GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program; if not, write to the Free Software -* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /*
@@ -22,7 +21,7 @@* semctl01.c * * DESCRIPTION -* semctl01 - test the 10 possible semctl() commands +* semctl01 - test the 13 possible semctl() commands * * ALGORITHM * create a semaphore set with read and alter permissions
@@ -35,31 +34,11 @@* otherwise, * if doing functionality testing * call the appropriate test function -* if correct, +* if correct, * issue a PASS message * otherwise * issue a FAIL message * call cleanup -* -* USAGE: <for command-line> -* semctl01 [-c n] [-f] [-i n] [-I x] [-P x] [-t] -* where, -c n : Run n copies concurrently. -* -f : Turn off functionality Testing. -* -i n : Execute test n times. -* -I x : Execute test for x seconds. -* -P x : Pause for x seconds between iterations. -* -t : Turn on syscall timing. -* -* HISTORY -* 03/2001 - Written by Wayne Boyer -* -* 11/03/2008 Renaud Lottiaux ([email protected]) -* - Fix concurrency issue. Due to the use of usleep function to -* synchronize processes, synchronization issues can occur on a loaded -* system. Fix this by using pipes to synchronize processes. -* -* RESTRICTIONS -* none */ #include "ipcsem.h"
@@ -68,35 +47,35 @@char *TCID ="semctl01" ;int TST_TOTAL =10 ; -int sem_id_1 =-1 ;/* a semaphore set with read and alter permissions */ +static int sem_id_1 =-1 ; -int sync_pipes[2 ]; +static int sync_pipes[2 ];/* * These are the various setup and check functions for the 10 different * commands that are available for the semctl() call. */ -void func_stat (void ); -void set_setup (void ),func_set (void ); -void func_gall (void ); -void cnt_setup (int ),func_cnt (int ); -void pid_setup (void ),func_pid (int ); -void gval_setup (void ),func_gval (int ); -void sall_setup (void ),func_sall (void ); -void func_sval (void ); -void func_rmid (void ); -void child_cnt (void ); -void child_pid (void ); - -struct semid_ds buf; -unsigned short array[PSEMS ]; -struct sembuf sops; - -#define INCVAL 2/* a semaphore increment value */ +static void func_stat (void ); +static void set_setup (void ),func_set (void ); +static void func_gall (void ); +static void cnt_setup (int ),func_cnt (int ); +static void pid_setup (void ),func_pid (int ); +static void func_gval (int ); +static void sall_setup (void ),func_sall (void ); +static void func_sval (void ); +static void func_rmid (void ); +static void child_cnt (void ); +static void child_pid (void ); + +static struct semid_ds buf; +static unsigned short array[PSEMS ]; +static struct sembuf sops; + +#define INCVAL 2#define NEWMODE 066#define NCHILD 5 -#define SEM2 2/* semaphore to use for GETPID and GETVAL */ -#define SEM4 4/* semaphore to use for GETNCNT and GETZCNT */ +#define SEM2 2 +#define SEM4 4#define ONE 1#ifdef _XLC_COMPILER#define SEMUN_CAST
@@ -104,64 +83,54 @@ struct sembuf sops;#define SEMUN_CAST (union semun)#endif -#ifdef _XLC_COMPILER -#define SEMUN_CAST -#else -#define SEMUN_CAST (union semun) -#endif - -int pid_arr[NCHILD ]; +static int pid_arr[NCHILD ];#ifdef UCLINUX #define PIPE_NAME "semctl01"static char *argv0; -int sem_op; +static int sem_op;#endif -struct test_case_t { -int semnum;/* the primitive semaphore to use */ -int cmd;/* the command to test */ -void (*func_test) ();/* the test function */ +static struct test_case_t { +int semnum; +int cmd; +void (*func_test) ();union semun arg; -void (*func_setup) ();/* the setup function if necessary */ +void (*func_setup) (); }TC [] = { - { -0 ,IPC_STAT , func_stat,SEMUN_CAST & buf,NULL }, { -0 ,IPC_SET , func_set,SEMUN_CAST & buf, set_setup}, { - 0, GETALL, func_gall, SEMUN_CAST array, NULL}, { -SEM4 ,GETNCNT , func_cnt,SEMUN_CAST & buf, cnt_setup}, { -SEM2 ,GETPID , func_pid,SEMUN_CAST & buf, pid_setup}, { -SEM2 ,GETVAL , func_gval,SEMUN_CAST & buf,NULL }, { -SEM4 ,GETZCNT , func_cnt,SEMUN_CAST & buf, cnt_setup}, { - 0, SETALL, func_sall, SEMUN_CAST array, sall_setup}, { - SEM4, SETVAL, func_sval, SEMUN_CAST INCVAL, NULL}, { -0 ,IPC_RMID , func_rmid,SEMUN_CAST & buf,NULL } + {0 ,IPC_STAT , func_stat,SEMUN_CAST & buf,NULL }, + {0 ,IPC_SET , func_set,SEMUN_CAST & buf, set_setup}, + {0, GETALL, func_gall, SEMUN_CAST array, NULL}, + {SEM4 ,GETNCNT , func_cnt,SEMUN_CAST & buf, cnt_setup}, + {SEM2 ,GETPID , func_pid,SEMUN_CAST & buf, pid_setup}, + {SEM2 ,GETVAL , func_gval,SEMUN_CAST & buf,NULL }, + {SEM4 ,GETZCNT , func_cnt,SEMUN_CAST & buf, cnt_setup}, + {0, SETALL, func_sall, SEMUN_CAST array, sall_setup}, + {SEM4, SETVAL, func_sval, SEMUN_CAST INCVAL, NULL}, + {0 ,IPC_RMID , func_rmid,SEMUN_CAST & buf,NULL }, }; -int main (int ac,char **av) +int main (int argc,char *argv[]) {int lc;char *msg;int i, j; -if ((msg =parse_opts (ac, av,NULL ,NULL )) !=NULL ) { + msg =parse_opts (argc, argv,NULL ,NULL ); +if (msg !=NULL )tst_brkm (TBROK ,NULL ,"OPTION PARSING ERROR - %s" , msg); - } +#ifdef UCLINUX - argv0 = av[0 ]; + argv0 = argv[0 ];maybe_run_child (&child_pid,"nd" ,1 , &sem_id_1);maybe_run_child (&child_cnt,"ndd" ,2 , &sem_id_1, &sem_op);#endif -setup ();/* global setup */ - -/* The following loop checks looping state if -i option given */ +setup ();for (lc =0 ;TEST_LOOPING (lc); lc++) { -/* reset tst_count in case we are looping */ tst_count =0 ; -/* loop through the test cases */ for (i =0 ; i <TST_TOTAL ; i++) {/*
@@ -182,10 +151,6 @@ int main(int ac, char **av) } } -/* -* Use TEST macro to make the call -*/ -TEST (semctl (sem_id_1,TC [i].semnum,TC [i].cmd,TC [i].arg));
@@ -202,9 +167,9 @@ int main(int ac, char **av)*/ switch (TC [i].cmd) {case GETNCNT : -/*FALLTHROUGH*/ case GETZCNT : -/*FALLTHROUGH*/ case GETPID : -/*FALLTHROUGH*/ case GETVAL : +case GETZCNT : +case GETPID : +case GETVAL : (*TC [i].func_test) (TEST_RETURN );break ;
@@ -222,12 +187,11 @@ int main(int ac, char **av)*/ switch (TC [i].cmd) {case GETNCNT : -/*FALLTHROUGH*/ case GETZCNT : +case GETZCNT :for (j =0 ; j <NCHILD ; j++) { -if (kill (pid_arr[j],SIGKILL ) ==-1 ) { +if (kill (pid_arr[j],SIGKILL ) ==-1 )tst_brkm (TBROK , cleanup,"child kill failed" ); - } }break ; }
@@ -236,39 +200,36 @@ int main(int ac, char **av)* recreate the semaphore resource if looping */ if (TEST_LOOPING (lc)) { -if ((sem_id_1 =semget (semkey,PSEMS , -IPC_CREAT |IPC_EXCL |SEM_RA )) - ==-1 ) { + sem_id_1 =semget (semkey,PSEMS , +IPC_CREAT |IPC_EXCL |SEM_RA ); +if (sem_id_1 ==-1 )tst_brkm (TBROK , cleanup,"couldn't recreate " "semaphore" ); - } } }cleanup ();tst_exit (); - }/* * func_stat() - check the functionality of the IPC_STAT command with semctl() */ -void func_stat () +static void func_stat (void ) {/* check the number of semaphores and the ipc_perm.mode value */ -if (buf.sem_nsems ==PSEMS && buf.sem_perm.mode == (SEM_RA )) { +if (buf.sem_nsems ==PSEMS && buf.sem_perm.mode == (SEM_RA ))tst_resm (TPASS ,"buf.sem_nsems and buf.sem_perm.mode" " are correct" ); - }else { +else tst_resm (TFAIL ,"semaphore STAT info is incorrect" ); - } }/* * set_setup() - set up for the IPC_SET command with semctl() */ -void set_setup () +static void set_setup (void ) {/* set up a new mode for the semaphore set */ buf.sem_perm.mode =SEM_RA |NEWMODE ;
@@ -277,7 +238,7 @@ void set_setup()/* * func_set() - check the functionality of the IPC_SET command with semctl() */ -void func_set () +static void func_set (void ) {/* first stat the semaphore to get the new data */ if (semctl (sem_id_1,0 ,IPC_STAT , (union semun )&buf) ==-1 ) {
@@ -286,17 +247,16 @@ void func_set() }/* check that the new mode is what we set */ -if (buf.sem_perm.mode == (SEM_RA |NEWMODE )) { +if (buf.sem_perm.mode == (SEM_RA |NEWMODE ))tst_resm (TPASS ,"buf.sem_perm.mode is correct" ); - }else { +else tst_resm (TFAIL ,"semaphore mode info is incorrect" ); - } }/* * func_gall() - check the functionality of the GETALL command with semctl() */ -void func_gall () +static void func_gall (void ) {int i;
@@ -313,7 +273,7 @@ void func_gall()/* * cnt_setup() - set up for the GETNCNT and GETZCNT commands with semctl() */ -void cnt_setup (int opval) +static void cnt_setup (int opval) {int pid, i;
@@ -326,31 +286,31 @@ void cnt_setup(int opval)if (opval ==0 ) {/* initialize the semaphore value to ONE */ sops.sem_op =ONE ; -if (semop (sem_id_1, &sops,1 ) ==-1 ) { +if (semop (sem_id_1, &sops,1 ) ==-1 )tst_brkm (TBROK , cleanup,"semop #1 failed - cnt_setup" ); - } } - sops.sem_op = opval;/* set the correct operation */ +/* set the correct operation */ + sops.sem_op = opval;for (i =0 ; i <NCHILD ; i++) {if (sync_pipe_create (sync_pipes,PIPE_NAME ) ==-1 )tst_brkm (TBROK , cleanup,"sync_pipe_create failed" );/* fork five children to wait */ -if ((pid =FORK_OR_VFORK ()) ==-1 ) + pid =FORK_OR_VFORK (); +if (pid ==-1 )tst_brkm (TBROK , cleanup,"fork failed in cnt_setup" ); -if (pid ==0 ) {/* child */ +if (pid ==0 ) {#ifdef UCLINUX sem_op = sops.sem_op; -if (self_exec (argv0,"ndd" ,2 , sem_id_1, sem_op) <0 ) { +if (self_exec (argv0,"ndd" ,2 , sem_id_1, sem_op) <0 )tst_brkm (TBROK , cleanup,"self_exec failed " "in cnt_setup" ); - }#else child_cnt ();#endif - }else {/* parent */ + }else {if (sync_pipe_wait (sync_pipes) ==-1 )tst_brkm (TBROK , cleanup,"sync_pipe_wait failed" );
@@ -370,7 +330,7 @@ void cnt_setup(int opval)sleep (1 ); } -void child_cnt () +static void child_cnt (void ) {#ifdef UCLINUX sops.sem_op = (short int )sem_op;
@@ -397,9 +357,9 @@ void child_cnt()* routine which should cause an error to be return * by the semop() call. */ -if (semop (sem_id_1, &sops,1 ) !=-1 ) { +if (semop (sem_id_1, &sops,1 ) !=-1 )tst_resm (TBROK ,"semop succeeded - cnt_setup" ); - } +exit (0 ); }
@@ -407,40 +367,37 @@ void child_cnt()* func_cnt() - check the functionality of the GETNCNT and GETZCNT commands * with semctl() */ -void func_cnt (int rval) +static void func_cnt (int rval) { -if (rval ==NCHILD ) { +if (rval ==NCHILD )tst_resm (TPASS ,"number of sleeping processes is correct" ); - }else { +else tst_resm (TFAIL ,"number of sleeping processes is not correct" ); - } }/* * pid_setup() - set up for the GETPID command with semctl() */ -void pid_setup () +static void pid_setup (void ) {int pid; -if (sync_pipe_create (sync_pipes,PIPE_NAME ) ==-1 ) { +if (sync_pipe_create (sync_pipes,PIPE_NAME ) ==-1 )tst_brkm (TBROK , cleanup,"sync_pipe_create failed" ); - }/* * Fork a child to do a semop that will pass. */ -if ((pid =FORK_OR_VFORK ()) ==-1 ) { + pid =FORK_OR_VFORK (); +if (pid ==-1 )tst_brkm (TBROK , cleanup,"fork failed in pid_setup()" ); - }if (pid ==0 ) {/* child */ #ifdef UCLINUX -if (self_exec (argv0,"nd" ,1 , sem_id_1) <0 ) { +if (self_exec (argv0,"nd" ,1 , sem_id_1) <0 )tst_brkm (TBROK , cleanup,"self_exec failed " "in pid_setup()" ); - }#else child_pid ();#endif
@@ -455,7 +412,7 @@ void pid_setup() } } -void child_pid () +static void child_pid (void ) {#ifdef UCLINUX if (sync_pipe_create (sync_pipes,PIPE_NAME ) ==-1 )
@@ -468,53 +425,50 @@ void child_pid()if (sync_pipe_close (sync_pipes,PIPE_NAME ) ==-1 )tst_brkm (TBROK , cleanup,"sync_pipe_close failed" ); - sops.sem_num =SEM2 ;/* semaphore to change */ - sops.sem_op =ONE ;/* operation is to increment semaphore */ + sops.sem_num =SEM2 ; + sops.sem_op =ONE ; sops.sem_flg =0 ;/* * Do a semop that will increment the semaphore. */ -if (semop (sem_id_1, &sops,1 ) ==-1 ) { +if (semop (sem_id_1, &sops,1 ) ==-1 )tst_resm (TBROK ,"semop failed - pid_setup" ); - } +exit (0 ); }/* * func_pid() - check the functionality of the GETPID command with semctl() */ -void func_pid (int rval) +static void func_pid (int rval) {/* compare the rval (pid) to the saved pid from the setup */ -if (rval == pid_arr[SEM2 ]) { +if (rval == pid_arr[SEM2 ])tst_resm (TPASS ,"last pid value is correct" ); - }else { +else tst_resm (TFAIL ,"last pid value is not correct" ); - } }/* * func_gval() - check the functionality of the GETVAL command with semctl() */ -void func_gval (int rval) +static void func_gval (int rval) {/* * This is a simple test. The semaphore value should be equal * to ONE as it was set in the last test (GETPID). */ -if (rval ==1 ) { +if (rval ==1 )tst_resm (TPASS ,"semaphore value is correct" ); - }else { +else tst_resm (TFAIL ,"semaphore value is not correct" ); - } - }/* * all_setup() - set up for the SETALL command with semctl() */ -void sall_setup () +static void sall_setup (void ) {int i;
@@ -527,7 +481,7 @@ void sall_setup()/* * func_sall() - check the functionality of the SETALL command with semctl() */ -void func_sall () +static void func_sall (void ) {int i;unsigned short rarray[PSEMS ];
@@ -536,9 +490,8 @@ void func_sall()* do a GETALL and compare the values to those set above */ -if (semctl (sem_id_1,0 ,GETALL , (union semun )rarray) ==-1 ) { +if (semctl (sem_id_1,0 ,GETALL , (union semun )rarray) ==-1 )tst_brkm (TBROK , cleanup,"semctl failed in func_sall" ); - }for (i =0 ; i <PSEMS ; i++) {if (array[i] != rarray[i]) {
@@ -553,7 +506,7 @@ void func_sall()/* * func_sval() - check the functionality of the SETVAL command with semctl() */ -void func_sval () +static void func_sval (void ) {int semv;union semun arr;
@@ -562,42 +515,36 @@ void func_sval()* do a GETVAL and compare it to the value set above */ -if ((semv =semctl (sem_id_1,SEM4 ,GETVAL , arr)) ==-1 ) { + semv =semctl (sem_id_1,SEM4 ,GETVAL , arr); +if (semv ==-1 )tst_brkm (TBROK , cleanup,"semctl failed in func_sval" ); - } -if (semv !=INCVAL ) { +if (semv !=INCVAL )tst_resm (TFAIL ,"semaphore value is not what was set" ); - }else { +else tst_resm (TPASS ,"semaphore value is correct" ); - } }/* * func_rmid() - check the functionality of the IPC_RMID command with semctl() */ -void func_rmid () +static void func_rmid (void ) {/* * do a semop() - we should get EINVAL */ -if (semop (sem_id_1, &sops,1 ) !=-1 ) { +if (semop (sem_id_1, &sops,1 ) !=-1 )tst_resm (TFAIL ,"semop succeeded on expected fail" ); - } -if (errno !=EINVAL ) { +if (errno !=EINVAL )tst_resm (TFAIL ,"returned errno - %d - is not expected" , errno); - }else { +else tst_resm (TPASS ,"semaphore appears to be removed" ); - } sem_id_1 =-1 ; } -/* -* setup() - performs all the ONE TIME setup for this test. -*/ void setup (void ) {
@@ -605,27 +552,17 @@ void setup(void)TEST_PAUSE ; -/* -* Create a temporary directory and cd into it. -* This helps to ensure that a unique msgkey is created. -* See ../lib/libipc.c for more information. -*/ tst_tmpdir ();/* get an IPC resource key */ semkey =getipckey ();/* create a semaphore set with read and alter permissions */ -if ((sem_id_1 = -semget (semkey,PSEMS ,IPC_CREAT |IPC_EXCL |SEM_RA )) ==-1 ) { + sem_id_1 =semget (semkey,PSEMS ,IPC_CREAT |IPC_EXCL |SEM_RA ); +if (sem_id_1 ==-1 )tst_brkm (TBROK , cleanup,"couldn't create semaphore in setup" ); - } } -/* -* cleanup() - performs all the ONE TIME cleanup for this test at completion -* or premature exit. -*/ void cleanup (void ) {/* if it exists, remove the semaphore resource */
@@ -633,10 +570,5 @@ void cleanup(void)tst_rmdir (); -/* -* print timing stats if that option was specified. -* print errno log if that option was specified. -*/ TEST_CLEANUP ; - }
Signature · 12 lines
1.8.3 ------------------------------------------------------------------------------ Learn Graph Databases - Download FREE O'Reilly Book "Graph Databases" is the definitive new guide to graph databases and their applications. This 200-page book is written by three acclaimed leaders in the field. The early access version is available now. Download your free book today! http://p.sf.net/sfu/neotech_d2d_may _______________________________________________ Ltp-list mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ltp-list
PATCH v2 2/2 semctl/semctl01.c: Test features IPC_INFO, SEM_INFO and SEM_STAT
Additional tests for features IPC_INFO, SEM_INFO and SEM_STAT.
--- testcases/kernel/syscalls/ipc/semctl/semctl01.c | 39 ++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-)
testcases/kernel/syscalls/ipc/semctl/semctl01.c +38 -1
@@ -41,11 +41,15 @@* call cleanup */ + +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif #include "ipcsem.h" #include "libtestsuite.h" char *TCID ="semctl01" ; -int TST_TOTAL =10 ; +int TST_TOTAL =13 ;static int sem_id_1 =-1 ;
@@ -66,8 +70,12 @@ static void func_sval(void);static void func_rmid (void );static void child_cnt (void );static void child_pid (void ); +static void func_iinfo (int ); +static void func_sinfo (void ); +static void func_sstat (int );static struct semid_ds buf; +static struct seminfo ipc_buf;static unsigned short array[PSEMS ];static struct sembuf sops;
@@ -107,6 +115,9 @@ static struct test_case_t { {SEM4, GETZCNT, func_cnt, SEMUN_CAST & buf, cnt_setup}, {0, SETALL, func_sall, SEMUN_CAST array, sall_setup}, {SEM4, SETVAL, func_sval, SEMUN_CAST INCVAL, NULL}, + {0, IPC_INFO, func_iinfo, SEMUN_CAST & ipc_buf, NULL}, + {0, SEM_INFO, func_sinfo, SEMUN_CAST & ipc_buf, NULL}, + {0, SEM_STAT, func_sstat, SEMUN_CAST & buf, NULL}, {0, IPC_RMID, func_rmid, SEMUN_CAST & buf, NULL}, };
@@ -170,6 +181,8 @@ int main(int argc, char *argv[])case GETZCNT :case GETPID :case GETVAL : +case IPC_INFO : +case SEM_STAT : (*TC [i].func_test) (TEST_RETURN );break ;
@@ -545,6 +558,30 @@ static void func_rmid(void) sem_id_1 =-1 ; } +static void func_iinfo (int hidx) +{ +if (hidx >=0 ) +tst_resm (TPASS ,"the highest index is correct" ); +else +tst_resm (TFAIL ,"the highest index is incorrect" ); +} + +static void func_sinfo (void ) +{ +if (ipc_buf.semusz <1 ) +tst_resm (TFAIL ,"number of semaphore sets is incorrect" ); +else +tst_resm (TPASS ,"number of semaphore sets is correct" ); +} + +static void func_sstat (int semidx) +{ +if (semidx >=0 ) +tst_resm (TPASS ,"id of the semaphore set is correct" ); +else +tst_resm (TFAIL ,"id of the semaphore set is incorrect" ); +} +void setup (void ) {
Signature · 12 lines
1.8.3 ------------------------------------------------------------------------------ Learn Graph Databases - Download FREE O'Reilly Book "Graph Databases" is the definitive new guide to graph databases and their applications. This 200-page book is written by three acclaimed leaders in the field. The early access version is available now. Download your free book today! http://p.sf.net/sfu/neotech_d2d_may _______________________________________________ Ltp-list mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ltp-list
Wanlong Gao
AppliedRe: [LTP] [PATCH V2 2/2]semctl/semctl01.c: Test features IPC_INFO, SEM_INFO and SEM_STAT
Quoted 4 lines · DAN LI
Additional tests for features
IPC_INFO,SEM_INFOandSEM_STAT.Signed-off-by DAN LI <[email protected]>
Applied, thank you.
Wanlong Gao
------------------------------------------------------------------------------
AlienVault Unified Security Management (USM) platform delivers complete security visibility with the essential security capabilities. Easily and efficiently configure, manage, and operate all of your security controls from a single console and one unified framework. Download a free trial.
http://p.sf.net/sfu/alienvault_d2d
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list
Wanlong Gao
AppliedQuoted 5 lines · DAN LI
1. Remove useless comments
2. Revise code to follow ltp-code-style
Signed-off-by DAN LI <[email protected]>
Applied, thank you.
Wanlong Gao
------------------------------------------------------------------------------
AlienVault Unified Security Management (USM) platform delivers complete security visibility with the essential security capabilities. Easily and efficiently configure, manage, and operate all of your security controls from a single console and one unified framework. Download a free trial.
http://p.sf.net/sfu/alienvault_d2d
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list