--- /dev/null
+#
+# Acess2 Externals - glib
+# - Patches and Makefile by John Hodge (thePowersGang)
+#
+
+DEPS := libffi
+_NAME := glib
+TARBALL_PATTERN := $(_NAME)-*.tar.xz
+TARBALL_TO_DIR_L := $(_NAME)-%.tar.xz
+TARBALL_TO_DIR_R := $(_NAME)-%
+PATCHES := config.sub
+CONFIGURE_ARGS := glib_cv_stack_grows=no ac_cv_func_posix_getpwuid_r=no ac_cv_func_posix_getgrgid_r=no
+CONFIGURE_ARGS += LDFLAGS=-lpsocket
+
+include ../common_automake.mk
+
+
--- /dev/null
+--- glib/config.sub
++++ glib/config.sub
+@@ -1335,2 +1335,5 @@
+ ;;
++ -acess2)
++ os=-acess2
++ ;;
+ -solaris)
--- /dev/null
+--- bochs-2.6.2_orig/config.sub 2013-06-17 11:39:39.670720710 +0800
++++ bochs-2.6.2/config.sub 2013-06-17 11:48:09.149384231 +0800
+@@ -1344,2 +1344,3 @@
+ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
++ | -acess2 \
+ | -aos* | -aros* \
+
--- /dev/null
+--- glib/config.sub
++++ glib/config.sub
+@@ -1335,2 +1335,5 @@
+ ;;
++ -acess2)
++ os=-acess2
++ ;;
+ -solaris)
V := @
endif
-.PHONY: all clean install postbuild
+.PHONY: all clean install postbuild utest-build utest-run generate_exp
all: _libs $(_BIN) $(_XBIN)
.PHONY: utest utest-build utest-run $(UTESTS:%=runtest-%)
-utest: utest-build utest-run
+utest: utest-build generate_exp utest-run
generate_exp: $(UTESTS:%=EXP_%.txt)
- @echo > /dev/null
utest-build: $(UTESTS:%=TEST_%)
- @echo > /dev/null
utest-run: $(UTESTS:%=runtest-%)
- @echo > /dev/null
$(UTESTS:%=runtest-%): runtest-%: TEST_% EXP_%.txt
@echo --- [TEST] $*
include ../Makefile.tpl\r
\r
EXP_%.txt: TEST_%.native\r
- ./$< > $@\r
- rm $<\r
+ @./$< > $@\r
+ @rm $<\r
EXP_strtoi.txt:\r
echo -n "" > $@\r
\r
--- /dev/null
+/*
+ */
+#include <stdio.h>
+#include <string.h>
+
+#define ASSERT(cnd) printf("ASSERT: "#cnd" == %s\n", ((cnd) ? "pass" : "FAIL"))
+
+int main()
+{
+ ASSERT(strcmp("hello", "world") < 0);
+ ASSERT(strcmp("hello", "hello") == 0);
+ ASSERT(strcmp("wello", "hello") > 0);
+ ASSERT(strcmp("\xff", "\1") > 0);
+ ASSERT(strcmp("\1", "\xff") < 0);
+ ASSERT(strcmp("Hello", "hello") < 0);
+
+ ASSERT(strncmp("hello world", "hello", 5) == 0);
+
+ ASSERT(strcasecmp("hello", "world") < 0);
+ ASSERT(strcasecmp("hello", "hello") == 0);
+ ASSERT(strcasecmp("wello", "hello") > 0);
+ ASSERT(strcasecmp("\xff", "\1") > 0);
+ ASSERT(strcasecmp("\1", "\xff") < 0);
+ ASSERT(strcasecmp("Hello", "hello") == 0);
+ ASSERT(strcasecmp("Hello", "Hello") == 0);
+ ASSERT(strcasecmp("hellO", "Hello") == 0);
+
+
+ char buf[13];
+ memset(buf, 0, 13);
+ ASSERT(buf[0] == 0); ASSERT(buf[12] == 0);
+
+ ASSERT(memchr("\xffhello", 'x', 6) == NULL);
+}
+
case EAFNOSUPPORT: return "Address family not supported";
case EADDRINUSE: return "Address already in use";
case ETIMEDOUT: return "Operation timed out";
+ case EOPNOTSUPP: return "Operation not supported on socket";
case EINTERNAL: return "Internal error";
}
// psockets
EAFNOSUPPORT,
- EADDRINUSE, // Specified addres is already in use
+ EADDRINUSE, // (POSIX.1) Specified addres is already in use
ETIMEDOUT,
+ EOPNOTSUPP, // (POSIX.1) Operation not supported on socket
EINTERNAL // Internal Error
};
# define SEEK_END (-1)\r
#endif\r
\r
+#define MB_CUR_MAX 5 // (C99) Max number of bytes in a single multibyte character (UTF8=5)\r
+\r
#ifdef __cplusplus\r
}\r
#endif\r
*/\r
EXPORT int fputc(int c, FILE *fp)\r
{\r
- char ch = c;\r
+ unsigned char ch = c;\r
return fwrite(&ch, 1, 1, fp);\r
}\r
\r
EXPORT int putchar(int c)\r
{\r
- c &= 0xFF;\r
return fputc(c, stdout);\r
}\r
\r
*/\r
EXPORT int fgetc(FILE *fp)\r
{\r
- char ret = 0;\r
+ unsigned char ret = 0;\r
if( fread(&ret, 1, 1, fp) != 1 )\r
return -1;\r
return ret;\r
\r
EXPORT int puts(const char *str)\r
{\r
- \r
if(!str) return 0;\r
int len = strlen(str);\r
\r
* AcessOS Basic C Library
* string.c
*/
-#include <acess/sys.h>
+//#include <acess/sys.h>
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
* \fn EXPORT int strcmp(const char *s1, const char *s2)
* \brief Compare two strings
*/
-EXPORT int strcmp(const char *s1, const char *s2)
+EXPORT int strcmp(const char *_s1, const char *_s2)
{
- while(*s1 && *s1 == *s2) {
- s1++; s2++;
- }
- return (int)*s1 - (int)*s2;
+ return strncmp(_s1, _s2, SIZE_MAX);
}
/**
- * \fn EXPORT int strncmp(const char *s1, const char *s2)
- * \brief Compare two strings
+ * \fn EXPORT int strncmp(const char *s1, const char *s2, size_t n)
+ * \brief Compare two strings, stopping after n characters
*/
-EXPORT int strncmp(const char *s1, const char *s2, size_t n)
+EXPORT int strncmp(const char *_s1, const char *_s2, size_t n)
{
+ const unsigned char* s1 = (const unsigned char*)_s1;
+ const unsigned char* s2 = (const unsigned char*)_s2;
while(n && *s1 && *s1 == *s2)
{
s1++; s2++;
return (int)*s1 - (int)*s2;
}
-EXPORT int strcasecmp(const char *s1, const char *s2)
+EXPORT int strcasecmp(const char *_s1, const char *_s2)
{
- int rv;
- while( (rv = toupper(*s1) - toupper(*s2)) == 0 && *s1 != '\0' && *s2 != '\0' ) {
- s1++; s2++;
- }
- return rv;
+ return strncasecmp(_s1, _s2, SIZE_MAX);
}
-EXPORT int strncasecmp(const char *s1, const char *s2, size_t n)
+EXPORT int strncasecmp(const char *_s1, const char *_s2, size_t n)
{
- int rv = 0;
- if( n == 0 ) return 0;
- while(n -- && (rv = toupper(*s1) - toupper(*s2)) == 0 && *s1 != '\0' && *s2 != '\0') {
- s1++; s2++;
+ const unsigned char* s1 = (const unsigned char*)_s1;
+ const unsigned char* s2 = (const unsigned char*)_s2;
+ while( n-- && *s1 && *s2 )
+ {
+ if( *s1 != *s2 )
+ {
+ int rv;
+ rv = toupper(*s1) - toupper(*s2);
+ if(rv != 0)
+ return rv;
+ rv = tolower(*s1) - tolower(*s2);
+ if(rv != 0)
+ return rv;
+ }
+ s1 ++;
+ s2 ++;
}
- return rv;
+ return 0;
}
/**
EXPORT size_t strnlen(const char *str, size_t maxlen)
{
size_t len;
- for( len = 0; maxlen -- && *str; str ++, len ++ );
+ for( len = 0; maxlen -- && *str; str ++, len ++ )
+ ;
return len;
}
* \fn EXPORT char *strchr(char *str, int character)
* \brief Locate a character in a string
*/
-EXPORT char *strchr(const char *str, int character)
+EXPORT char *strchr(const char *_str, int character)
{
+ const unsigned char* str = (const unsigned char*)_str;
for(;*str;str++)
{
- if(*str == character)
+ if( *str == character )
return (char*)str;
}
return NULL;
* \fn EXPORT char *strrchr(char *str, int character)
* \brief Locate the last occurance of a character in a string
*/
-EXPORT char *strrchr(const char *str, int character)
+EXPORT char *strrchr(const char *_str, int character)
{
- int i;
- i = strlen(str)-1;
- while(i--)
+ const unsigned char* str = (const unsigned char*)_str;
+ for( int i = strlen(_str); i--; )
{
if(str[i] == character)
return (void*)&str[i];
return __dest;
}
+// TODO: memccpy (POSIX defined)
+
/**
* \fn EXPORT void *memmove(void *dest, const void *src, size_t count)
* \brief Copy data in memory, avoiding overlap problems
while(count--)
{
if( *p1 != *p2 )
- return *p1 - *p2;
+ return (int)*p1 - (int)*p2;
p1 ++;
p2 ++;
}
*/
EXPORT void *memchr(const void *ptr, int value, size_t num)
{
+ const unsigned char* buf = ptr;
while(num--)
{
- if( *(const unsigned char*)ptr == (unsigned char)value )
- return (void*)ptr;
- ptr ++;
+ if( *buf == (unsigned char)value )
+ return (void*)buf;
+ buf ++;
}
return NULL;
}
EXPORT size_t strcspn(const char *haystack, const char *reject)
{
size_t ret = 0;
- int i;
while( *haystack )
{
- for( i = 0; reject[i] && reject[i] == *haystack; i ++ );
-
- if( reject[i] ) return ret;
+ for( int i = 0; reject[i]; i ++ )
+ {
+ if( reject[i] == *haystack )
+ return ret;
+ }
ret ++;
}
return ret;
EXPORT size_t strspn(const char *haystack, const char *accept)
{
size_t ret = 0;
- int i;
while( *haystack )
{
- for( i = 0; accept[i] && accept[i] == *haystack; i ++ );
-
- if( !accept[i] ) return ret;
+ for( int i = 0; accept[i]; i ++ )
+ {
+ if( accept[i] != *haystack )
+ return ret;
+ }
ret ++;
}
return ret;
if( accept[i] == *haystack )
return (char*)haystack;
}
+ haystack ++;
}
return NULL;
}
--- /dev/null
+/*
+ * Acess2 POSIX Emulation Library
+ * - By John Hodge (thePowersGang)
+ *
+ * glob.h
+ * - Globbing code
+ */
+#ifndef _LIBPOSIX__GLOB_H_
+#define _LIBPOSIX__GLOB_H_
+
+
+
+#endif
REG_BADRPT,
};
+#define REG_EXTENDED 0x1
+#define REG_ICASE 0x2
+#define REG_NOSUB 0x4
+#define REG_NEWLINE 0x8
+
#endif
CFLAGS += -Wall
LDFLAGS += -lc -soname libpthread.so
-OBJ = main.o
+OBJ = main.o thread.o
BIN = libpthread.so
include ../Makefile.tpl
{
void* futex;
};
-#define PTHREAD_MUTEX_INITIALIZER ((struct pthread_mutex_s){NULL})
+#define PTHREAD_MUTEX_INITIALIZER ((struct pthread_mutex_s){0})
typedef struct pthread_mutex_s pthread_mutex_t;
extern int pthread_mutex_init(pthread_mutex_t * mutex, const pthread_mutexattr_t *attrs);
extern int pthread_mutex_lock(pthread_mutex_t *lock);
--- /dev/null
+/*
+ * Acess2 libpthread
+ * - By John Hodge (thePowersGang)
+ *
+ * thread.c
+ * - Thread management for pthreads
+ */
+#include <pthread.h>
+#include <assert.h>
+
+int pthread_create(pthread_t *threadptr, const pthread_attr_t * attrs, void* (*fcn)(void*), void* arg)
+{
+ assert(!"TODO: pthread_create");
+ return 0;
+}
+int pthread_detach(pthread_t thread)
+{
+ assert(!"TODO: pthread_detach");
+ return 0;
+}
+int pthread_join(pthread_t thread, void **retvalptr)
+{
+ assert(!"TODO: pthread_join");
+ return 0;
+}
+int pthread_cancel(pthread_t thread)
+{
+ assert(!"TODO: pthread_cancel");
+ return 0;
+}
+int pthread_equal(pthread_t t1, pthread_t t2)
+{
+ assert(!"TODO: pthread_equal");
+ return 0;
+}
+pthread_t pthread_self(void)
+{
+ assert(!"TODO: pthread_self");
+ return (pthread_t){0};
+}
+void pthread_exit(void* retval)
+{
+ assert(!"TODO: pthread_create");
+}
--- /dev/null
+# Acess2 BSD "resolv" library
+# Makefile
+
+-include ../Makefile.cfg
+
+CPPFLAGS +=
+CFLAGS += -Wextra
+ASFLAGS +=
+LDFLAGS +=
+LIBS += -lnet -lpsocket
+
+OBJ = resolv.o
+BIN = libresolv.so
+
+include ../Makefile.tpl
+
--- /dev/null
+/*
+ * Acess2 POSIX Sockets Emulation
+ * - By John Hodge (thePowersGang)
+ *
+ * arpa/nameser.h
+ * - BSD name resolution (TODO: move to libresolv)
+ *
+ * NOTE: I have no fucking idea who/what defines this header, it's wanted by glib
+ */
+#ifndef _LIBPSOCKET__ARPA_NAMESER_H_
+#define _LIBPSOCKET__ARPA_NAMESER_H_
+
+#define C_IN 0x1
+
+#endif
+
--- /dev/null
+/*
+ */
+#ifndef _LIBRESOLV__RESOLV_H_
+#define _LIBRESOLV__RESOLV_H_
+
+extern int res_init(void);
+
+extern int res_query(const char *dname, int class, int type, unsigned char *answer, int anslen);
+
+extern int res_search(const char *dname, int class, int type, unsigned char *answer, int anslen);
+
+extern int res_querydomain(const char *name, const char *domain, int class, int type, unsigned char *answer, int anslen);
+
+extern int res_mkquery(int op, const char *dname, int class, int type, char *data, int datalen, struct rrec *newrr, char *buf, int buflen);
+
+extern int res_send(const char *msg, int msglen, char *answer, int anslen);
+
+
+#endif
+
--- /dev/null
+/*
+ */
+
+int res_init(void)
+{
+ return 1;
+}
+
+int res_query(const char *dname, int class, int type, unsigned char *answer, int anslen)
+{
+ return 1;
+}
+
+int res_search(const char *dname, int class, int type, unsigned char *answer, int anslen)
+{
+ return 1;
+}
+
+int res_querydomain(const char *name, const char *domain, int class, int type, unsigned char *answer, int anslen)
+{
+ return 1;
+}
+
+int res_mkquery(int op, const char *dname, int class, int type, char *data, int datalen, struct rrec *newrr, char *buf, int buflen)
+{
+ return 1;
+}
+
+int res_send(const char *msg, int msglen, char *answer, int anslen)
+{
+ return 1;
+}
+