threads / discuss / 850

duplicate htons() in check_file_directory_conflict()

Subject: duplicate htons() in check_file_directory_conflict()

## tl;dr

3 messages between Jun 6, 2005 and Jun 7, 2005.

replies: 2people: 2as markdown or json

Timo Hirvonen· Jun 6, 2005, 23:02 UTC · lore
Hi,

create_ce_flags() macro calls htons() so the htons()s in check_file_directory_conflict() should be removed or alternatively htons should be removed from the create_ce_flags macro. I noticed the bug when compiling cogito with -Wshadow.

read-cache.c:208
        pos = cache_name_pos(pathbuf,
                             htons(create_ce_flags(len, stage)));
read-cache.c:232
        pos = cache_name_pos(path,
                             htons(create_ce_flags(namelen, stage)));
-- 
http://onion.dynserv.net/~timo/
Linus Torvalds· Jun 7, 2005, 01:59 UTC · re: Timo Hirvonen · lore

Re: duplicate htons() in check_file_directory_conflict()

On Mon, 6 Jun 2005, Timo Hirvonen wrote:
Show 5 quoted lines
>
> create_ce_flags() macro calls htons() so the htons()s in  
> check_file_directory_conflict() should be removed or alternatively htons  
> should be removed from the create_ce_flags macro. I noticed the bug when  
> compiling cogito with -Wshadow.
No, but it probably should be a ntohs()..

cache_name_pos() takes a host-order thing, and create_ce_flags creates a network order thing. It so happens that on all sane setups, ntohs == htons, so..

		Linus
Timo Hirvonen· Jun 7, 2005, 20:35 UTC · re: Linus Torvalds · lore

[PATCH] Use ntohs instead of htons to convert ce_flags to host byte order

Use ntohs instead of htons to convert ce_flags to host byte order

--- commit f827ec4fa1be102bda5b92edbf380defa03e8ae2 tree 735922d31ccdc6a2dc1f8e3f1388445903542385 parent fd787bb8d89cdacedc16cfef9dc4feb0cf843def author Timo Hirvonen <tihirvon@ee.oulu.fi> Tue, 07 Jun 2005 23:18:02 +0300 committer Timo Hirvonen <tihirvon@ee.oulu.fi> Tue, 07 Jun 2005 23:18:02 +0300

 read-cache.c |   10 +++++-----
 1 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/read-cache.c b/read-cache.c
--- a/read-cache.c
+++ b/read-cache.c
@@ -132,7 +132,7 @@ int cache_name_pos(const char *name, int
 	while (last > first) {
 		int next = (last + first) >> 1;
 		struct cache_entry *ce = active_cache[next];
-		int cmp = cache_name_compare(name, namelen, ce->name, htons(ce->ce_flags));
+		int cmp = cache_name_compare(name, namelen, ce->name, ntohs(ce->ce_flags));
 		if (!cmp)
 			return next;
 		if (cmp < 0) {
@@ -206,7 +206,7 @@ static int check_file_directory_conflict
 		*ep = 0;    /* first cut it at slash */
 		len = ep - pathbuf;
 		pos = cache_name_pos(pathbuf,
-				     htons(create_ce_flags(len, stage)));
+				     ntohs(create_ce_flags(len, stage)));
 		if (0 <= pos) {
 			/* Our leading path component is registered as a file,
 			 * and we are trying to make it a directory.  This is
@@ -230,7 +230,7 @@ static int check_file_directory_conflict
 	 * a directory there?
 	 */
 	pos = cache_name_pos(path,
-			     htons(create_ce_flags(namelen, stage)));
+			     ntohs(create_ce_flags(namelen, stage)));
 
 	/* (0 <= pos) cannot happen because add_cache_entry()
 	 * should have taken care of that case.
@@ -279,7 +279,7 @@ int add_cache_entry(struct cache_entry *
 	int pos;
 	int ok_to_add = option & ADD_CACHE_OK_TO_ADD;
 	int ok_to_replace = option & ADD_CACHE_OK_TO_REPLACE;
-	pos = cache_name_pos(ce->name, htons(ce->ce_flags));
+	pos = cache_name_pos(ce->name, ntohs(ce->ce_flags));
 
 	/* existing match? Just replace it */
 	if (pos >= 0) {
@@ -307,7 +307,7 @@ int add_cache_entry(struct cache_entry *
 	if (check_file_directory_conflict(ce, ok_to_replace)) {
 		if (!ok_to_replace)
 			return -1;
-		pos = cache_name_pos(ce->name, htons(ce->ce_flags));
+		pos = cache_name_pos(ce->name, ntohs(ce->ce_flags));
 		pos = -pos-1;
 	}
 

← back to recent threads