Browse Source

- fixed flag hash bug, reported by Tomas Mandys
- fixed MAX_FLAG usage (flags no = MAX_FLAG+1 and not MAX_FLAG)

Andrei Pelinescu-Onciul 20 years ago
parent
commit
7b6b43514d
1 changed files with 5 additions and 5 deletions
  1. 5 5
      flags.c

+ 5 - 5
flags.c

@@ -74,10 +74,10 @@ int flag_in_range( flag_t flag ) {
 #define FLAGS_NAME_HASH_ENTRIES		32
 #define FLAGS_NAME_HASH_ENTRIES		32
 
 
 struct flag_entry{
 struct flag_entry{
-	str name;
-	int no;
 	struct flag_entry* next;
 	struct flag_entry* next;
 	struct flag_entry* prev;
 	struct flag_entry* prev;
+	str name;
+	int no;
 };
 };
 
 
 
 
@@ -87,7 +87,7 @@ struct flag_hash_head{
 };
 };
 
 
 static struct flag_hash_head  name2flags[FLAGS_NAME_HASH_ENTRIES];
 static struct flag_hash_head  name2flags[FLAGS_NAME_HASH_ENTRIES];
-static unsigned char registered_flags[MAX_FLAG];
+static unsigned char registered_flags[MAX_FLAG+1];
 
 
 
 
 void init_named_flags()
 void init_named_flags()
@@ -191,9 +191,9 @@ int register_flag(char* name, int pos)
 		}
 		}
 	}else{
 	}else{
 		/* alloc an empty flag */
 		/* alloc an empty flag */
-		last_flag=crt_flag+MAX_FLAG;
+		last_flag=crt_flag+(MAX_FLAG+1);
 		for (; crt_flag!=last_flag; crt_flag++){
 		for (; crt_flag!=last_flag; crt_flag++){
-			r=crt_flag%MAX_FLAG;
+			r=crt_flag%(MAX_FLAG+1);
 			if (registered_flags[r]==0){
 			if (registered_flags[r]==0){
 				pos=r;
 				pos=r;
 				break;
 				break;