ports/109073: net-mgmt/kismet GPSMAP option broken on !32-bit platforms

Coleman Kane cokane at FreeBSD.org
Mon Feb 12 04:20:06 UTC 2007


>Number:         109073
>Category:       ports
>Synopsis:       net-mgmt/kismet GPSMAP option broken on !32-bit platforms
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Mon Feb 12 04:20:05 GMT 2007
>Closed-Date:
>Last-Modified:
>Originator:     Coleman Kane
>Release:        FreeBSD 7.0-CURRENT amd64
>Organization:
FreeBSD Committers
>Environment:
FreeBSD erwin 7.0-CURRENT FreeBSD 7.0-CURRENT #2: Mon Feb  5 12:38:42 MST 2007     root at erwin:/usr/obj/usr/src/sys/ERWIN  amd64
>Description:
	When building net-mgmt/kismet with the GPSMAP option turned on, the
build will fail on a non 32-bit architecture (actually any architecture
where sizeof(int) != sizeof(void*)) due to the assumption that the "int"
type and "void*" type can be safely "reinterpret_cast"ed. The following
error will be reported trying to build gpsmap.cc:
gpsmap.cc:2456: error: reinterpret_cast from `void*' to `int' loses
	precision

In addition, a number of other type-size and signed-ness warnings will
be spit out by the compiler, and should be looked into.

>How-To-Repeat:
	Do the following (as root):
cd /usr/ports/net-mgmt/kismet
make config
select "GPSMAP" option
make
(make will fail with the above error if you are on amd64, for instance)
>Fix:
The following patch uses intptr_t, rather than, int as the type definition
so as to allow safe reinterpret_cast to convert the data type from pointer
to integer.

--- patch-kismet-gpsmap.cc begins here ---
--- gpsmap.cc.orig	Sun Feb 11 23:06:50 2007
+++ gpsmap.cc	Sun Feb 11 23:04:48 2007
@@ -2449,11 +2449,11 @@
     pthread_attr_destroy(&attr);
 
     // Now wait for the threads to complete and come back
-    int thread_status;
+    intptr_t thread_status;
     for (int t = 0; t < numthreads; t++) {
         void *tmp;
         pthread_join(mapthread[t], &tmp);
-        thread_status = reinterpret_cast<int>(tmp);
+        thread_status = reinterpret_cast<intptr_t>(tmp);
     }
 #else
     // Run one instance of our "thread".  thread number 0, it should just crunch it all
--- patch-kismet-gpsmap.cc ends here ---


>Release-Note:
>Audit-Trail:
>Unformatted:



More information about the freebsd-ports-bugs mailing list