mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-03-09 15:50:02 +00:00
This takes another step towards cleaning up the build system. We now do not even pretend to be theoretically compatible with pre-1989 K&R C compilers or with C++ compilers. In practice, this had already been broken for many years due to bit rot. Commit46593a89already removed the license handling enormity that depended on proto, so now we can cleanly remove it altogether. But we do need to leave some backwards compatibility stubs to keep the build system compatible with older AST code; it should remain possible to build older ksh versions with the current build system (the bin/ and src/cmd/INIT/ directories) for testing purposes. So as of now there is no more __MANGLE__d rubbish in your generated header files. This is only about a quarter of a century overdue... This commit also includes a huge amount of code cleanup to remove thousands of unused K&R C fallbacks and other cruft, particularly in libast. This code base should now be a little easier to understand for people who are familiar with a modern(ish) C standard. ratz is now also removed; this was a standalone and simplified 2005 version of gunzip. As of6137b99a, none of our code uses it, even theoretically. And the real g(un)zip is now everywhere. src/cmd/INIT/proto.c, src/cmd/INIT/ratz.c: - Removed. COPYRIGHT: - Remove zlib license; this only applied to ratz. bin/package, src/cmd/INIT/package.sh: - Related cleanups. - Unset LC_ALL before invoking a new shell, respecting the user's locale again and avoiding multibyte character corruption on the command line. src/cmd/INIT/proto.sh: - Add stub for backwards compatibility with Mamfiles that depend on proto. It does nothing but pass input without modification and is now installed as the new arch/*/bin/proto by src/cmd/INIT/Mamfile. src/cmd/INIT/iffe.sh: - Ignore the proto-related -e (--package) and -p (--prototyped) options; keep parsing them for backwards compatibility. - Trim the macros passed to every test to their standard C versions, removing K&R C and C++ versions. These are now considered to be for backwards compatibility only. src/cmd/INIT/iffe.tst: - Remove proto(1) mangling code. By the way, iffe can be regression-tested as follows: $ bin/package use # set up environment in a child shell $ regress src/cmd/INIT/iffe.tst $ exit # leave package environment src/cmd/INIT/make.probe, src/cmd/INIT/probe.win32: - Remove code to handle C++. src/lib/libast/features/common: - As in iffe.sh above, trim macros designed for compatibility with C++ and ancient C compilers to their standard C versions and comment that they are for backwards compatibility with AST code. This is needed to keep all the old ast and ksh code compiling. src/cmd/ksh93/sh/init.c, src/cmd/ksh93/sh/name.c: - Clarify libshell ABI compatibility function versions of macros. A "proto workaround" comment in the original code mislead me into thinking this had something to do with the removed proto(1), but it's unrelated. Call the workaround macro BYPASS_MACRO instead. src/cmd/ksh93/include/defs.h: - sh_sigcheck() macro: allow &sh as an argument: parenthesise shp. src/cmd/ksh93/sh/nvtype.c: - Remove unused nv_mkstruct() function. (re:d0a5cab1) **/features/*: - Remove obsolete iffe 'set prototyped' option. **/Mamfile: - Remove all references to the ast/prototyped.h header. - Remove all use of the proto command. Simply copy instead. *** 850-ish source files: *** - Remove all '#pragma prototyped' directives. - Remove all C++ compat code conditional upon defined(__cplusplus). - Remove all use of the _ARG_ macro, which on standard C expands to its argument: #define _ARG_(x) x (on K&R C, it expanded to nothing) - Remove all use of _BEGIN_EXTERNS_ and _END_EXTERNS_ macros (empty on standard C; this was for C++ compatibility) - Reduce all #if __STD_C (standard code) #else (K&R code) #endif blocks to the standard code only, without use of the macro. - Same for _STD_ macro which seems to have had the same function. - Change all instances of 'Void_t' to standard 'void'.
183 lines
6.3 KiB
C
183 lines
6.3 KiB
C
/***********************************************************************
|
|
* *
|
|
* This software is part of the ast package *
|
|
* Copyright (c) 1985-2011 AT&T Intellectual Property *
|
|
* Copyright (c) 2020-2021 Contributors to ksh 93u+m *
|
|
* and is licensed under the *
|
|
* Eclipse Public License, Version 1.0 *
|
|
* by AT&T Intellectual Property *
|
|
* *
|
|
* A copy of the License is available at *
|
|
* http://www.eclipse.org/org/documents/epl-v10.html *
|
|
* (with md5 checksum b35adb5213ca9657e911e9befb180842) *
|
|
* *
|
|
* Information and Software Systems Research *
|
|
* AT&T Research *
|
|
* Florham Park NJ *
|
|
* *
|
|
* Glenn Fowler <gsf@research.att.com> *
|
|
* David Korn <dgk@research.att.com> *
|
|
* Phong Vo <kpv@research.att.com> *
|
|
* *
|
|
***********************************************************************/
|
|
|
|
#ifndef _ASO_H
|
|
#define _ASO_H 1
|
|
|
|
#define ASO_VERSION 20111111L
|
|
|
|
#include <ast_common.h>
|
|
|
|
/*
|
|
* AST atomic scalar operations interface definitions
|
|
*/
|
|
|
|
/* asometh() types (ordered mutually exclusive flags) */
|
|
#define ASO_NEXT (-1)
|
|
#define ASO_SIGNAL 1
|
|
#define ASO_THREAD 2
|
|
#define ASO_PROCESS 4
|
|
#define ASO_INTRINSIC 8
|
|
|
|
/* asolock() operations */
|
|
#define ASO_UNLOCK 0 /* unlock if key matches */
|
|
#define ASO_TRYLOCK 1 /* matched key means successful attempt */
|
|
#define ASO_LOCK 2 /* matched key first, then spin-lock */
|
|
#define ASO_SPINLOCK 3 /* no matching of key before locking */
|
|
|
|
/* Asoerror_f types */
|
|
#define ASO_EMETHOD 0 /* method specific error */
|
|
#define ASO_EHUNG 1 /* asoloop() possibly hung */
|
|
|
|
/* for internal use, but standardized for libs such as CDT and Vmalloc */
|
|
#define ASO_RELAX ((1<<2)-1) /* cycles between spin-loop yield */
|
|
#define ASOLOOP(k) asoloop(++(k))
|
|
|
|
#define ASODISC(d,e) (memset(d,0,sizeof(*(d))),(d)->version=ASO_VERSION,(d)->errorf=(e))
|
|
|
|
typedef int (*Asoerror_f)(int, const char*);
|
|
typedef void* (*Asoinit_f)(void*, const char*);
|
|
typedef ssize_t (*Asolock_f)(void*, ssize_t, void volatile*);
|
|
|
|
typedef struct Asodisc_s
|
|
{
|
|
uint32_t version;
|
|
unsigned int hung;
|
|
Asoerror_f errorf;
|
|
} Asodisc_t;
|
|
|
|
typedef struct Asometh_s
|
|
{
|
|
const char* name;
|
|
int type;
|
|
Asoinit_f initf;
|
|
Asolock_f lockf;
|
|
const char* details;
|
|
} Asometh_t;
|
|
|
|
#if (_BLD_aso || _BLD_taso) && defined(__EXPORT__)
|
|
#define extern extern __EXPORT__
|
|
#endif
|
|
#if !(_BLD_aso || _BLD_taso) && defined(__IMPORT__)
|
|
#define extern extern __IMPORT__
|
|
#endif
|
|
|
|
extern Asometh_t* asometh(int, void*);
|
|
|
|
#undef extern
|
|
|
|
#if _BLD_aso && defined(__EXPORT__)
|
|
#define extern extern __EXPORT__
|
|
#endif
|
|
#if !_BLD_aso && defined(__IMPORT__)
|
|
#define extern extern __IMPORT__
|
|
#endif
|
|
|
|
extern Asometh_t* _asometh(int, void*);
|
|
extern int asoinit(const char*, Asometh_t*, Asodisc_t*);
|
|
extern int asolock(unsigned int volatile*, unsigned int, int);
|
|
extern int asoloop(uintmax_t);
|
|
extern int asorelax(long);
|
|
|
|
extern uint8_t asocas8(uint8_t volatile*, int, int);
|
|
extern uint8_t asoget8(uint8_t volatile*);
|
|
extern uint8_t asoinc8(uint8_t volatile*);
|
|
extern uint8_t asodec8(uint8_t volatile*);
|
|
|
|
#define asocaschar(p,o,n) asocas8(p,o,n)
|
|
#define asogetchar(p) asoget8(p)
|
|
#define asoincchar(p) asoinc8(p)
|
|
#define asodecchar(p) asodec8(p)
|
|
|
|
extern uint16_t asocas16(uint16_t volatile*, uint16_t, uint16_t);
|
|
extern uint16_t asoget16(uint16_t volatile*);
|
|
extern uint16_t asoinc16(uint16_t volatile*);
|
|
extern uint16_t asodec16(uint16_t volatile*);
|
|
|
|
#define asocasshort(p,o,n) asocas16(p,o,n)
|
|
#define asogetshort(p) asoget16(p)
|
|
#define asoincshort(p) asoinc16(p)
|
|
#define asodecshort(p) asodec16(p)
|
|
|
|
extern uint32_t asocas32(uint32_t volatile*, uint32_t, uint32_t);
|
|
extern uint32_t asoget32(uint32_t volatile*);
|
|
extern uint32_t asoinc32(uint32_t volatile*);
|
|
extern uint32_t asodec32(uint32_t volatile*);
|
|
|
|
#if _ast_sizeof_int == 4
|
|
#define asocasint(p,o,n) asocas32((uint32_t volatile*)p,o,n)
|
|
#define asogetint(p) asoget32((uint32_t volatile*)p)
|
|
#define asoincint(p) asoinc32((uint32_t volatile*)p)
|
|
#define asodecint(p) asodec32((uint32_t volatile*)p)
|
|
#endif
|
|
|
|
#if _ast_sizeof_long == 4
|
|
#define asocaslong(p,o,n) asocas32((uint32_t volatile*)p,o,n)
|
|
#define asogetlong(p) asoget32((uint32_t volatile*)p)
|
|
#define asoinclong(p) asoinc32((uint32_t volatile*)p)
|
|
#define asodeclong(p) asodec32((uint32_t volatile*)p)
|
|
#endif
|
|
|
|
#if _ast_sizeof_size_t == 4
|
|
#define asocassize(p,o,n) asocas32((uint32_t volatile*)p,o,n)
|
|
#define asogetsize(p) asoget32((uint32_t volatile*)p)
|
|
#define asoincsize(p) asoinc32((uint32_t volatile*)p)
|
|
#define asodecsize(p) asodec32((uint32_t volatile*)p)
|
|
#endif
|
|
|
|
#ifdef _ast_int8_t
|
|
|
|
extern uint64_t asocas64(uint64_t volatile*, uint64_t, uint64_t);
|
|
extern uint64_t asoget64(uint64_t volatile*);
|
|
extern uint64_t asoinc64(uint64_t volatile*);
|
|
extern uint64_t asodec64(uint64_t volatile*);
|
|
|
|
#if _ast_sizeof_int == 8
|
|
#define asocasint(p,o,n) asocas64((uint64_t volatile*)p,o,n)
|
|
#define asogetint(p) asoget64((uint64_t volatile*)p)
|
|
#define asoincint(p) asoinc64((uint64_t volatile*)p)
|
|
#define asodecint(p) asodec64((uint64_t volatile*)p)
|
|
#endif
|
|
|
|
#if _ast_sizeof_long == 8
|
|
#define asocaslong(p,o,n) asocas64((uint64_t volatile*)p,o,n)
|
|
#define asogetlong(p) asoget64((uint64_t volatile*)p)
|
|
#define asoinclong(p) asoinc64((uint64_t volatile*)p)
|
|
#define asodeclong(p) asodec64((uint64_t volatile*)p)
|
|
#endif
|
|
|
|
#if _ast_sizeof_size_t == 8
|
|
#define asocassize(p,o,n) asocas64((uint64_t volatile*)p,o,n)
|
|
#define asogetsize(p) asoget64((uint64_t volatile*)p)
|
|
#define asoincsize(p) asoinc64((uint64_t volatile*)p)
|
|
#define asodecsize(p) asodec64((uint64_t volatile*)p)
|
|
#endif
|
|
|
|
#endif
|
|
|
|
extern void* asocasptr(void volatile*, void*, void*);
|
|
extern void* asogetptr(void volatile*);
|
|
|
|
#undef extern
|
|
|
|
#endif
|