add debug pretty-printing for sync record status flags as well
This commit is contained in:
		
							parent
							
								
									c902f69c6f
								
							
						
					
					
						commit
						17db5de0ca
					
				
					 4 changed files with 61 additions and 6 deletions
				
			
		|  | @ -18,22 +18,33 @@ while (<>) { | |||
| 			$conts =~ s/\s//g; | ||||
| 			$conts =~ s/,$//; | ||||
| 			my @vals = split(/,/, $conts); | ||||
| 			my $pfx; | ||||
| 			my ($pfx, $pfx1); | ||||
| 			for my $e (@vals) { | ||||
| 				if (!defined($pfx)) { | ||||
| 					$pfx = ($e =~ /^([A-Z]+_)/) ? $1 : ""; | ||||
| 					$pfx1 = $pfx = ($e =~ /^([A-Z]+_)/) ? $1 : ""; | ||||
| 				} elsif (length($pfx)) { | ||||
| 					$pfx = "" if ((($e =~ /^([A-Z]+_)/) ? $1 : "") ne $pfx); | ||||
| 				} | ||||
| 			} | ||||
| 			my $bit = 1; | ||||
| 			my $bitn = 0; | ||||
| 			my (@names, @nameos); | ||||
| 			my $nameo = 0; | ||||
| 			for my $e (@vals) { | ||||
| 				my $bits = ($e =~ s/\((\d+)\)$//) ? $1 : 1; | ||||
| 				my $n = substr($e, length($pfx)); | ||||
| 				if ($bits != 1) { | ||||
| 					die("Unsupported field size $bits\n") if ($bits != 2); | ||||
| 					print "#define $e(b) ($bit << (b))\n"; | ||||
| 					push @names, "F-".$n, "N-".$n; | ||||
| 					my $nl = length($n) + 3; | ||||
| 					push @nameos, $nameo, $nameo + $nl; | ||||
| 					$nameo += $nl * 2; | ||||
| 				} else { | ||||
| 					print "#define $e $bit\n"; | ||||
| 					push @names, $n; | ||||
| 					push @nameos, $nameo; | ||||
| 					$nameo += length($n) + 1; | ||||
| 				} | ||||
| 				$bit <<= $bits; | ||||
| 				$bitn += $bits; | ||||
|  | @ -41,6 +52,10 @@ while (<>) { | |||
| 			if (length($pfx)) { | ||||
| 				print "#define ${pfx}_NUM_BITS $bitn\n"; | ||||
| 			} | ||||
| 			if (length($pfx1)) { | ||||
| 				print "#define ${pfx1}_STRINGS \"".join("\\0", @names)."\"\n"; | ||||
| 				print "#define ${pfx1}_OFFSETS ".join(", ", @nameos)."\n"; | ||||
| 			} | ||||
| 			print "\n"; | ||||
| 			$in_enum = 0; | ||||
| 		} else { | ||||
|  |  | |||
							
								
								
									
										24
									
								
								src/common.h
									
										
									
									
									
								
							
							
						
						
									
										24
									
								
								src/common.h
									
										
									
									
									
								
							|  | @ -193,6 +193,30 @@ int equals( const char *str, int strl, const char *cmp, uint cmpl ); | |||
| time_t timegm( struct tm *tm ); | ||||
| #endif | ||||
| 
 | ||||
| void fmt_bits( uint bits, uint num_bits, const char *bit_str, const int *bit_off, char *buf ); | ||||
| 
 | ||||
| #define BIT_FORMATTER_RET(name, pfx) \ | ||||
| 	struct name##_str { char str[sizeof(pfx##__STRINGS)]; }; | ||||
| 
 | ||||
| #define BIT_FORMATTER_PROTO(name, pfx, storage) \ | ||||
| 	storage struct name##_str ATTR_OPTIMIZE  /* force RVO */ \ | ||||
| 	fmt_##name( uint bits ) | ||||
| 
 | ||||
| #define BIT_FORMATTER_IMPL(name, pfx, storage) \ | ||||
| 	BIT_FORMATTER_PROTO(name, pfx, storage) \ | ||||
| 	{ \ | ||||
| 		static const char strings[] = pfx##__STRINGS; \ | ||||
| 		static const int offsets[] = { pfx##__OFFSETS }; \ | ||||
| 		\ | ||||
| 		struct name##_str buf; \ | ||||
| 		fmt_bits( bits, as(offsets), strings, offsets, buf.str ); \ | ||||
| 		return buf; \ | ||||
| 	} | ||||
| 
 | ||||
| #define BIT_FORMATTER_FUNCTION(name, pfx) \ | ||||
| 	BIT_FORMATTER_RET(name, pfx) \ | ||||
| 	BIT_FORMATTER_IMPL(name, pfx, static) | ||||
| 
 | ||||
| void *nfmalloc( size_t sz ); | ||||
| void *nfzalloc( size_t sz ); | ||||
| void *nfrealloc( void *mem, size_t sz ); | ||||
|  |  | |||
|  | @ -17,6 +17,8 @@ | |||
| 
 | ||||
| const char *str_fn[] = { "far side", "near side" }, *str_hl[] = { "push", "pull" }; | ||||
| 
 | ||||
| BIT_FORMATTER_FUNCTION(sts, S) | ||||
| 
 | ||||
| static char * | ||||
| clean_strdup( const char *s ) | ||||
| { | ||||
|  | @ -208,9 +210,8 @@ load_state( sync_vars_t *svars ) | |||
| 				srec->status = S_SKIPPED; | ||||
| 			} | ||||
| 			srec->flags = parse_flags( s ); | ||||
| 			debug( "  entry (%u,%u,%s,%s%s)\n", srec->uid[F], srec->uid[N], fmt_flags( srec->flags ).str, | ||||
| 			       (srec->status & S_SKIPPED) ? "SKIP" : (srec->status & S_EXPIRED) ? "XPIRE" : "", | ||||
| 			       (srec->status & S_DUMMY(F)) ? ",F-DUMMY" : (srec->status & S_DUMMY(N)) ? ",N-DUMMY" : "" ); | ||||
| 			debug( "  entry (%u,%u,%s,%s)\n", srec->uid[F], srec->uid[N], | ||||
| 			       fmt_flags( srec->flags ).str, fmt_sts( srec->status ).str ); | ||||
| 			*svars->srecadd = srec; | ||||
| 			svars->srecadd = &srec->next; | ||||
| 			svars->nsrecs++; | ||||
|  | @ -384,7 +385,7 @@ load_state( sync_vars_t *svars ) | |||
| 						srec->status = (srec->status & ~S_LOGGED) | t3; | ||||
| 						if ((srec->status & S_EXPIRED) && svars->maxxfuid < srec->uid[F]) | ||||
| 							svars->maxxfuid = srec->uid[F]; | ||||
| 						debug( "status now %#x\n", srec->status ); | ||||
| 						debug( "status now %s\n", fmt_sts( srec->status ).str ); | ||||
| 						break; | ||||
| 					case '_': | ||||
| 						debug( "has placeholder now\n" ); | ||||
|  |  | |||
							
								
								
									
										15
									
								
								src/util.c
									
										
									
									
									
								
							
							
						
						
									
										15
									
								
								src/util.c
									
										
									
									
									
								
							|  | @ -378,6 +378,21 @@ timegm( struct tm *t ) | |||
| } | ||||
| #endif | ||||
| 
 | ||||
| void | ||||
| fmt_bits( uint bits, uint num_bits, const char *bit_str, const int *bit_off, char *buf ) | ||||
| { | ||||
| 	uint d = 0; | ||||
| 	for (uint i = 0, val = 1; i < num_bits; i++, val <<= 1) { | ||||
| 		if (bits & val) { | ||||
| 			if (d) | ||||
| 				buf[d++] = ','; | ||||
| 			for (const char *s = bit_str + bit_off[i]; *s; s++) | ||||
| 				buf[d++] = *s; | ||||
| 		} | ||||
| 	} | ||||
| 	buf[d] = 0; | ||||
| } | ||||
| 
 | ||||
| void | ||||
| oob( void ) | ||||
| { | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue