# duplicate htons() in check_file_directory_conflict()

3 messages from 2005-06-06 to 2005-06-07. Participants: Timo Hirvonen, Linus Torvalds.
Thread: https://gitlist.dev/t/850

## Timo Hirvonen, 2005-06-06 23:02

Subject: duplicate htons() in check_file_directory_conflict()
Message-ID: <1118098966l.5384l.0l@garlic>
URL: https://gitlist.dev/e/1118098966l.5384l.0l%40garlic

```
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, 2005-06-07 01:59

Subject: Re: duplicate htons() in check_file_directory_conflict()
Message-ID: <Pine.LNX.4.58.0506061858140.1876@ppc970.osdl.org>
URL: https://gitlist.dev/e/Pine.LNX.4.58.0506061858140.1876%40ppc970.osdl.org
In-Reply-To: <1118098966l.5384l.0l@garlic>

```


On Mon, 6 Jun 2005, Timo Hirvonen wrote:
>
> 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, 2005-06-07 20:35

Subject: [PATCH] Use ntohs instead of htons to convert ce_flags to host byte order
Message-ID: <1118176556l.5398l.1l@garlic>
URL: https://gitlist.dev/e/1118176556l.5398l.1l%40garlic
In-Reply-To: <Pine.LNX.4.58.0506061858140.1876@ppc970.osdl.org>

```
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;
 	}
 




```
