minios: POSIX fixes
PATCH 1/1 minios: POSIX fixes
minios: POSIX fixes
Fixes some functions which are POSIX. Also make them ifndef HAVE_LIBC.
Signed-off-by Samuel Thibault <[email protected]>
extras/mini-os/arch/ia64/time.c +2 -2
@@ -76,7 +76,7 @@ static uint64_t itm_val;* will already get problems at other places on 2038-01-19 03:14:08) */ static unsigned long -mktime (const unsigned int year0,const unsigned int mon0, +_mktime (const unsigned int year0,const unsigned int mon0,const unsigned int day,const unsigned int hour,const unsigned int min,const unsigned int sec) {
@@ -260,7 +260,7 @@ init_time(void)if (efi_get_time (&tm)) {printk (" EFI-Time: %d.%d.%d %d:%d:%d\n" , tm.Day, tm.Month, tm.Year, tm.Hour, tm.Minute, tm.Second); - os_time.tv_sec =mktime (SWAP (tm.Year),SWAP (tm.Month), + os_time.tv_sec =_mktime (SWAP (tm.Year),SWAP (tm.Month),SWAP (tm.Day),SWAP (tm.Hour),SWAP (tm.Minute),SWAP (tm.Second)); os_time.tv_nsec = tm.Nanosecond;
extras/mini-os/fs-front.c +2 -2
@@ -817,7 +817,7 @@ void test_fs_import(void *data)long ret64;/* Sleep for 1s and then try to open a file */ -sleep (1000 ); +msleep (1000 ); ret =fs_create (import,"mini-os-created-directory" ,1 ,0777 );printk ("Directory create: %d\n" , ret);
@@ -1013,7 +1013,7 @@ done:printk ("Backend found at %s\n" , import->backend);break ; } -sleep (WAIT_PERIOD ); +msleep (WAIT_PERIOD ); }if (!import->backend)
extras/mini-os/include/blkfront.h +1 -1
@@ -7,7 +7,7 @@ struct blkfront_aiocbstruct blkfront_dev *aio_dev;uint8_t *aio_buf;size_t aio_nbytes; -uint64_t aio_offset; +off_t aio_offset;void *data;grant_ref_t gref[BLKIF_MAX_SEGMENTS_PER_REQUEST ];
extras/mini-os/include/ia64/os.h +2 -0
@@ -38,7 +38,9 @@typedef uint64_t paddr_t ;/* Physical address. */ +#ifndef HAVE_LIBC typedef uint64_t caddr_t ;/* rr7/kernel memory address. */ +#endif #include "page.h" #include "mm.h"
extras/mini-os/include/lib.h +11 -1
@@ -59,6 +59,9 @@#include <stddef.h> #include <console.h> +#ifdef HAVE_LIBC +#include <stdio.h> +#else /* printing */ #define _p (_x) ((void *)(unsigned long)(_x))int vsnprintf (char *buf,size_t size,const char *fmt,va_list args);
@@ -69,13 +72,16 @@ int sprintf(char * buf, const char *fmt,int sprintf (char * buf,const char *fmt, ...);int vsscanf (const char * buf,const char * fmt,va_list args);int sscanf (const char * buf,const char * fmt, ...); +#endif long simple_strtol (const char *cp,char **endp,unsigned int base);unsigned long simple_strtoul (const char *cp,char **endp,unsigned int base);long long simple_strtoll (const char *cp,char **endp,unsigned int base);unsigned long long simple_strtoull (const char *cp,char **endp,unsigned int base); - +#ifdef HAVE_LIBC +#include <string.h> +#else /* string and memory manipulation */ int memcmp (const void *cs,const void *ct,size_t count);void *memcpy (void *dest,const void *src,size_t count);
@@ -91,7 +97,11 @@ char *strstr(const char *s1, const charchar *strstr (const char *s1,const char *s2);char *strcat (char * dest,const char * src);char *strdup (const char *s); +#endif +#define RAND_MIX 2654435769U + +int rand (void );#define ARRAY_SIZE (x) (sizeof(x) / sizeof((x)[0]))
extras/mini-os/include/sched.h +1 -1
@@ -47,6 +47,6 @@ void schedule(void);void wake (struct thread *thread);void block (struct thread *thread); -void sleep (u32 millisecs); +void msleep (u32 millisecs);#endif /* __SCHED_H__ */
extras/mini-os/include/types.h +15 -4
@@ -42,7 +42,6 @@ typedef unsigned long u_long;#ifdef __i386__typedef long long quad_t ;typedef unsigned long long u_quad_t ; -typedef unsigned int uintptr_t ;#if !defined(CONFIG_X86_PAE )typedef struct {unsigned long pte_low; }pte_t ;
@@ -53,7 +52,6 @@ typedef struct { unsigned long pte_low,#elif defined(__x86_64__) || defined(__ia64__)typedef long quad_t ;typedef unsigned long u_quad_t ; -typedef unsigned long uintptr_t ;typedef struct {unsigned long pte; }pte_t ;#endif /* __i386__ || __x86_64__ */
@@ -65,18 +63,31 @@ typedef struct { unsigned long pte; } pt ((pte_t) {(unsigned long)(_x), (unsigned long)(_x>>32)}); })#endif +#ifdef HAVE_LIBC +#include <limits.h> +#include <stdint.h> +#else +#ifdef __i386__ +typedef unsigned int uintptr_t ; +typedef int intptr_t ; +#elif defined(__x86_64__) || defined(__ia64__) +typedef unsigned long uintptr_t ; +typedef long intptr_t ; +#endif /* __i386__ || __x86_64__ */ typedef u8 uint8_t ;typedef s8 int8_t ;typedef u16 uint16_t ;typedef s16 int16_t ;typedef u32 uint32_t ;typedef s32 int32_t ; -typedef u64 uint64_t ; -typedef s64 int64_t ; +typedef u64 uint64_t ,uintmax_t ; +typedef s64 int64_t ,intmax_t ; +typedef u64 off_t ;#define INT_MAX ((int)(~0U>>1))#define UINT_MAX (~0U)typedef long ssize_t ; +#endif #endif /* _TYPES_H_ */
extras/mini-os/include/xmalloc.h +15 -3
@@ -1,11 +1,15 @@#ifndef __XMALLOC_H__#define __XMALLOC_H__ +#ifdef HAVE_LIBC + +#include <stdlib.h> +#include <malloc.h> /* Allocate space for typed object. */ -#define xmalloc (_type) ((_type *)_xmalloc(sizeof(_type), __alignof__(_type))) +#define _xmalloc (size, align) memalign(align, size) +#define xfree (ptr) free(ptr) -/* Allocate space for array of typed objects. */ -#define xmalloc_array (_type, _num) ((_type *)_xmalloc_array(sizeof(_type), __alignof__(_type), _num)) +#else #define DEFAULT_ALIGN (sizeof(unsigned long))#define malloc (size) _xmalloc(size, DEFAULT_ALIGN)
@@ -19,6 +23,8 @@ extern void *_xmalloc(size_t size, size_extern void *_xmalloc (size_t size,size_t align);extern void *_realloc (void *ptr,size_t size); +#endif +static inline void *_xmalloc_array (size_t size,size_t align,size_t num) {/* Check for overflow. */
@@ -27,4 +33,10 @@ static inline void *_xmalloc_array(size_ return _xmalloc(size * num, align); } +/* Allocate space for typed object. */ +#define xmalloc (_type) ((_type *)_xmalloc(sizeof(_type), __alignof__(_type))) + +/* Allocate space for array of typed objects. */ +#define xmalloc_array (_type, _num) ((_type *)_xmalloc_array(sizeof(_type), __alignof__(_type), _num)) +#endif /* __XMALLOC_H__ */
extras/mini-os/kernel.c +1 -14
@@ -80,26 +80,13 @@ static void periodic_thread(void *p) {gettimeofday (&tv,NULL );printk ("T(s=%ld us=%ld)\n" , tv.tv_sec, tv.tv_usec); -sleep (1000 ); +msleep (1000 ); } }static void netfront_thread (void *p) {init_netfront (NULL ,NULL ,NULL ); -} - -#define RAND_MIX 2654435769U - -/* Should be random enough for this use */ -static int rand (void ) -{ -static unsigned int previous; -struct timeval tv; -gettimeofday (&tv,NULL ); - previous += tv.tv_sec + tv.tv_usec; - previous *=RAND_MIX ; -return previous; }static struct blkfront_dev *blk_dev;
extras/mini-os/lib/math.c +17 -0
@@ -56,6 +56,8 @@*/ #include <types.h> +#include <lib.h> +#include <time.h> /* On ia64 these functions lead to crashes. These are replaced by * assembler functions. */
@@ -85,7 +87,9 @@ union uu {* These are used for shifting, and also below for halfword extraction * and assembly. */ +#ifndef HAVE_LIBC #define CHAR_BIT 8/* number of bits in a char */ +#endif #define QUAD_BITS (sizeof(s64) * CHAR_BIT)#define LONG_BITS (sizeof(long) * CHAR_BIT)#define HALF_BITS (sizeof(long) * CHAR_BIT / 2)
@@ -385,3 +389,16 @@ __umoddi3(u_quad_t a, u_quad_t b) }#endif /* !defined(__ia64__) */ + +#ifndef HAVE_LIBC +/* Should be random enough for our uses */ +int rand (void ) +{ +static unsigned int previous; +struct timeval tv; +gettimeofday (&tv,NULL ); + previous += tv.tv_sec + tv.tv_usec; + previous *=RAND_MIX ; +return previous; +} +#endif
extras/mini-os/lib/xmalloc.c +2 -0
@@ -43,6 +43,7 @@#include <list.h> #include <xmalloc.h> +#ifndef HAVE_LIBC static LIST_HEAD (freelist);/* static spinlock_t freelist_lock = SPIN_LOCK_UNLOCKED; */
@@ -295,3 +296,4 @@ void *_realloc(void *ptr, size_t size) return new; } +#endif
extras/mini-os/sched.c +1 -1
@@ -211,7 +211,7 @@ void block(struct thread *thread)clear_runnable (thread); } -void sleep (u32 millisecs) +void msleep (u32 millisecs) {struct thread *thread =get_current (); thread->wakeup_time =NOW () +MILLISECS (millisecs);