From 9bdb41f0c06bc2c4c26dac50f34cda1ae752bb17 Mon Sep 17 00:00:00 2001 From: NicJA Date: Tue, 5 Jul 2011 22:20:07 +0000 Subject: [PATCH] add mmakefile's to build SMBFS for AROS. disable custom 64bit math code + time function that uses it - and let gcc optimise the necessary code for AROS platforms. Fix fib_FileName usage on AROS (is this correct - ambfs uses it as a bcpl string with the size stored in a ulong at the start.. should this also be on AROS with the ABI compatability fixes??) and use BSTR functions on AROS (some more need changed but im unsure how - perhaps Jason or Pavel could look?). git-svn-id: https://svn.aros.org/svn/aros/trunk/AROS@39848 fb15a70f-31f2-0310-bbcc-cdcc74a49acc --- workbench/network/smbfs/mmakefile.src | 8 ++ workbench/network/smbfs/source_code/assert.c | 2 + workbench/network/smbfs/source_code/main.c | 88 +++++++++++++++++++--- workbench/network/smbfs/source_code/mmakefile.src | 21 ++++++ workbench/network/smbfs/source_code/proc.c | 20 +++++ .../network/smbfs/source_code/smb_abstraction.c | 2 + .../network/smbfs/source_code/system_headers.h | 7 +- 7 files changed, 135 insertions(+), 13 deletions(-) create mode 100644 workbench/network/smbfs/mmakefile.src create mode 100644 workbench/network/smbfs/source_code/mmakefile.src diff --git a/workbench/network/smbfs/mmakefile.src b/workbench/network/smbfs/mmakefile.src new file mode 100644 index 0000000000..08d09669d6 --- /dev/null +++ b/workbench/network/smbfs/mmakefile.src @@ -0,0 +1,8 @@ +# $Id$ + +include $(TOP)/config/make.cfg + +##MM- workbench-network : workbench-network-smbfs +#MM- workbench-network-smbfs : workbench-network-smbfs-client workbench-network-smbfs-docs + +%common diff --git a/workbench/network/smbfs/source_code/assert.c b/workbench/network/smbfs/source_code/assert.c index 874ba5f0a7..6000e80fda 100755 --- a/workbench/network/smbfs/source_code/assert.c +++ b/workbench/network/smbfs/source_code/assert.c @@ -39,9 +39,11 @@ #include +#if !defined(__AROS__) extern struct Library * AbsExecBase; #define SysBase AbsExecBase +#endif extern void kprintf(const char *,...); extern void __stdargs kputc(char c); diff --git a/workbench/network/smbfs/source_code/main.c b/workbench/network/smbfs/source_code/main.c index 547c2263f9..a8cee53375 100755 --- a/workbench/network/smbfs/source_code/main.c +++ b/workbench/network/smbfs/source_code/main.c @@ -142,7 +142,9 @@ VOID ASM AsmFreePooled(REG(a0,APTR poolHeader),REG(a1,APTR memory),REG(d0,ULONG /****************************************************************************/ /* Forward declarations for local routines. */ +#if !defined(__AROS__) LONG _start(VOID); +#endif LONG VARARGS68K LocalPrintf(STRPTR format, ...); STRPTR amitcp_strerror(int error); STRPTR host_strerror(int error); @@ -216,7 +218,9 @@ STATIC VOID HandleFileSystem(STRPTR device_name, STRPTR volume_name, STRPTR serv /****************************************************************************/ +#if !defined(__AROS__) struct Library * SysBase; +#endif struct Library * DOSBase; struct Library * UtilityBase; struct Library * IntuitionBase; @@ -299,8 +303,11 @@ STATIC UBYTE M2A[256]; /****************************************************************************/ -LONG -_start(VOID) +#if !defined(__AROS__) +LONG _start(VOID) +#else +int main(void) +#endif { struct { @@ -352,6 +359,7 @@ _start(VOID) char env_user_name[64]; char env_password[64]; +#if !defined(__AROS__) SysBase = (struct Library *)AbsExecBase; #if defined(__amigaos4__) @@ -359,7 +367,7 @@ _start(VOID) IExec = (struct ExecIFace *)((struct ExecBase *)SysBase)->MainInterface; } #endif /* __amigaos4__ */ - +#endif /* Pick up the Workbench startup message, if * there is one. */ @@ -686,7 +694,7 @@ _start(VOID) GetProgramName(program_name,sizeof(program_name)); - Parameters = ReadArgs(cmd_template,(LONG *)&args,NULL); + Parameters = ReadArgs(cmd_template,(IPTR *)&args,NULL); if(Parameters == NULL) { PrintFault(IoErr(),FilePart(program_name)); @@ -1257,8 +1265,12 @@ struct FormatContext /****************************************************************************/ +#if !defined(__AROS__) STATIC VOID ASM CountChar(REG(a3,struct FormatContext * fc)) +#else +STATIC VOID CountChar(struct FormatContext * fc) +#endif { fc->fc_Size++; } @@ -1278,8 +1290,12 @@ CVSPrintf(STRPTR format_string,APTR args) /****************************************************************************/ +#if !defined(__AROS__) STATIC VOID ASM StuffChar(REG(d0,UBYTE c),REG(a3,struct FormatContext * fc)) +#else +STATIC VOID StuffChar(UBYTE c, struct FormatContext * fc) +#endif { (*fc->fc_Buffer++) = c; } @@ -1880,8 +1896,12 @@ TranslateBName(UBYTE * name,UBYTE * map) LONG len; UBYTE c; +#if !defined(__AROS__) len = (*name++); - +#else + len = AROS_BSTR_strlen(name); + name = AROS_BSTR_ADDR(name); +#endif while(len-- > 0) { c = (*name); @@ -2513,7 +2533,9 @@ Setup( /****************************************************************************/ + /* Convert a BCPL string into a standard NUL terminated 'C' string. */ +#if !defined(__AROS__) INLINE STATIC VOID ConvertBString(LONG max_len,STRPTR cstring,APTR bstring) { @@ -2528,10 +2550,27 @@ ConvertBString(LONG max_len,STRPTR cstring,APTR bstring) cstring[len] = '\0'; } +#else +INLINE STATIC VOID +ConvertBString(LONG max_len,STRPTR cstring,APTR bstring) +{ + UWORD _i = 0; + UWORD _len = AROS_BSTR_strlen(bstring); + + while((_i < _len) && (_i < max_len)) + { + cstring[_i] = AROS_BSTR_getchar(bstring, _i); + _i++; + } + + cstring[_i] = '\0'; +} +#endif /* Convert a NUL terminated 'C' string into a BCPL string. */ +#if !defined(__AROS__) INLINE STATIC VOID -ConvertCString(LONG max_len,APTR bstring,STRPTR cstring) +ConvertCString(LONG max_len, APTR bstring, STRPTR cstring) { LONG len = strlen(cstring); STRPTR to = bstring; @@ -2542,6 +2581,19 @@ ConvertCString(LONG max_len,APTR bstring,STRPTR cstring) (*to++) = len; memcpy(to,cstring,len); } +#else +INLINE STATIC VOID +ConvertCString(LONG max_len, APTR bstring, STRPTR cstring) +{ + UWORD _i = 0; + while((cstring[_i] != '\0') && (_i < max_len)) + { + AROS_BSTR_putchar(bstring, _i, cstring[_i]); + _i++; + } + AROS_BSTR_setstrlen(bstring, _i); +} +#endif /****************************************************************************/ @@ -3801,14 +3853,20 @@ Action_ExamineObject( if(lock == NULL) { +#if !defined(__AROS__) STRPTR volume_name = BADDR(VolumeNode->dol_Name); LONG len = volume_name[0]; + + memcpy(fib->fib_FileName+1, volume_name + 1, len); + fib->fib_FileName[0] = len; +#else + STRPTR volume_name = AROS_BSTR_ADDR(VolumeNode->dol_Name); + LONG len = AROS_BSTR_strlen(VolumeNode->dol_Name); + memcpy(fib->fib_FileName, volume_name, len); +#endif SHOWMSG("ZERO root lock"); - memcpy(fib->fib_FileName+1,volume_name+1,len); - fib->fib_FileName[0] = len; - fib->fib_DirEntryType = ST_ROOT; fib->fib_EntryType = ST_ROOT; fib->fib_NumBlocks = 1; @@ -3844,13 +3902,19 @@ Action_ExamineObject( if(strcmp(ln->ln_FullName,SMB_ROOT_DIR_NAME) == SAME) { +#if !defined(__AROS__) STRPTR volume_name = BADDR(VolumeNode->dol_Name); LONG len = volume_name[0]; - SHOWMSG("root lock"); - - memcpy(fib->fib_FileName+1,volume_name+1,len); + memcpy(fib->fib_FileName+1, volume_name + 1, len); fib->fib_FileName[0] = len; +#else + STRPTR volume_name = AROS_BSTR_ADDR(VolumeNode->dol_Name); + LONG len = AROS_BSTR_strlen(VolumeNode->dol_Name); + + memcpy(fib->fib_FileName, volume_name, len); +#endif + SHOWMSG("root lock"); fib->fib_DirEntryType = ST_ROOT; fib->fib_EntryType = ST_ROOT; diff --git a/workbench/network/smbfs/source_code/mmakefile.src b/workbench/network/smbfs/source_code/mmakefile.src new file mode 100644 index 0000000000..02ff0092d4 --- /dev/null +++ b/workbench/network/smbfs/source_code/mmakefile.src @@ -0,0 +1,21 @@ +# $Id$ +# +# Makefile for smbfs + +include $(TOP)/config/make.cfg + +SMBFSFILES = main \ + proc \ + smb_abstraction \ + sock \ + crypt + +USER_CFLAGS := -Wno-uninitialized -Wno-parentheses -I$(AROS_DEVELOPMENT)/netinclude -I$(SRCDIR)/$(CURDIR)/include + +#MM workbench-network-smbfs-client : aros-tcpip workbench-network-smbfs-setup includes linklibs + +%build_prog mmake=workbench-network-smbfs-client \ + progname=SMBFS targetdir=$(AROS_C) \ + files="$(SMBFSFILES)" uselibs="rom" + +%common diff --git a/workbench/network/smbfs/source_code/proc.c b/workbench/network/smbfs/source_code/proc.c index fca4bcfdb4..0b23c1588c 100755 --- a/workbench/network/smbfs/source_code/proc.c +++ b/workbench/network/smbfs/source_code/proc.c @@ -14,7 +14,9 @@ */ #include "smbfs.h" +#if !defined(__AROS__) #include "quad_math.h" +#endif /*****************************************************************************/ @@ -1276,6 +1278,7 @@ smb_proc_readdir_short (struct smb_server *server, char *path, int fpos, int cac /*****************************************************************************/ +#if !defined(__AROS__) /* Interpret an 8 byte "filetime" structure to a 'time_t'. * It's originally in "100ns units since jan 1st 1601". * @@ -1317,6 +1320,19 @@ interpret_long_date(char * p) return(result); } +#else +static time_t +interpret_long_date(char * p) +{ + QUAD long_date; + long_date = (DVAL(p,0) << 32) | DVAL(p,4); + + long_date -= 116444736000000000; + long_date /= 10000000; + + return((time_t)long_date & 0xFFFFFFFF); +} +#endif /*****************************************************************************/ @@ -2315,7 +2331,11 @@ smb_proc_reconnect (struct smb_server *server) LOG (("smb_proc_connect: workgroup = %s\n", server->mount_data.workgroup_name)); if (server->protocol >= PROTOCOL_NT1) { +#if !defined(__AROS__) char *OS_id = "AmigaOS"; +#else + char *OS_id = "AROS"; +#endif char *client_id = "smbfs"; SHOWMSG("server->protocol >= PROTOCOL_NT1"); diff --git a/workbench/network/smbfs/source_code/smb_abstraction.c b/workbench/network/smbfs/source_code/smb_abstraction.c index 7db2cccb48..32ca63ba78 100755 --- a/workbench/network/smbfs/source_code/smb_abstraction.c +++ b/workbench/network/smbfs/source_code/smb_abstraction.c @@ -20,6 +20,8 @@ #include #include +#define MAXHOSTNAMELEN 256 + /*****************************************************************************/ #define ATTR_CACHE_TIME 5 /* cache attributes for this time */ diff --git a/workbench/network/smbfs/source_code/system_headers.h b/workbench/network/smbfs/source_code/system_headers.h index 2d790fd3bd..c06d2decd0 100755 --- a/workbench/network/smbfs/source_code/system_headers.h +++ b/workbench/network/smbfs/source_code/system_headers.h @@ -66,7 +66,9 @@ #include -/*#include */ +#if defined(__AROS__) +#include +#endif #include #include @@ -101,6 +103,9 @@ #include #include +#if defined(__AROS__) +#define EPROCLIM 67 /* Too many processes */ +#endif /*#include */ /*#include */ #include -- 2.11.4.GIT