| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -142,6 +142,7 @@ static char *db_pass; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					static char *status_chars = "|/-\\"; | 
					 | 
					 | 
					 | 
					static char *status_chars = "|/-\\"; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					static char *restorefrom; | 
					 | 
					 | 
					 | 
					static char *restorefrom; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					static char *restorename; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					static bool ignore_seq = false; | 
					 | 
					 | 
					 | 
					static bool ignore_seq = false; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					static bool ignore_seqall = false; | 
					 | 
					 | 
					 | 
					static bool ignore_seqall = false; | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -779,6 +780,62 @@ static char logname_io[512]; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					static char *dbcode; | 
					 | 
					 | 
					 | 
					static char *dbcode; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					static bool no_data_log = false; | 
					 | 
					 | 
					 | 
					static bool no_data_log = false; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					/* added before the hour filename - can include:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 *'%yyy' replaced with 4 digit year | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 * '%m' replaced with 2 digit month | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 * '%d' replaced with 2 digit day | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 * and must exactly match the above strings | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 * e.g. '%yyy/%m/' if the CCLs are in yearly+monthly sub-directories of | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 *	'restorefrom/'  */ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					static char *logpath; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					static void replace_ymd(char *srch, char *match, int val) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					{ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						char buf[32], *ptr, *found; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						size_t len; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						len = strlen(match); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						snprintf(buf, sizeof(buf), "%0*d", (int)len, val); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						if (strlen(buf) != len) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							quithere(1, "ERR: val=%d conversion '%%0*d' failed to be " | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
									"length %d '%s'=%d", val, (int)len, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
									buf, (int)strlen(buf)); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						found = srch; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						while (found && *found) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							ptr = strstr(found, match); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							if (ptr) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
								memcpy(ptr, buf, len); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
								found = ptr + len; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							} else | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
								found = NULL; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					static char *hour_filename(const char *path, const char *name, time_t when) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					{ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						char *filename; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						struct tm tm; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						char log_path[1024]; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						gmtime_r(&when, &tm); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						if (!logpath) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							log_path[0] = '\0'; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						else { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							STRNCPY(log_path, logpath); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							replace_ymd(log_path, "%yyy", tm.tm_year + 1900); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							replace_ymd(log_path, "%m", tm.tm_mon + 1); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							replace_ymd(log_path, "%d", tm.tm_mday); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						ASPRINTF(&filename, "%s%s%s%04d%02d%02d%02d.log", | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
									path, log_path, name, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
									tm.tm_year + 1900, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
									tm.tm_mon + 1, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
									tm.tm_mday, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
									tm.tm_hour); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						return filename; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					// low spec version of rotating_log() - no locking
 | 
					 | 
					 | 
					 | 
					// low spec version of rotating_log() - no locking
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					static bool rotating_log_nolock(char *msg, char *prefix) | 
					 | 
					 | 
					 | 
					static bool rotating_log_nolock(char *msg, char *prefix) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					{ | 
					 | 
					 | 
					 | 
					{ | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -935,7 +992,7 @@ static void check_createdate_ccl(char *cmd, tv_t *cd) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							td = tvdiff(cd, &reload_timestamp); | 
					 | 
					 | 
					 | 
							td = tvdiff(cd, &reload_timestamp); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							if (td < -1 || td > ROLL_S + 1) { | 
					 | 
					 | 
					 | 
							if (td < -1 || td > ROLL_S + 1) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								ccl_mismatch++; | 
					 | 
					 | 
					 | 
								ccl_mismatch++; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								filename = rotating_filename("", reload_timestamp.tv_sec); | 
					 | 
					 | 
					 | 
								filename = hour_filename("", "", reload_timestamp.tv_sec); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								tv_to_buf(cd, cd_buf1, sizeof(cd_buf1)); | 
					 | 
					 | 
					 | 
								tv_to_buf(cd, cd_buf1, sizeof(cd_buf1)); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								LOGERR("%s(): CCL contains mismatch data: cmd:%s CCL:%.10s cd:%s", | 
					 | 
					 | 
					 | 
								LOGERR("%s(): CCL contains mismatch data: cmd:%s CCL:%.10s cd:%s", | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									__func__, cmd, filename, cd_buf1); | 
					 | 
					 | 
					 | 
									__func__, cmd, filename, cd_buf1); | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -1308,7 +1365,7 @@ static bool reload() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						if (start.tv_sec < DATE_BEGIN) { | 
					 | 
					 | 
					 | 
						if (start.tv_sec < DATE_BEGIN) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							start.tv_sec = DATE_BEGIN; | 
					 | 
					 | 
					 | 
							start.tv_sec = DATE_BEGIN; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							start.tv_usec = 0L; | 
					 | 
					 | 
					 | 
							start.tv_usec = 0L; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							filename = rotating_filename(restorefrom, start.tv_sec); | 
					 | 
					 | 
					 | 
							filename = hour_filename(restorefrom, restorename, start.tv_sec); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							fp = fopen(filename, "re"); | 
					 | 
					 | 
					 | 
							fp = fopen(filename, "re"); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							if (fp) | 
					 | 
					 | 
					 | 
							if (fp) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								fclose(fp); | 
					 | 
					 | 
					 | 
								fclose(fp); | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -6227,7 +6284,7 @@ static bool reload_from(tv_t *start, const tv_t *finish) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						tv_to_buf(&reload_timestamp, run, sizeof(run)); | 
					 | 
					 | 
					 | 
						tv_to_buf(&reload_timestamp, run, sizeof(run)); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						LOGWARNING("%s(): from %s (stamp %s)", __func__, buf, run); | 
					 | 
					 | 
					 | 
						LOGWARNING("%s(): from %s (stamp %s)", __func__, buf, run); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						filename = rotating_filename(restorefrom, reload_timestamp.tv_sec); | 
					 | 
					 | 
					 | 
						filename = hour_filename(restorefrom, restorename, reload_timestamp.tv_sec); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						if (!logopen(&filename, &fp, &apipe)) | 
					 | 
					 | 
					 | 
						if (!logopen(&filename, &fp, &apipe)) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							quithere(1, "Failed to open '%s'", filename); | 
					 | 
					 | 
					 | 
							quithere(1, "Failed to open '%s'", filename); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -6319,7 +6376,7 @@ static bool reload_from(tv_t *start, const tv_t *finish) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									reloaded_N_files = true; | 
					 | 
					 | 
					 | 
									reloaded_N_files = true; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							} | 
					 | 
					 | 
					 | 
							} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							filename = rotating_filename(restorefrom, reload_timestamp.tv_sec); | 
					 | 
					 | 
					 | 
							filename = hour_filename(restorefrom, restorename, reload_timestamp.tv_sec); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							ok = logopen(&filename, &fp, &apipe); | 
					 | 
					 | 
					 | 
							ok = logopen(&filename, &fp, &apipe); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							if (!ok) { | 
					 | 
					 | 
					 | 
							if (!ok) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								missingfirst = strdup(filename); | 
					 | 
					 | 
					 | 
								missingfirst = strdup(filename); | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -6339,7 +6396,7 @@ static bool reload_from(tv_t *start, const tv_t *finish) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
										finished = true; | 
					 | 
					 | 
					 | 
										finished = true; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
										break; | 
					 | 
					 | 
					 | 
										break; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									} | 
					 | 
					 | 
					 | 
									} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									filename = rotating_filename(restorefrom, reload_timestamp.tv_sec); | 
					 | 
					 | 
					 | 
									filename = hour_filename(restorefrom, restorename, reload_timestamp.tv_sec); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									ok = logopen(&filename, &fp, &apipe); | 
					 | 
					 | 
					 | 
									ok = logopen(&filename, &fp, &apipe); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									if (ok) | 
					 | 
					 | 
					 | 
									if (ok) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
										break; | 
					 | 
					 | 
					 | 
										break; | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -7448,7 +7505,7 @@ static void confirm_reload() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						if (start.tv_sec < DATE_BEGIN) { | 
					 | 
					 | 
					 | 
						if (start.tv_sec < DATE_BEGIN) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							start.tv_sec = DATE_BEGIN; | 
					 | 
					 | 
					 | 
							start.tv_sec = DATE_BEGIN; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							start.tv_usec = 0L; | 
					 | 
					 | 
					 | 
							start.tv_usec = 0L; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							filename = rotating_filename(restorefrom, start.tv_sec); | 
					 | 
					 | 
					 | 
							filename = hour_filename(restorefrom, restorename, start.tv_sec); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							fp = fopen(filename, "re"); | 
					 | 
					 | 
					 | 
							fp = fopen(filename, "re"); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							if (fp) | 
					 | 
					 | 
					 | 
							if (fp) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								fclose(fp); | 
					 | 
					 | 
					 | 
								fclose(fp); | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -7618,11 +7675,7 @@ static void check_restore_dir(char *name) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						if (stat(restorefrom, &statbuf)) | 
					 | 
					 | 
					 | 
						if (stat(restorefrom, &statbuf)) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							quit(1, "ERR: -r '%s' directory doesn't exist", restorefrom); | 
					 | 
					 | 
					 | 
							quit(1, "ERR: -r '%s' directory doesn't exist", restorefrom); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						restorefrom = realloc(restorefrom, strlen(restorefrom)+strlen(name)+1); | 
					 | 
					 | 
					 | 
						restorename = name; | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						if (!restorefrom) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							quithere(1, "OOM"); | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						strcat(restorefrom, name); | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					static struct option long_options[] = { | 
					 | 
					 | 
					 | 
					static struct option long_options[] = { | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -7647,6 +7700,7 @@ static struct option long_options[] = { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						// Generate old keysummary records
 | 
					 | 
					 | 
					 | 
						// Generate old keysummary records
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						{ "key",		required_argument,	0,	'K' }, | 
					 | 
					 | 
					 | 
						{ "key",		required_argument,	0,	'K' }, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						{ "loglevel",		required_argument,	0,	'l' }, | 
					 | 
					 | 
					 | 
						{ "loglevel",		required_argument,	0,	'l' }, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						{ "logpath",		required_argument,	0,	'L' }, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						// marker = enable mark/workmarker/markersummary auto generation
 | 
					 | 
					 | 
					 | 
						// marker = enable mark/workmarker/markersummary auto generation
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						{ "marker",		no_argument,		0,	'm' }, | 
					 | 
					 | 
					 | 
						{ "marker",		no_argument,		0,	'm' }, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						{ "markstart",		required_argument,	0,	'M' }, | 
					 | 
					 | 
					 | 
						{ "markstart",		required_argument,	0,	'M' }, | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -7702,7 +7756,7 @@ int main(int argc, char **argv) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						memset(&ckp, 0, sizeof(ckp)); | 
					 | 
					 | 
					 | 
						memset(&ckp, 0, sizeof(ckp)); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						ckp.loglevel = LOG_NOTICE; | 
					 | 
					 | 
					 | 
						ckp.loglevel = LOG_NOTICE; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						while ((c = getopt_long(argc, argv, "a:b:B:c:d:D:ghi:IkK:l:mM:n:p:P:r:R:s:S:t:Tu:U:vw:yY:", long_options, &i)) != -1) { | 
					 | 
					 | 
					 | 
						while ((c = getopt_long(argc, argv, "a:b:B:c:d:D:ghi:IkK:l:L:mM:n:p:P:r:R:s:S:t:Tu:U:vw:yY:", long_options, &i)) != -1) { | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							switch(c) { | 
					 | 
					 | 
					 | 
							switch(c) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								case '?': | 
					 | 
					 | 
					 | 
								case '?': | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								case ':': | 
					 | 
					 | 
					 | 
								case ':': | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -7815,6 +7869,9 @@ int main(int argc, char **argv) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
										     LOG_EMERG, LOG_DEBUG, ckp.loglevel); | 
					 | 
					 | 
					 | 
										     LOG_EMERG, LOG_DEBUG, ckp.loglevel); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									} | 
					 | 
					 | 
					 | 
									} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									break; | 
					 | 
					 | 
					 | 
									break; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
								case 'L': | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
									logpath = strdup(optarg); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
									break; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								case 'm': | 
					 | 
					 | 
					 | 
								case 'm': | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									markersummary_auto = true; | 
					 | 
					 | 
					 | 
									markersummary_auto = true; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									break; | 
					 | 
					 | 
					 | 
									break; | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
  |