void print_license_info() { license_struct lstr; int license_valid; fputs("License information:\n", stderr); init_openssl(); load_license(&lstr); print_license(&lstr); license_valid = verify_license(&lstr); free_license(&lstr); free_openssl(); if (!license_valid) { exit(EXIT_FAILURE); } fputs("The license key is valid.\n", stderr); }
int main(int argc,char *argv[]) { int a,b,c; FILE *outfile = NULL, *infile = NULL; char *outfile_name=NULL,*infile_name=NULL; char tmp[20]; int vflag=0,oflag=0,hflag=0,lflag=0,plusflag=0,minusflag=0; #ifdef LICENSE license_struct lstr; #endif while ((c = getopt(argc, argv, "lhvo:")) != -1) { switch (c) { case 'o':/*set outfile*/ outfile_name=optarg; oflag = 1; break; case 'v':/*print version*/ vflag=1; break; case 'h':/*print help (usage)*/ hflag=1; break; case 'l':/*list event types*/ lflag=1; break; default: Usage(argv[0]); return EXIT_FAILURE; } } if (oflag + vflag + hflag + lflag > 1) { Usage(argv[0]); return EXIT_FAILURE; } else if (vflag) { fputs("Log Filter for the TTCN-3 Test Executor\n" "Product number: " PRODUCT_NUMBER "\n" "Build date: " __DATE__ " " __TIME__ "\n" "Compiled with: " C_COMPILER_VERSION "\n\n" COPYRIGHT_STRING "\n\n", stderr); #ifdef LICENSE print_license_info(); #endif return EXIT_SUCCESS; } else if (hflag) { Usage(argv[0]); return EXIT_SUCCESS; } else if(lflag) { ListTypes(); return EXIT_SUCCESS; } #ifdef LICENSE init_openssl(); load_license(&lstr); if (!verify_license(&lstr)) { free_license(&lstr); free_openssl(); exit(EXIT_FAILURE); } if (!check_feature(&lstr, FEATURE_LOGFORMAT)) { fputs("The license key does not allow the filtering of log files.\n", stderr); return 2; } free_license(&lstr); free_openssl(); #endif /* switches: -v -o -h -l filter parameters: parameter+ or parameter- */ for(a=0;a<MaxType;a++)Wflags[a]=0; for(a=1;a<argc;a++) { if(*argv[a]=='-'){if(*(argv[a]+1)=='o')a++;continue;}/*switch*/ if(*(argv[a]+strlen(argv[a])-1)=='-') {/*type to ignore*/ for(b=0,c=0;b<MaxType;b++) if(0==strncmp(EventTypeNames[b],argv[a], strlen(EventTypeNames[b]))&&strlen(EventTypeNames[b])== strlen(argv[a])-1) { Wflags[b]=DontWrite; c=1; } if(!c) {/*Undefined type*/ strncpy(tmp,argv[a],sizeof(tmp)-1); if(strlen(argv[a])>sizeof(tmp)-1) for(c=2;c<5;c++)tmp[sizeof(tmp)-c]='.'; else tmp[strlen(argv[a])-1]='\0'; tmp[sizeof(tmp)-1]='\0'; if(strlen(tmp))fprintf(stderr,"Warning: %s is not a valid " "event-type name.\n",tmp); else fprintf(stderr,"Warning: `-\' without an event-type " "name.\n"); } Wothers=Write; minusflag=1; continue; } if(*(argv[a]+strlen(argv[a])-1)=='+') {/*type to write out*/ for(b=0,c=0;b<MaxType;b++) if(0==strncmp(EventTypeNames[b],argv[a], strlen(EventTypeNames[b]))&&strlen(EventTypeNames[b])== strlen(argv[a])-1) { Wflags[b]=Write; c=1; } if(!c) {/*Undefined type*/ strncpy(tmp,argv[a],sizeof(tmp)-1); if(strlen(argv[a])>sizeof(tmp)-1) for(c=2;c<5;c++)tmp[sizeof(tmp)-c]='.'; else tmp[strlen(argv[a])-1]='\0'; tmp[sizeof(tmp)-1]='\0'; if(strlen(tmp))fprintf(stderr,"Warning: %s is not a valid " "event-type name.\n",tmp); else fprintf(stderr,"Warning: `+\' without an event-type " "name.\n"); } Wothers=DontWrite; plusflag=1; continue; } if(infile_name!=NULL) {/*only one input file at once*/ fprintf(stderr,"Error: more than one input file specified.\n"); return EXIT_FAILURE; } infile_name=argv[a]; } if(minusflag&&plusflag) {/*type1+ and type2- at the same time could cause types that are not defined what to do with, to act based on the last filter definition. Thus it is not allowed.*/ fprintf(stderr,"Error: include and exclude at the same time.\n"); return EXIT_FAILURE; } if(infile_name==NULL)infile=stdin;/*if no infile specified use stdin*/ else { infile=fopen(infile_name,"r"); if(infile==NULL) { fprintf(stderr,"Error opening %s : %s\n",infile_name, strerror(errno)); return EXIT_FAILURE; } } if(oflag) { outfile=fopen(outfile_name,"w"); if(outfile==NULL) { fprintf(stderr,"Error creating %s : %s\n",outfile_name, strerror(errno)); return EXIT_FAILURE; } } else outfile=stdout;/*if no outfile specified use stdout*/ a=ProcessFile(outfile,infile);/*filter infile to outfile*/ if(a==ERR_INVALID_LOG) { if(infile_name!=NULL)fprintf(stderr,"Error: the file %s is not a valid " "log file.\n",infile_name); else fprintf(stderr,"Error: invalid format received from standard " "input.\n"); return EXIT_FAILURE; } else if(a==ERR_WRITE) { if(errno)fprintf(stderr,"Error writing to output: %s\n", strerror(errno)); else fprintf(stderr,"Error writing to output\n"); return EXIT_FAILURE; } return EXIT_SUCCESS; }
int main(int argc,char *argv[]) { int a,b,c,processed_files=0,filename_count=0; char *outfile_name=NULL; int vflag=0,oflag=0; #ifdef LICENSE license_struct lstr; #endif progname=argv[0]; atexit(DelTemp); signal(SIGINT,ControlChandler); while ((c = getopt(argc, argv, "vo:")) != -1) { switch (c) { case 'o': outfile_name=optarg; oflag = 1; break; case 'v': vflag=1; break; default: Usage();return 0; } } if(oflag&&vflag){Usage();return 0;}/*both switches are used*/ if(vflag) { fputs("Log Merger for the TTCN-3 Test Executor\n" "Product number: " PRODUCT_NUMBER "\n" "Version: " VERSION_STRING "\n" "Build date: " __DATE__ " " __TIME__ "\n" "Compiled with: " C_COMPILER_VERSION "\n\n" COPYRIGHT_STRING "\n\n", stderr); #ifdef LICENSE print_license_info(); #endif return 0; } #ifdef LICENSE init_openssl(); load_license(&lstr); if (!verify_license(&lstr)) { free_license(&lstr); free_openssl(); exit(EXIT_FAILURE); } if (!check_feature(&lstr, FEATURE_LOGFORMAT)) { fputs("The license key does not allow the merging of log files.\n", stderr); return 2; } free_license(&lstr); free_openssl(); #endif argc-=optind-1;argv+=optind-1; if(argc<2){Usage();return 0;}/*executed when no input file is given*/ for(a=1;a<argc;a++) {/*find first file with a valid timestamp*/ TimeStampUsed=GetTimeStampFormat(argv[a]); if(TimeStampUsed!=TSF_Undefined)break; } switch(TimeStampUsed) { case TSF_Seconds: fputs("Merging logs with timestamp " "format \"seconds\" has no sense.\n", stderr); return 0; case TSF_Time: TimeStampLength=TIMELENGTH;break; case TSF_DateTime: TimeStampLength=DATETIMELENGTH;break; default: fputs("Unsupported timestamp format.\n", stderr); return 1; } for(a=1,c=0;a<argc;a++) {/*get files with valid timestamp format*/ b=GetTimeStampFormat(argv[a]); if(TimeStampUsed==b) {/*file conains at least one valid timestamp*/ c++; name_list_in=(char **)Realloc(name_list_in,c*sizeof(char *)); name_list_in[c-1] = mcopystr(argv[a]); } else if(b==TSF_Undefined)/*file contains no timestamp or uses a different format than the first match*/ fprintf(stderr,"Warning: unknown format in %s\n",argv[a]); else fprintf(stderr,"Warning: format mismatch in %s\n",argv[a]); } num_allfiles=c; if(num_allfiles<1){Usage();return 0;}/*no valid log file found*/ if(oflag){/*switch [-o outfile] is used -> create outfile*/ outfile = fopen(outfile_name, FOPEN_WRITE); if(outfile==NULL) { fprintf(stderr,"Error creating %s %s\n",outfile_name,strerror(errno)); return 1; } } else { outfile = stdout; } while(1) { filename_count=num_allfiles;start_file=0; while(num_allfiles>0) {/*process files in name_list_in*/ processed_files=OpenMaxFiles(num_allfiles,name_list_in+start_file); must_use_temp=True;/*if there are infiles remaining use tempfiles for all*/ if((processed_files<2)&&(num_allfiles>1)){fprintf(stderr,"Error: " "can not open enough files.\nMore descriptors required " "(set with the command `limit descriptors\')\n");return 1;} if(infiles_processed==True) for(a=0;a<processed_files;a++) { Free(EventList[a]->str_to_add); EventList[a]->str_to_add = NULL; } num_allfiles-=processed_files; ProcessOpenFiles(); CloseAllFiles(); start_file+=processed_files; } must_use_temp=False;/*all infiles processed*/ /*remove temporary files used in previous step*/ if(infiles_processed==True) for(a=0;a<filename_count;a++)remove(name_list_in[a]); infiles_processed=True; for(a=0;a<filename_count;a++)Free(name_list_in[a]); Free(name_list_in); if(num_tempfiles==0)break;/*no more file to process*/ name_list_in=temp_file_list;/*process tempfiles*/ num_allfiles=num_tempfiles; num_tempfiles=0;temp_file_list=NULL; } check_mem_leak(progname); return 0; }