From 16bbd13af7244cc0967d9f12327f63ffcaeac4bd Mon Sep 17 00:00:00 2001
From: Daniel Stenberg <daniel@haxx.se>
Date: Wed, 13 Jul 2005 18:06:40 +0000
Subject: [PATCH] Diego Casorran patches to make (lib)curl build fine on Amiga
 again

---
 CHANGES              |  3 +++
 RELEASE-NOTES        |  3 ++-
 lib/amigaos.c        | 55 ++++++++++++++++++++++++++++++++------------
 lib/amigaos.h        | 14 +++++++----
 lib/config-amigaos.h |  5 +++-
 lib/if2ip.c          |  3 ++-
 lib/makefile.amiga   |  6 ++---
 lib/mprintf.c        |  3 +++
 src/config-amigaos.h | 10 ++++++--
 src/makefile.amiga   |  8 +++----
 10 files changed, 79 insertions(+), 31 deletions(-)

diff --git a/CHANGES b/CHANGES
index d4d788f2c2..969a44d2ef 100644
--- a/CHANGES
+++ b/CHANGES
@@ -7,6 +7,9 @@
                                   Changelog
 
 
+Daniel (13 July 2005)
+- Diego Casorran provided patches to make curl build fine on Amiga again.
+
 Daniel (12 July 2005)
 - Adrian Schuur added trailer support in the chunked encoding stream. The
   trailer is then sent to the normal header callback/stream. I wrote up test
diff --git a/RELEASE-NOTES b/RELEASE-NOTES
index f29fba43e4..d3c52474a8 100644
--- a/RELEASE-NOTES
+++ b/RELEASE-NOTES
@@ -17,6 +17,7 @@ This release includes the following changes:
 
 This release includes the following bugfixes:
 
+ o builds fine on AmigaOS again
  o corrected date parsing on Windows with auto-DST-adjust enabled
  o treats CONNECT 407 responses with bodies better during Digest/NTLM auth
  o improved strerror_r() API guessing when cross-compiling
@@ -44,6 +45,6 @@ advice from friends like these:
 
  John McGowan, Georg Wicherski, Andres Garcia, Eric Cooper, Todd Kulesza,
  Tupone Alfredo, Gisle Vanem, David Shaw, Andrew Bushnell, Dan Fandrich,
- Adrian Schuur
+ Adrian Schuur, Diego Casorran
 
         Thanks! (and sorry if I forgot to mention someone)
diff --git a/lib/amigaos.c b/lib/amigaos.c
index 13336ce051..95442a5338 100644
--- a/lib/amigaos.c
+++ b/lib/amigaos.c
@@ -22,28 +22,53 @@
  ***************************************************************************/
 
 #include "amigaos.h"
-#include <stdio.h> /* for stderr */
+#include <amitcp/socketbasetags.h>
 
 struct Library *SocketBase = NULL;
+extern int errno, h_errno;
+
+#ifdef __libnix__
+#include <stabs.h>
+void __request(const char *msg);
+#else
+# define __request( msg )	Printf( msg "\n\a")
+#endif
 
 void amiga_cleanup()
 {
-  if(SocketBase)
-    CloseLibrary(SocketBase);
-
-  SocketBase = NULL;
+	if(SocketBase) {
+		CloseLibrary(SocketBase);
+		SocketBase = NULL;
+	}
 }
 
 BOOL amiga_init()
 {
-  if(!SocketBase)
-    SocketBase = OpenLibrary("bsdsocket.library", 4);
-
-  if(!SocketBase) {
-    fprintf(stderr, "No TCP/IP Stack running!\n\a");
-    return FALSE;
-  }
-
-  atexit(amiga_cleanup);
-  return TRUE;
+	if(!SocketBase)
+		SocketBase = OpenLibrary("bsdsocket.library", 4);
+	
+	if(!SocketBase) {
+		__request("No TCP/IP Stack running!");
+		return FALSE;
+	}
+	
+	if(SocketBaseTags(
+		SBTM_SETVAL(SBTC_ERRNOPTR(sizeof(errno))), (ULONG) &errno,
+//		SBTM_SETVAL(SBTC_HERRNOLONGPTR),	   (ULONG) &h_errno,
+		SBTM_SETVAL(SBTC_LOGTAGPTR),		   (ULONG) "cURL",
+	TAG_DONE)) {
+		
+		__request("SocketBaseTags ERROR");
+		return FALSE;
+	}
+	
+#ifndef __libnix__
+	atexit(amiga_cleanup);
+#endif
+	
+	return TRUE;
 }
+
+#ifdef __libnix__
+ADD2EXIT(amiga_cleanup,-50);
+#endif
diff --git a/lib/amigaos.h b/lib/amigaos.h
index 0196eece7b..a859ef77ca 100644
--- a/lib/amigaos.h
+++ b/lib/amigaos.h
@@ -32,13 +32,19 @@
 #include <proto/exec.h>
 #include <proto/dos.h>
 
-#include <bsdsocket.h>
+#include <sys/socket.h>
 
 #include "config-amigaos.h"
 
-#define select(args...) WaitSelect( args, NULL)
-#define inet_ntoa(x)    Inet_NtoA( x ## .s_addr)
-#define ioctl(a,b,c,d)  IoctlSocket( (LONG)a, (ULONG)b, (char*)c)
+#ifndef select
+# define select(args...) WaitSelect( args, NULL)
+#endif
+#ifndef inet_ntoa
+# define inet_ntoa(x)    Inet_NtoA( x ## .s_addr)
+#endif
+#ifndef ioctl
+# define ioctl(a,b,c,d)  IoctlSocket( (LONG)a, (ULONG)b, (char*)c)
+#endif
 #define _AMIGASF        1
 
 extern void amiga_cleanup();
diff --git a/lib/config-amigaos.h b/lib/config-amigaos.h
index 88779753dc..2bc7c424a5 100644
--- a/lib/config-amigaos.h
+++ b/lib/config-amigaos.h
@@ -54,6 +54,7 @@
 #define HAVE_UTIME_H 1
 #define HAVE_WRITABLE_ARGV 1
 #define HAVE_ZLIB_H 1
+#define HAVE_SYS_IOCTL_H 1
 
 #define USE_OPENSSL 1
 #define USE_SSLEAY 1
@@ -80,7 +81,9 @@
 #define TIME_WITH_SYS_TIME 1
 
 #define in_addr_t int
-#define socklen_t int
+#ifndef socklen_t
+# define socklen_t int
+#endif
 
 #ifndef O_RDONLY
 # define O_RDONLY 0x0000
diff --git a/lib/if2ip.c b/lib/if2ip.c
index 26b4fae0ac..c975ae2004 100644
--- a/lib/if2ip.c
+++ b/lib/if2ip.c
@@ -34,7 +34,8 @@
 #include "if2ip.h"
 
 #if !defined(WIN32) && !defined(__BEOS__) && !defined(__CYGWIN32__) && \
-    !defined(__riscos__) && !defined(__INTERIX) && !defined(NETWARE)
+    !defined(__riscos__) && !defined(__INTERIX) && !defined(NETWARE) && \
+    !defined(_AMIGASF)
 
 #ifdef HAVE_SYS_SOCKET_H
 #include <sys/socket.h>
diff --git a/lib/makefile.amiga b/lib/makefile.amiga
index 71a1729795..49cb80cf19 100644
--- a/lib/makefile.amiga
+++ b/lib/makefile.amiga
@@ -7,8 +7,8 @@
 ATCPSDKI=	/GG/netinclude
 
 
-CC	=	gcc
-CFLAGS	=	-I$(ATCPSDKI) -m68020-60 -noixemul -I. -I../include -W -Wall
+CC	=	m68k-amigaos-gcc
+CFLAGS	=	-I$(ATCPSDKI) -m68020-60 -O2 -msoft-float -noixemul -g -I. -I../include -W -Wall
 
 OBJS = amigaos.c base64.c connect.c content_encoding.c cookie.c dict.c easy.c \
 	escape.c file.c formdata.c ftp.c getenv.c getinfo.c hash.c hostip.c   \
@@ -17,7 +17,7 @@ OBJS = amigaos.c base64.c connect.c content_encoding.c cookie.c dict.c easy.c \
 	ldap.c llist.c md5.c memdebug.c mprintf.c multi.c netrc.c parsedate.c \
 	progress.c security.c select.c sendf.c share.c speedcheck.c ssluse.c  \
 	strequal.c strtok.c telnet.c timeval.c transfer.c url.c version.c \
-	sslgen.c gtls.c
+	sslgen.c gtls.c strerror.c
 
 all:	$(OBJS:.c=.o)
 	ar cru libcurl.a $(OBJS:.c=.o)
diff --git a/lib/mprintf.c b/lib/mprintf.c
index b9fe238f93..598ea76267 100644
--- a/lib/mprintf.c
+++ b/lib/mprintf.c
@@ -75,6 +75,9 @@
 # define BOOL char
 #endif
 
+#ifdef _AMIGASF
+# undef FORMAT_INT
+#endif
 
 /* Lower-case digits.  */
 static const char lower_digits[] = "0123456789abcdefghijklmnopqrstuvwxyz";
diff --git a/src/config-amigaos.h b/src/config-amigaos.h
index 0f904a30fb..e067c9662f 100644
--- a/src/config-amigaos.h
+++ b/src/config-amigaos.h
@@ -17,14 +17,20 @@
 #define HAVE_SYS_TIME_H         1
 #define HAVE_TIME_H             1
 #define TIME_WITH_SYS_TIME      1
-#define HAVE_TERMIOS_H          1
-#define HAVE_FTRUNCATE          1
+
+#if 0
+# define HAVE_TERMIOS_H         1
+# define HAVE_FTRUNCATE         1
+#endif
 
 #define HAVE_PWD_H              1
 
 #ifndef F_OK
 # define F_OK 0
 #endif
+#ifndef O_RDONLY
+# define	O_RDONLY	0x0000		/* open for reading only */
+#endif
 #ifndef LONG_MAX
 # define        LONG_MAX        0x7fffffffL             /* max value for a long */
 #endif
diff --git a/src/makefile.amiga b/src/makefile.amiga
index 51e084d4ba..9e03e070f0 100644
--- a/src/makefile.amiga
+++ b/src/makefile.amiga
@@ -7,9 +7,9 @@
 ATCPSDKI=	/GG/netinclude
 
 
-CC	=	gcc
-CFLAGS	=	-I$(ATCPSDKI) -m68020-60 -noixemul -I. -I../include -W -Wall
-LIBS	=	../lib/libcurl.a -lsslnix -lcryptonix -lz
+CC	=	m68k-amigaos-gcc
+CFLAGS	=	-I$(ATCPSDKI) -m68020-60 -O2 -msoft-float -noixemul -g -I. -I../include -W -Wall
+LIBS	=	../lib/libcurl.a -lssl -lcrypto -lz
 MANPAGE =	../docs/curl.1
 README	=	../docs/MANUAL
 MKHELP	=	../src/mkhelp.pl
@@ -18,7 +18,7 @@ OBJS	=	getpass.c hugehelp.c main.c urlglob.c writeenv.c writeout.c
 
 
 all:	hugehelp.c $(OBJS:.c=.o)
-	$(CC) $(CFLAGS) -s -o cURL $(OBJS:.c=.o) $(LIBS)
+	$(CC) $(CFLAGS) -o cURL $(OBJS:.c=.o) $(LIBS) -Wl,-Map,cURL.map,--cref
 
 hugehelp.c: $(README) $(MANPAGE)  mkhelp.pl
 	rm -f hugehelp.c
-- 
GitLab