From 07ddcd64cfef3d135917011878bc7c2cb027b397 Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Wed, 14 May 2008 13:49:48 +0000 Subject: [PATCH] * Renamed libnetapi to libbnetapi. Create a symlink in the image. * Extended R5 compatibility check to also consider calls from libbnetapi. * Fixed incorrect R5 compatibility check in BNetEndpoint constructor. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25489 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- build/jam/BuildSetup | 8 ++--- build/jam/HaikuImage | 4 ++- headers/private/net/r5_compatibility.h | 2 ++ src/kits/network/init.cpp | 4 ++- src/kits/network/libnetapi/Jamfile | 3 +- src/kits/network/libnetapi/NetEndpoint.cpp | 5 +-- src/kits/network/libnetapi/init.cpp | 41 ++++++++++++++++++++++ src/kits/network/socket.cpp | 6 +++- 8 files changed, 61 insertions(+), 12 deletions(-) create mode 100644 src/kits/network/libnetapi/init.cpp diff --git a/build/jam/BuildSetup b/build/jam/BuildSetup index c4864e1852..f762b90c2d 100644 --- a/build/jam/BuildSetup +++ b/build/jam/BuildSetup @@ -359,7 +359,7 @@ if $(HAIKU_SHARED_LIBSUPC++) { # network libraries HAIKU_NETWORK_LIBS = network ; -HAIKU_NETAPI_LIB = netapi ; +HAIKU_NETAPI_LIB = bnetapi ; HAIKU_SELECT_UNAME_ETC_LIB = ; # libroot, against which we link anyway # library and executable glue code @@ -408,8 +408,8 @@ HAIKU_BUILD_DESCRIPTION ?= "Unknown Build" ; # init library name map { local i ; - for i in be game GL mail media midi midi2 network netapi opengl screensaver root z - textencoding tracker translation { + for i in be game GL mail media midi midi2 network bnetapi opengl + screensaver root z textencoding tracker translation { HAIKU_LIBRARY_NAME_MAP_$(i) = lib$(i).so ; } HAIKU_LIBRARY_NAME_MAP_libstdc++ = $(HAIKU_LIBSTDC++) ; @@ -658,7 +658,7 @@ if $(HOST_PLATFORM_BEOS_COMPATIBLE) { # network libraries if $(HOST_PLATFORM_HAIKU_COMPATIBLE) { HOST_NETWORK_LIBS = network ; - HOST_NETAPI_LIB = netapi ; + HOST_NETAPI_LIB = bnetapi ; HOST_SELECT_UNAME_ETC_LIB = ; # libroot } else if $(HOST_PLATFORM_BONE_COMPATIBLE) { HOST_NETWORK_LIBS = socket bind ; diff --git a/build/jam/HaikuImage b/build/jam/HaikuImage index 023de2dbf1..921dcd05ba 100644 --- a/build/jam/HaikuImage +++ b/build/jam/HaikuImage @@ -64,7 +64,7 @@ BEOS_DEMOS = BSnow Chart Clock $(X86_ONLY)Cortex FontDemo Playground Pulse Sudoku ; BEOS_SYSTEM_LIBS = libbe.so $(HAIKU_LIBSTDC++) libmedia.so libtracker.so - libtranslation.so libnetapi.so libnetwork.so libdebug.so libbsd.so + libtranslation.so libbnetapi.so libnetwork.so libdebug.so libbsd.so libmail.so libtextencoding.so libz.so libfreetype.so libpng.so libmidi.so libmidi2.so libdevice.so libgame.so libscreensaver.so libroot.so $(X86_ONLY)libGL.so libfluidsynth.so liblpsolve55.so liblinprog.so libalm.so @@ -197,6 +197,8 @@ for lib in $(BEOS_SYSTEM_LIBS_LIBNETWORK_ALIASES) { AddSymlinkToHaikuImage beos system lib : libnetwork.so : $(lib) ; } +AddSymlinkToHaikuImage beos system lib : libbnetapi.so : libnetapi.so ; + # libGL.so has GLUT built-in if $(TARGET_ARCH) = x86 { AddSymlinkToHaikuImage beos system lib : $(X86_ONLY)libGL.so : libglut.so ; diff --git a/headers/private/net/r5_compatibility.h b/headers/private/net/r5_compatibility.h index eb9f086e5f..e567e7c817 100644 --- a/headers/private/net/r5_compatibility.h +++ b/headers/private/net/r5_compatibility.h @@ -41,5 +41,7 @@ struct r5_sockaddr_in { extern bool __gR5Compatibility; extern addr_t __gNetworkStart; extern addr_t __gNetworkEnd; +extern addr_t __gNetAPIStart; +extern addr_t __gNetAPIEnd; #endif // NET_R5_COMPATIBILITY_H diff --git a/src/kits/network/init.cpp b/src/kits/network/init.cpp index 71c5741385..624970f034 100644 --- a/src/kits/network/init.cpp +++ b/src/kits/network/init.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2006, Haiku, Inc. All Rights Reserved. + * Copyright 2006-2008, Haiku, Inc. All Rights Reserved. * Distributed under the terms of the MIT License. * * Authors: @@ -18,6 +18,8 @@ bool __gR5Compatibility = false; addr_t __gNetworkStart; addr_t __gNetworkEnd; +addr_t __gNetAPIStart; +addr_t __gNetAPIEnd; static void diff --git a/src/kits/network/libnetapi/Jamfile b/src/kits/network/libnetapi/Jamfile index ad2a7a4418..3a9e198958 100644 --- a/src/kits/network/libnetapi/Jamfile +++ b/src/kits/network/libnetapi/Jamfile @@ -5,6 +5,7 @@ SetSubDirSupportedPlatformsBeOSCompatible ; UsePrivateHeaders net ; local netapi_sources = + init.cpp NetEndpoint.cpp NetAddress.cpp NetBuffer.cpp @@ -43,7 +44,7 @@ if $(TARGET_PLATFORM) != haiku { # boot home config lib ; boot home Desktop haiku-networkingkit lib ; } else { - SharedLibrary libnetapi.so : + SharedLibrary libbnetapi.so : $(netapi_sources) : be $(TARGET_NETWORK_LIBS) ; diff --git a/src/kits/network/libnetapi/NetEndpoint.cpp b/src/kits/network/libnetapi/NetEndpoint.cpp index a9e501ef46..80fe168119 100644 --- a/src/kits/network/libnetapi/NetEndpoint.cpp +++ b/src/kits/network/libnetapi/NetEndpoint.cpp @@ -3,9 +3,6 @@ * Distributed under the terms of the MIT License. */ - -#include - #include #include @@ -28,7 +25,7 @@ BNetEndpoint::BNetEndpoint(int type) fTimeout(B_INFINITE_TIMEOUT), fLastError(0) { - if ((fSocket = socket(__gR5Compatibility ? R5_AF_INET : AF_INET, type, 0)) < 0) + if ((fSocket = socket(AF_INET, type, 0)) < 0) fLastError = errno; else fInit = B_OK; diff --git a/src/kits/network/libnetapi/init.cpp b/src/kits/network/libnetapi/init.cpp new file mode 100644 index 0000000000..bffee43a83 --- /dev/null +++ b/src/kits/network/libnetapi/init.cpp @@ -0,0 +1,41 @@ +/* + * Copyright 2006-2008, Haiku, Inc. All Rights Reserved. + * Distributed under the terms of the MIT License. + * + * Authors: + * Axel Dörfler, axeld@pinc-software.de + */ + +#include + +#include +#include + +#include + + +static void +find_own_image() +{ + int32 cookie = 0; + image_info info; + while (get_next_image_info(B_CURRENT_TEAM, &cookie, &info) == B_OK) { + if (((uint32)info.text <= (uint32)find_own_image + && (uint32)info.text + (uint32)info.text_size > (uint32)find_own_image)) { + // found us + __gNetAPIStart = (addr_t)min_c(info.text, info.data); + __gNetAPIEnd = min_c((addr_t)info.text + info.text_size, + (addr_t)info.data + info.data_size); + break; + } + } +} + + +extern "C" void +initialize_before() +{ + // If in compatibility mode get our code address range. + if (__gR5Compatibility) + find_own_image(); +} diff --git a/src/kits/network/socket.cpp b/src/kits/network/socket.cpp index d758cee5aa..420736cddb 100644 --- a/src/kits/network/socket.cpp +++ b/src/kits/network/socket.cpp @@ -38,8 +38,12 @@ check_r5_compatibility() }; stack_frame* frame = (stack_frame*)get_stack_frame(); - if (frame->return_address >= __gNetworkStart && frame->return_address < __gNetworkEnd) + if (frame->return_address >= __gNetworkStart + && frame->return_address < __gNetworkEnd + || frame->return_address >= __gNetAPIStart + && frame->return_address < __gNetAPIEnd) { return false; + } return true; #endif