mirror of https://github.com/postgres/postgres
backend/Makefiles to be patched could significantly be reduced since they have been adopted to the QNX4 needs. Andreas KardosREL7_0_PATCHES
parent
9805abb0fb
commit
7585deb087
Binary file not shown.
@ -0,0 +1,50 @@ |
||||
/*-------------------------------------------------------------------------
|
||||
* |
||||
* dynloader.c |
||||
* dynamic loader for QNX4 using the shared library mechanism |
||||
* |
||||
* Copyright (c) 1999, repas AEG Automation GmbH |
||||
* |
||||
* |
||||
* IDENTIFICATION |
||||
* $Header: /cvsroot/pgsql/src/backend/port/dynloader/Attic/qnx4.c,v 1.1 1999/12/16 01:25:04 momjian Exp $ |
||||
* |
||||
* NOTES |
||||
* |
||||
*------------------------------------------------------------------------- |
||||
*/ |
||||
/* System includes */ |
||||
/*
|
||||
#include <stdio.h> |
||||
#include <a.out.h> |
||||
#include <dl.h> |
||||
*/ |
||||
#include "postgres.h" |
||||
#include "fmgr.h" |
||||
#include "utils/dynamic_loader.h" |
||||
#include "dynloader.h" |
||||
|
||||
void * |
||||
pg_dlopen(char *filename) |
||||
{ |
||||
return (void *) NULL; |
||||
} |
||||
|
||||
func_ptr |
||||
pg_dlsym(void *handle, char *funcname) |
||||
{ |
||||
return NULL; |
||||
} |
||||
|
||||
void |
||||
pg_dlclose(void *handle) |
||||
{ |
||||
} |
||||
|
||||
char * |
||||
pg_dlerror() |
||||
{ |
||||
static char errmsg[] = "Failed to load shared library due to lack of shared library support."; |
||||
|
||||
return errmsg; |
||||
} |
@ -0,0 +1,20 @@ |
||||
/*-------------------------------------------------------------------------
|
||||
* |
||||
* dynloader.h |
||||
* dynamic loader for QNX4 using the shared library mechanism |
||||
* |
||||
* Copyright (c) 1999, repas AEG Automation GmbH |
||||
* |
||||
* |
||||
* IDENTIFICATION |
||||
* $Header: /cvsroot/pgsql/src/backend/port/dynloader/Attic/qnx4.h,v 1.1 1999/12/16 01:25:04 momjian Exp $ |
||||
* |
||||
* NOTES |
||||
* |
||||
*------------------------------------------------------------------------- |
||||
*/ |
||||
/* System includes */ |
||||
void *pg_dlopen(char *filename); |
||||
func_ptr pg_dlsym(void *handle, char *funcname); |
||||
void pg_dlclose(void *handle); |
||||
char *pg_dlerror(); |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,43 @@ |
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Makefile--
|
||||
# Makefile for port/sparc
|
||||
#
|
||||
# IDENTIFICATION
|
||||
# $Header: /cvsroot/pgsql/src/backend/port/qnx/Attic/Makefile,v 1.1 1999/12/16 01:25:06 momjian Exp $
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
SRCDIR = ../../..
|
||||
include ../../../Makefile.global |
||||
|
||||
INCLUDE_OPT = -I../..
|
||||
|
||||
CFLAGS+=$(INCLUDE_OPT)
|
||||
|
||||
OBJS = isnan.o rint.o sem.o shm.o
|
||||
|
||||
all: SUBSYS.o tstrint tstsem tstshm |
||||
|
||||
SUBSYS.o: $(OBJS) |
||||
$(LD) $(LDREL) $(LDOUT) SUBSYS.o $(OBJS)
|
||||
|
||||
tstrint: tstrint.o rint.o |
||||
$(CC) -o tstrint rint.o tstrint.o
|
||||
|
||||
tstsem: tstsem.o sem.o |
||||
$(CC) -o tstsem sem.o tstsem.o
|
||||
|
||||
tstshm: tstshm.o shm.o |
||||
$(CC) -o tstshm shm.o tstshm.o
|
||||
|
||||
depend dep: |
||||
$(CC) -MM $(INCLUDE_OPT) *.c >depend
|
||||
|
||||
clean: |
||||
rm -f SUBSYS.o $(OBJS) tstrint tstrint.o tstsem tstsem.o tstshm tstshm.o
|
||||
|
||||
ifeq (depend,$(wildcard depend)) |
||||
include depend |
||||
endif |
||||
|
@ -0,0 +1,30 @@ |
||||
/*-------------------------------------------------------------------------
|
||||
* |
||||
* ipc.h |
||||
* System V IPC Emulation |
||||
* |
||||
* Copyright (c) 1999, repas AEG Automation GmbH |
||||
* |
||||
* |
||||
* IDENTIFICATION |
||||
* $Header: /cvsroot/pgsql/src/backend/port/qnx/Attic/ipc.h,v 1.1 1999/12/16 01:25:06 momjian Exp $ |
||||
* |
||||
*------------------------------------------------------------------------- |
||||
*/ |
||||
|
||||
#ifndef _SYS_IPC_H |
||||
#define _SYS_IPC_H |
||||
|
||||
/* Common IPC definitions. */ |
||||
/* Mode bits. */ |
||||
#define IPC_CREAT 0001000 /* create entry if key doesn't exist */ |
||||
#define IPC_EXCL 0002000 /* fail if key exists */ |
||||
#define IPC_NOWAIT 0004000 /* error if request must wait */ |
||||
|
||||
/* Keys. */ |
||||
#define IPC_PRIVATE (key_t)0 /* private key */ |
||||
|
||||
/* Control Commands. */ |
||||
#define IPC_RMID 0 /* remove identifier */ |
||||
|
||||
#endif /* _SYS_IPC_H */ |
@ -0,0 +1,22 @@ |
||||
/*-------------------------------------------------------------------------
|
||||
* |
||||
* isnan.c |
||||
* isnan() implementation |
||||
* |
||||
* Copyright (c) 1999, repas AEG Automation GmbH |
||||
* |
||||
* |
||||
* IDENTIFICATION |
||||
* $Header: /cvsroot/pgsql/src/backend/port/qnx/Attic/isnan.c,v 1.1 1999/12/16 01:25:06 momjian Exp $ |
||||
* |
||||
*------------------------------------------------------------------------- |
||||
*/ |
||||
|
||||
#include "os.h" |
||||
|
||||
unsigned char __nan[8] = __nan_bytes; |
||||
|
||||
int isnan(double dsrc) |
||||
{ |
||||
return !memcmp( &dsrc, &NAN, sizeof( double ) ); |
||||
} |
@ -0,0 +1,31 @@ |
||||
/*-------------------------------------------------------------------------
|
||||
* |
||||
* rint.c |
||||
* rint() implementation |
||||
* |
||||
* Copyright (c) 1999, repas AEG Automation GmbH |
||||
* |
||||
* |
||||
* IDENTIFICATION |
||||
* $Header: /cvsroot/pgsql/src/backend/port/qnx/Attic/rint.c,v 1.1 1999/12/16 01:25:06 momjian Exp $ |
||||
* |
||||
*------------------------------------------------------------------------- |
||||
*/ |
||||
|
||||
#include <math.h> |
||||
#include "os.h" |
||||
|
||||
double rint(double x) |
||||
{ |
||||
double f, n = 0.; |
||||
|
||||
f = modf( x, &n ); |
||||
|
||||
if( x > 0. ) { |
||||
if( f > .5 ) n += 1.; |
||||
} |
||||
else if( x < 0. ) { |
||||
if( f < -.5 ) n -= 1.; |
||||
} |
||||
return n; |
||||
} |
@ -0,0 +1,261 @@ |
||||
/*-------------------------------------------------------------------------
|
||||
* |
||||
* sem.c |
||||
* System V Semaphore Emulation |
||||
* |
||||
* Copyright (c) 1999, repas AEG Automation GmbH |
||||
* |
||||
* |
||||
* IDENTIFICATION |
||||
* $Header: /cvsroot/pgsql/src/backend/port/qnx/Attic/sem.c,v 1.1 1999/12/16 01:25:06 momjian Exp $ |
||||
* |
||||
*------------------------------------------------------------------------- |
||||
*/ |
||||
|
||||
#include <errno.h> |
||||
#include <semaphore.h> |
||||
#include <string.h> |
||||
#include <sys/types.h> |
||||
#include <unistd.h> |
||||
#include <fcntl.h> |
||||
#include <sys/mman.h> |
||||
#include "postgres.h" |
||||
#include "storage/ipc.h" |
||||
#include <sys/sem.h> |
||||
|
||||
|
||||
#define SETMAX 32 |
||||
#define SEMMAX 16 |
||||
|
||||
#define MODE 0777 |
||||
#define SHM_INFO_NAME "SysV_Sem_Info" |
||||
|
||||
|
||||
struct sem_info { |
||||
sem_t sem; |
||||
struct { |
||||
key_t key; |
||||
int nsems; |
||||
sem_t sem[SEMMAX]; /* array of semaphores */ |
||||
pid_t pid[SEMMAX]; /* array of PIDs */ |
||||
} set[SETMAX]; |
||||
}; |
||||
|
||||
static struct sem_info *SemInfo = ( struct sem_info * )-1; |
||||
|
||||
|
||||
int semctl( int semid, int semnum, int cmd, /*...*/union semun arg ) |
||||
{ |
||||
int r; |
||||
|
||||
sem_wait( &SemInfo->sem ); |
||||
|
||||
if( semid < 0 || semid >= SETMAX || |
||||
semnum < 0 || semnum >= SemInfo->set[semid].nsems ) { |
||||
sem_post( &SemInfo->sem ); |
||||
errno = EINVAL; |
||||
return -1; |
||||
} |
||||
|
||||
switch( cmd ) { |
||||
case GETPID: |
||||
r = SemInfo->set[semid].pid[semnum]; |
||||
break; |
||||
|
||||
case GETVAL: |
||||
r = SemInfo->set[semid].sem[semnum].value; |
||||
break; |
||||
|
||||
case GETALL: |
||||
for( semnum = 0; semnum < SemInfo->set[semid].nsems; semnum++ ) { |
||||
arg.array[semnum] = SemInfo->set[semid].sem[semnum].value; |
||||
} |
||||
break; |
||||
|
||||
case SETVAL: |
||||
SemInfo->set[semid].sem[semnum].value = arg.val; |
||||
break; |
||||
|
||||
case SETALL: |
||||
for( semnum = 0; semnum < SemInfo->set[semid].nsems; semnum++ ) { |
||||
SemInfo->set[semid].sem[semnum].value = arg.array[semnum]; |
||||
} |
||||
break; |
||||
|
||||
case IPC_RMID: |
||||
for( semnum = 0; semnum < SemInfo->set[semid].nsems; semnum++ ) { |
||||
if( sem_destroy( &SemInfo->set[semid].sem[semnum] ) == -1 ) { |
||||
r = -1; |
||||
} |
||||
} |
||||
SemInfo->set[semid].key = -1; |
||||
SemInfo->set[semid].nsems = 0; |
||||
break; |
||||
|
||||
default: |
||||
sem_post( &SemInfo->sem ); |
||||
errno = EINVAL; |
||||
return -1; |
||||
} |
||||
|
||||
sem_post( &SemInfo->sem ); |
||||
|
||||
return r; |
||||
} |
||||
|
||||
int semget( key_t key, int nsems, int semflg ) |
||||
{ |
||||
int fd, semid, semnum/*, semnum1*/; |
||||
int exist = 0; |
||||
|
||||
if( nsems < 0 || nsems > SEMMAX ) { |
||||
errno = EINVAL; |
||||
return -1; |
||||
} |
||||
|
||||
/* open and map shared memory */ |
||||
if( SemInfo == ( struct sem_info * )-1 ) { |
||||
/* test if the shared memory already exists */ |
||||
fd = shm_open( SHM_INFO_NAME, O_RDWR | O_CREAT | O_EXCL, MODE ); |
||||
if( fd == -1 && errno == EEXIST ) { |
||||
exist = 1; |
||||
fd = shm_open( SHM_INFO_NAME, O_RDWR | O_CREAT, MODE ); |
||||
} |
||||
if( fd == -1 ) return fd; |
||||
/* The size may only be set once. Ignore errors. */ |
||||
ltrunc( fd, sizeof( struct sem_info ), SEEK_SET ); |
||||
SemInfo = mmap( NULL, sizeof( struct sem_info ), |
||||
PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0 ); |
||||
if( SemInfo == MAP_FAILED ) return -1; |
||||
if( !exist ) { |
||||
/* create semaphore for locking */ |
||||
sem_init( &SemInfo->sem, 1, 1 ); |
||||
sem_wait( &SemInfo->sem ); |
||||
/* initilize shared memory */ |
||||
memset( SemInfo->set, 0, sizeof( SemInfo->set ) ); |
||||
for( semid = 0; semid < SETMAX; semid++ ) { |
||||
SemInfo->set[semid].key = -1; |
||||
} |
||||
sem_post( &SemInfo->sem ); |
||||
} |
||||
} |
||||
|
||||
sem_wait( &SemInfo->sem ); |
||||
|
||||
if( key != IPC_PRIVATE ) { |
||||
/* search existing element */ |
||||
semid = 0; |
||||
while( semid < SETMAX && SemInfo->set[semid].key != key ) semid++; |
||||
if( !( semflg & IPC_CREAT ) && semid >= SETMAX ) { |
||||
sem_post( &SemInfo->sem ); |
||||
errno = ENOENT; |
||||
return -1; |
||||
} |
||||
else if( semid < SETMAX ) { |
||||
if( semflg & IPC_CREAT && semflg & IPC_EXCL ) { |
||||
sem_post( &SemInfo->sem ); |
||||
errno = EEXIST; |
||||
return -1; |
||||
} |
||||
else { |
||||
if( nsems != 0 && SemInfo->set[semid].nsems < nsems ) { |
||||
sem_post( &SemInfo->sem ); |
||||
errno = EINVAL; |
||||
return -1; |
||||
} |
||||
sem_post( &SemInfo->sem ); |
||||
return semid; |
||||
} |
||||
} |
||||
} |
||||
|
||||
/* search first free element */ |
||||
semid = 0; |
||||
while( semid < SETMAX && SemInfo->set[semid].key != -1 ) semid++; |
||||
if( semid >= SETMAX ) { |
||||
sem_post( &SemInfo->sem ); |
||||
errno = ENOSPC; |
||||
return -1; |
||||
} |
||||
|
||||
for( semnum = 0; semnum < nsems; semnum++ ) { |
||||
sem_init( &SemInfo->set[semid].sem[semnum], 1, 0 ); |
||||
/* Currently sem_init always returns -1.
|
||||
if( sem_init( &SemInfo->set[semid].sem[semnum], 1, 0 ) == -1 ) { |
||||
for( semnum1 = 0; semnum1 < semnum; semnum1++ ) { |
||||
sem_destroy( &SemInfo->set[semid].sem[semnum1] ); |
||||
} |
||||
sem_post( &SemInfo->sem ); |
||||
return -1; |
||||
} |
||||
*/ |
||||
} |
||||
|
||||
SemInfo->set[semid].key = key; |
||||
SemInfo->set[semid].nsems = nsems; |
||||
|
||||
sem_post( &SemInfo->sem ); |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
int semop( int semid, struct sembuf *sops, size_t nsops ) |
||||
{ |
||||
int i, j, r = 0, r1, errno1 = 0; |
||||
|
||||
sem_wait( &SemInfo->sem ); |
||||
|
||||
if( semid < 0 || semid >= SETMAX ) { |
||||
sem_post( &SemInfo->sem ); |
||||
errno = EINVAL; |
||||
return -1; |
||||
} |
||||
for( i = 0; i < nsops; i++ ) { |
||||
if( /*sops[i].sem_num < 0 ||*/ sops[i].sem_num >= SemInfo->set[semid].nsems ) { |
||||
sem_post( &SemInfo->sem ); |
||||
errno = EFBIG; |
||||
return -1; |
||||
} |
||||
} |
||||
|
||||
for( i = 0; i < nsops; i++ ) { |
||||
if( sops[i].sem_op < 0 ) { |
||||
if( sops[i].sem_flg & IPC_NOWAIT ) { |
||||
for( j = 0; j < -sops[i].sem_op; j++ ) { |
||||
if( sem_trywait( &SemInfo->set[semid].sem[sops[i].sem_num] ) ) { |
||||
errno1 = errno; |
||||
r = -1; |
||||
} |
||||
} |
||||
} |
||||
else { |
||||
for( j = 0; j < -sops[i].sem_op; j++ ) { |
||||
sem_post( &SemInfo->sem ); /* avoid deadlock */ |
||||
r1 = sem_wait( &SemInfo->set[semid].sem[sops[i].sem_num] ); |
||||
sem_wait( &SemInfo->sem ); |
||||
if( r1 ) { |
||||
errno1 = errno; |
||||
r = r1; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
else if( sops[i].sem_op > 0 ) { |
||||
for( j = 0; j < sops[i].sem_op; j++ ) { |
||||
if( sem_post( &SemInfo->set[semid].sem[sops[i].sem_num] ) ) { |
||||
errno1 = errno; |
||||
r = -1; |
||||
} |
||||
} |
||||
} |
||||
else /* sops[i].sem_op == 0 */ { |
||||
/* not supported */ |
||||
} |
||||
SemInfo->set[semid].pid[sops[i].sem_num] = getpid( ); |
||||
} |
||||
|
||||
sem_post( &SemInfo->sem ); |
||||
|
||||
errno = errno1; |
||||
return r; |
||||
} |
@ -0,0 +1,54 @@ |
||||
/*-------------------------------------------------------------------------
|
||||
* |
||||
* sem.h |
||||
* System V Semaphore Emulation |
||||
* |
||||
* Copyright (c) 1999, repas AEG Automation GmbH |
||||
* |
||||
* |
||||
* IDENTIFICATION |
||||
* $Header: /cvsroot/pgsql/src/backend/port/qnx/Attic/sem.h,v 1.1 1999/12/16 01:25:06 momjian Exp $ |
||||
* |
||||
*------------------------------------------------------------------------- |
||||
*/ |
||||
|
||||
#ifndef _SYS_SEM_H |
||||
#define _SYS_SEM_H |
||||
|
||||
#include <sys/ipc.h> |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/*
|
||||
* Semctl Command Definitions. |
||||
*/ |
||||
|
||||
#define GETNCNT 3 /* get semncnt */ |
||||
#define GETPID 4 /* get sempid */ |
||||
#define GETVAL 5 /* get semval */ |
||||
#define GETALL 6 /* get all semval's */ |
||||
#define GETZCNT 7 /* get semzcnt */ |
||||
#define SETVAL 8 /* set semval */ |
||||
#define SETALL 9 /* set all semval's */ |
||||
|
||||
/*
|
||||
* User semaphore template for semop system calls. |
||||
*/ |
||||
|
||||
struct sembuf { |
||||
ushort_t sem_num; /* semaphore # */ |
||||
short sem_op; /* semaphore operation */ |
||||
short sem_flg; /* operation flags */ |
||||
}; |
||||
|
||||
extern int semctl( int semid, int semnum, int cmd, /*...*/union semun arg ); |
||||
extern int semget( key_t key, int nsems, int semflg ); |
||||
extern int semop( int semid, struct sembuf *sops, size_t nsops ); |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* _SYS_SEM_H */ |
@ -0,0 +1,193 @@ |
||||
/*-------------------------------------------------------------------------
|
||||
* |
||||
* shm.c |
||||
* System V Shared Memory Emulation |
||||
* |
||||
* Copyright (c) 1999, repas AEG Automation GmbH |
||||
* |
||||
* |
||||
* IDENTIFICATION |
||||
* $Header: /cvsroot/pgsql/src/backend/port/qnx/Attic/shm.c,v 1.1 1999/12/16 01:25:06 momjian Exp $ |
||||
* |
||||
*------------------------------------------------------------------------- |
||||
*/ |
||||
|
||||
#include <errno.h> |
||||
#include <fcntl.h> |
||||
#include <stdlib.h> |
||||
#include <unistd.h> |
||||
#include <sys/mman.h> |
||||
#include <sys/shm.h> |
||||
|
||||
|
||||
#define MODE 0777 |
||||
|
||||
#define SHMMAX 1024 |
||||
|
||||
|
||||
struct shm_info { |
||||
int shmid; |
||||
key_t key; |
||||
size_t size; |
||||
void *addr; |
||||
}; |
||||
|
||||
static struct shm_info *ShmInfo; |
||||
|
||||
|
||||
static int shm_putinfo( struct shm_info *info ); |
||||
static int shm_updinfo( int i, struct shm_info *info ); |
||||
static int shm_getinfo( int shmid, struct shm_info *info ); |
||||
static int shm_getinfobyaddr( const void *addr, struct shm_info *info ); |
||||
|
||||
|
||||
static int shm_putinfo( struct shm_info *info ) |
||||
{ |
||||
int i; |
||||
|
||||
if( ShmInfo == NULL ) { |
||||
ShmInfo = calloc( SHMMAX, sizeof( struct shm_info ) ); |
||||
if( ShmInfo == NULL ) return -1; |
||||
/* initialize ShmInfo */ |
||||
for( i = 0; i < SHMMAX; i++ ) { |
||||
ShmInfo[i].shmid = -1; |
||||
} |
||||
} |
||||
|
||||
/* search first free element */ |
||||
i = 0; |
||||
while( i < SHMMAX && ShmInfo[i].shmid != -1 ) i++; |
||||
if( i >= SHMMAX ) { |
||||
errno = ENOSPC; |
||||
return -1; |
||||
} |
||||
|
||||
memcpy( &ShmInfo[i], info, sizeof( struct shm_info ) ); |
||||
|
||||
return i; |
||||
} |
||||
|
||||
static int shm_updinfo( int i, struct shm_info *info ) |
||||
{ |
||||
if( i >= SHMMAX ) return -1; |
||||
if( ShmInfo == NULL ) return -1; |
||||
|
||||
memcpy( &ShmInfo[i], info, sizeof( struct shm_info ) ); |
||||
|
||||
return i; |
||||
} |
||||
|
||||
static int shm_getinfo( int shmid, struct shm_info *info ) |
||||
{ |
||||
int i; |
||||
|
||||
if( ShmInfo == NULL ) return -1; |
||||
|
||||
/* search element */ |
||||
i = 0; |
||||
while( i < SHMMAX && ShmInfo[i].shmid != shmid ) i++; |
||||
if( i >= SHMMAX ) return -1; |
||||
|
||||
memcpy( info, &ShmInfo[i], sizeof( struct shm_info ) ); |
||||
|
||||
return i; |
||||
} |
||||
|
||||
static int shm_getinfobyaddr( const void *addr, struct shm_info *info ) |
||||
{ |
||||
int i; |
||||
|
||||
if( ShmInfo == ( struct shm_info * )-1 ) return -1; |
||||
|
||||
/* search element */ |
||||
i = 0; |
||||
while( i < SHMMAX && ShmInfo[i].addr != addr ) i++; |
||||
if( i >= SHMMAX ) return -1; |
||||
|
||||
memcpy( info, &ShmInfo[i], sizeof( struct shm_info ) ); |
||||
|
||||
return i; |
||||
} |
||||
|
||||
|
||||
void *shmat( int shmid, const void *shmaddr, int shmflg ) |
||||
{ |
||||
struct shm_info info; |
||||
int i; |
||||
|
||||
i = shm_getinfo( shmid, &info ); |
||||
if( i == -1 ) { |
||||
errno = EACCES; |
||||
return ( void * )-1; |
||||
} |
||||
|
||||
info.addr = mmap( ( void * )shmaddr, info.size,
|
||||
PROT_READ | PROT_WRITE, MAP_SHARED, shmid, 0 ); |
||||
if( info.addr == MAP_FAILED ) return info.addr; |
||||
|
||||
if( shm_updinfo( i, &info ) == -1 ) { |
||||
errno = EACCES; |
||||
return ( void * )-1; |
||||
} |
||||
|
||||
return info.addr; |
||||
} |
||||
|
||||
int shmdt( const void *addr ) |
||||
{ |
||||
struct shm_info info; |
||||
|
||||
if( shm_getinfobyaddr( addr, &info ) == -1 ) { |
||||
errno = EACCES; |
||||
return -1; |
||||
} |
||||
|
||||
return munmap( ( void * )addr, info.size ); |
||||
} |
||||
|
||||
int shmctl( int shmid, int cmd, struct shmid_ds *buf ) |
||||
{ |
||||
struct shm_info info; |
||||
char name[NAME_MAX+1]; |
||||
|
||||
/* IPC_RMID supported only */ |
||||
if( cmd != IPC_RMID ) { |
||||
errno = EINVAL; |
||||
return -1; |
||||
} |
||||
|
||||
if( shm_getinfo( shmid, &info ) == -1 ) { |
||||
errno = EACCES; |
||||
return -1; |
||||
} |
||||
|
||||
return shm_unlink( itoa( info.key, name, 16 ) ); |
||||
} |
||||
|
||||
int shmget( key_t key, size_t size, int flags ) |
||||
{ |
||||
char name[NAME_MAX+1]; |
||||
int oflag = 0; |
||||
struct shm_info info; |
||||
|
||||
if( flags & IPC_CREAT ) oflag |= O_CREAT; |
||||
if( flags & IPC_EXCL ) oflag |= O_EXCL; |
||||
if( flags & SHM_R ) { |
||||
if( flags & SHM_W ) oflag |= O_RDWR; |
||||
else oflag |= O_RDONLY; |
||||
} |
||||
info.shmid = shm_open( itoa( key, name, 16 ), oflag, MODE ); |
||||
|
||||
/* store shared memory information */ |
||||
if( info.shmid != -1 ) { |
||||
info.key = key; |
||||
info.size = size; |
||||
info.addr = NULL; |
||||
if( shm_putinfo( &info ) == -1 ) return -1; |
||||
} |
||||
|
||||
/* The size may only be set once. Ignore errors. */ |
||||
ltrunc( info.shmid, size, SEEK_SET ); |
||||
|
||||
return info.shmid; |
||||
} |
@ -0,0 +1,40 @@ |
||||
/*-------------------------------------------------------------------------
|
||||
* |
||||
* shm.h |
||||
* System V Shared Memory Emulation |
||||
* |
||||
* Copyright (c) 1999, repas AEG Automation GmbH |
||||
* |
||||
* |
||||
* IDENTIFICATION |
||||
* $Header: /cvsroot/pgsql/src/backend/port/qnx/Attic/shm.h,v 1.1 1999/12/16 01:25:06 momjian Exp $ |
||||
* |
||||
*------------------------------------------------------------------------- |
||||
*/ |
||||
|
||||
#ifndef _SYS_SHM_H |
||||
#define _SYS_SHM_H |
||||
|
||||
#include <sys/ipc.h> |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
#define SHM_R 0400 /* read permission */ |
||||
#define SHM_W 0200 /* write permission */ |
||||
|
||||
struct shmid_ds { |
||||
int dummy; |
||||
}; |
||||
|
||||
extern void *shmat( int shmid, const void *shmaddr, int shmflg ); |
||||
extern int shmdt( const void *addr ); |
||||
extern int shmctl( int shmid, int cmd, struct shmid_ds *buf ); |
||||
extern int shmget( key_t key, size_t size, int flags ); |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* _SYS_SHM_H */ |
@ -0,0 +1,31 @@ |
||||
/*-------------------------------------------------------------------------
|
||||
* |
||||
* tstrint.c |
||||
* rint() test |
||||
* |
||||
* Copyright (c) 1999, repas AEG Automation GmbH |
||||
* |
||||
* |
||||
* IDENTIFICATION |
||||
* $Header: /cvsroot/pgsql/src/backend/port/qnx/Attic/tstrint.c,v 1.1 1999/12/16 01:25:06 momjian Exp $ |
||||
* |
||||
*------------------------------------------------------------------------- |
||||
*/ |
||||
|
||||
#include <errno.h> |
||||
#include <stdio.h> |
||||
#include <stdlib.h> |
||||
#include "os.h" |
||||
|
||||
|
||||
int main( int argc, char **argv ) |
||||
{ |
||||
double x; |
||||
|
||||
if( argc != 2 ) exit( 1 ); |
||||
|
||||
x = strtod( argv[1], NULL ); |
||||
printf( "rint( %f ) = %f\n", x, rint( x ) ); |
||||
|
||||
return 0; |
||||
} |
@ -0,0 +1,135 @@ |
||||
/*-------------------------------------------------------------------------
|
||||
* |
||||
* tstsem.c |
||||
* Test of System V Semaphore Emulation |
||||
* |
||||
* Copyright (c) 1999, repas AEG Automation GmbH |
||||
* |
||||
* |
||||
* IDENTIFICATION |
||||
* $Header: /cvsroot/pgsql/src/backend/port/qnx/Attic/tstsem.c,v 1.1 1999/12/16 01:25:06 momjian Exp $ |
||||
* |
||||
*------------------------------------------------------------------------- |
||||
*/ |
||||
|
||||
|
||||
#include <stdio.h> |
||||
#include <stdlib.h> |
||||
#include <unistd.h> |
||||
#include "postgres.h" |
||||
#include "storage/ipc.h" |
||||
#include <sys/mman.h> |
||||
#include <sys/sem.h> |
||||
|
||||
|
||||
#define SEMMAX 1 |
||||
#define OPSMAX 1 |
||||
|
||||
|
||||
int main( int argc, char **argv ) |
||||
{ |
||||
int c, errflg = 0; |
||||
char s[80]; |
||||
key_t key = IPC_PRIVATE; |
||||
int nsems = SEMMAX; |
||||
int semflg = 0; |
||||
int unlink = 0; |
||||
int semid, i; |
||||
struct sembuf sops[OPSMAX]; |
||||
u_short array[SEMMAX]; |
||||
union semun arg; |
||||
|
||||
optarg = NULL; |
||||
while( !errflg && ( c = getopt( argc, argv, "k:n:cxu" ) ) != -1 ) { |
||||
switch( c ) { |
||||
case 'k': key = atoi( optarg ); break; |
||||
case 'n': nsems = atoi( optarg ); break; |
||||
case 'c': semflg |= IPC_CREAT; break; |
||||
case 'x': semflg |= IPC_EXCL; break; |
||||
case 'u': unlink = 1; break; |
||||
default: errflg++; |
||||
} |
||||
} |
||||
if( errflg ) { |
||||
printf( "usage: tstsem [-k key] [-n nsems] [-cxu]\n" ); |
||||
exit( 1 ); |
||||
} |
||||
|
||||
if( unlink ) { |
||||
i = shm_unlink( "SysV_Sem_Info" ); |
||||
if( i == -1 ) perror( "shm_unlink" ); |
||||
exit( i ); |
||||
} |
||||
|
||||
semid = semget( key, nsems, semflg ); |
||||
if( semid == -1 ) { |
||||
perror( "semget" ); |
||||
exit( semid ); |
||||
} |
||||
|
||||
do { |
||||
printf( "(-)sem_op, (+)sem_op, (G)ETVAL, (S)ETVAL, GET(P)ID, GET(A)LL, SETA(L)L, e(x)it: " ); |
||||
scanf( "%s", s ); |
||||
switch( s[0] ) { |
||||
case '-':
|
||||
case '+':
|
||||
sops[0].sem_num = 0; |
||||
sops[0].sem_op = atoi( s ); |
||||
if( sops[0].sem_op == 0 ) sops[0].sem_op = s[0] == '+' ? +1 : -1; |
||||
sops[0].sem_flg = 0; |
||||
if( semop( semid, sops, 1 ) == -1 ) perror( "semop" ); |
||||
break; |
||||
|
||||
case 'G':
|
||||
case 'g':
|
||||
i = semctl( semid, 0, GETVAL, arg ); |
||||
if( i == -1 ) perror( "semctl" ); |
||||
else printf( "semval = %d\n", i ); |
||||
break; |
||||
|
||||
case 'S':
|
||||
case 's':
|
||||
printf( "semval = " ); |
||||
scanf( "%d", &arg.val ); |
||||
if( semctl( semid, 0, SETVAL, arg ) == -1 ) perror( "semctl" ); |
||||
break; |
||||
|
||||
case 'P':
|
||||
case 'p':
|
||||
i = semctl( semid, 0, GETPID, arg ); |
||||
if( i == -1 ) perror( "semctl" ); |
||||
else printf( "PID = %d\n", i ); |
||||
break; |
||||
|
||||
case 'A':
|
||||
case 'a':
|
||||
arg.array = array; |
||||
i = semctl( semid, 0, GETALL, arg ); |
||||
if( i == -1 ) perror( "semctl" ); |
||||
else { |
||||
for( i = 0; i < nsems; i++ ) { |
||||
printf( "semval[%d] = %hu\n", i, arg.array[i] ); |
||||
} |
||||
} |
||||
break; |
||||
|
||||
case 'L':
|
||||
case 'l':
|
||||
arg.array = array; |
||||
for( i = 0; i < nsems; i++ ) { |
||||
printf( "semval[%d] = ", i ); |
||||
scanf( "%hu", &arg.array[i] ); |
||||
} |
||||
if( semctl( semid, 0, SETALL, arg ) == -1 )perror( "semctl" ); |
||||
break; |
||||
} |
||||
} |
||||
while( s[0] != 'x' ); |
||||
|
||||
if( semctl( semid, 0, IPC_RMID, arg ) == -1 ) { |
||||
perror( "semctl" ); |
||||
exit( -1 ); |
||||
} |
||||
|
||||
exit( 0 ); |
||||
} |
@ -0,0 +1,80 @@ |
||||
/*-------------------------------------------------------------------------
|
||||
* |
||||
* tstshm.c |
||||
* Test of System V Shared Memory Emulation |
||||
* |
||||
* Copyright (c) 1999, repas AEG Automation GmbH |
||||
* |
||||
* |
||||
* IDENTIFICATION |
||||
* $Header: /cvsroot/pgsql/src/backend/port/qnx/Attic/tstshm.c,v 1.1 1999/12/16 01:25:06 momjian Exp $ |
||||
* |
||||
*------------------------------------------------------------------------- |
||||
*/ |
||||
|
||||
#include <stdio.h> |
||||
#include <stdlib.h> |
||||
#include <unistd.h> |
||||
#include <sys/shm.h> |
||||
|
||||
|
||||
int main( int argc, char **argv ) |
||||
{ |
||||
int c, errflg = 0; |
||||
char s[80]; |
||||
key_t key = 0x1000; |
||||
size_t size = 256; |
||||
int shmid = -1; |
||||
caddr_t addr = NULL; |
||||
|
||||
optarg = NULL; |
||||
while( !errflg && ( c = getopt( argc, argv, "k:s:" ) ) != -1 ) { |
||||
switch( c ) { |
||||
case 'k': key = atoi( optarg ); break; |
||||
case 's': size = atoi( optarg ); break; |
||||
default: errflg++; |
||||
} |
||||
} |
||||
if( errflg ) { |
||||
printf( "usage: tstshm [-k key] [-s size]\n" ); |
||||
exit( 1 ); |
||||
} |
||||
|
||||
do { |
||||
printf( "shm(g)et, shm(a)t, shm(d)t, shm(c)tl, (w)rite, (r)ead, e(x)it: " ); |
||||
scanf( "%s", s ); |
||||
switch( s[0] ) { |
||||
case 'g':
|
||||
shmid = shmget( key, size, IPC_CREAT | SHM_R | SHM_W ); |
||||
if( shmid == -1 ) perror( "shmget" ); |
||||
break; |
||||
|
||||
case 'a':
|
||||
addr = shmat( shmid, NULL, 0 ); |
||||
if( addr == ( void * )-1 ) perror( "shmat" ); |
||||
break; |
||||
|
||||
case 'd':
|
||||
if( shmdt( addr ) == -1 ) perror( "shmdt" ); |
||||
else addr = NULL; |
||||
break; |
||||
|
||||
case 'c':
|
||||
if( shmctl( shmid, IPC_RMID, NULL ) == -1 ) perror( "shmctl" ); |
||||
else shmid = -1; |
||||
break; |
||||
|
||||
case 'w':
|
||||
printf( "String to write: " ); |
||||
scanf( "%s", addr ); |
||||
break; |
||||
|
||||
case 'r':
|
||||
puts( addr ); |
||||
break; |
||||
} |
||||
} |
||||
while( s[0] != 'x' ); |
||||
|
||||
return 0; |
||||
} |
@ -0,0 +1,43 @@ |
||||
#include <sys/types.h> /* for namser.h */ |
||||
#include <arpa/nameser.h> /* for BYTE_ORDER */ |
||||
#include <process.h> /* for execv */ |
||||
#include <ioctl.h> /* for unix.h */ |
||||
#include <termios.h> /* for unix.h */ |
||||
#include <unix.h> |
||||
#include <sys/select.h> /* for select */ |
||||
#if !defined(__GNUC__) |
||||
#include <semaphore.h> /* for sem_t */ |
||||
#endif |
||||
|
||||
#define USE_POSIX_TIME |
||||
#define HAS_TEST_AND_SET |
||||
#define HAVE_STRING_H |
||||
|
||||
#undef HAVE_GETRUSAGE |
||||
|
||||
#define strncasecmp strnicmp |
||||
|
||||
#ifndef NAN |
||||
#ifndef __nan_bytes |
||||
#define __nan_bytes { 0, 0, 0, 0, 0, 0, 0xf8, 0x7f } |
||||
#endif /* __nan_bytes */ |
||||
extern unsigned char __nan[8]; |
||||
#define NAN (*(const double *) __nan) |
||||
#endif /* NAN */ |
||||
|
||||
typedef u_short ushort; |
||||
|
||||
#if defined(__GNUC__) |
||||
typedef unsigned char slock_t; |
||||
#else |
||||
typedef sem_t slock_t; |
||||
#endif |
||||
|
||||
extern int isnan(double dsrc); |
||||
|
||||
extern double rint(double x); |
||||
|
||||
extern char *crypt(const char *, const char *); |
||||
|
||||
extern long random(void); |
||||
extern void srandom(unsigned int seed); |
@ -0,0 +1,11 @@ |
||||
MK_NO_LORDER= true
|
||||
CXXFLAGS+= -I/usr/local/lib/gcc-lib/i386-pc-qnx4/egcs-2.91.60/include/g++
|
||||
AR= ar
|
||||
LD= $(AR)
|
||||
LDREL= $(AROPT)
|
||||
LDOUT=
|
||||
LIBS= -lunix
|
||||
LDFLAGS= $(LIBS)
|
||||
|
||||
%$(DLSUFFIX): %.o |
||||
@echo Cannot make shared library $@ from $*.o
|
@ -0,0 +1,12 @@ |
||||
AROPT:cr |
||||
CFLAGS: |
||||
LIBS:-lunix |
||||
SHARED_LIB: |
||||
ALL: |
||||
SRCH_INC: |
||||
SRCH_LIB: |
||||
USE_LOCALE:no |
||||
DLSUFFIX:.so |
||||
YFLAGS:-d |
||||
YACC: |
||||
CXXFLAGS:-I/usr/local/lib/gcc-lib/i386-pc-qnx4/egcs-2.91.60/include/g++ |
Loading…
Reference in new issue