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'.
162 lines
5.6 KiB
C
162 lines
5.6 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> *
|
|
* *
|
|
***********************************************************************/
|
|
/*
|
|
* Glenn Fowler
|
|
* David Korn
|
|
* Phong Vo
|
|
* AT&T Research
|
|
*
|
|
* fts interface definitions
|
|
*/
|
|
|
|
#ifndef _FTS_H
|
|
#define _FTS_H
|
|
|
|
#include <ast_std.h>
|
|
#include <ast_fs.h>
|
|
#include <ast_mode.h>
|
|
|
|
/*
|
|
* fts_open flags
|
|
*/
|
|
|
|
#define FTS_LOGICAL 0 /* logical traversal, follow symlinks */
|
|
#define FTS_META (1<<0) /* follow top dir symlinks even if phys */
|
|
#define FTS_NOCHDIR (1<<1) /* don't chdir */
|
|
#define FTS_NOPOSTORDER (1<<2) /* no postorder visits */
|
|
#define FTS_NOPREORDER (1<<3) /* no preorder visits */
|
|
#define FTS_NOSEEDOTDIR (1<<11) /* never retain leading . dir */
|
|
#define FTS_NOSTAT (1<<4) /* don't stat children */
|
|
#define FTS_ONEPATH (1<<5) /* pathnames arg is one const char* */
|
|
#define FTS_PHYSICAL (1<<6) /* physical traversal, don't follow */
|
|
#define FTS_SEEDOT (1<<7) /* return . and .. */
|
|
#define FTS_SEEDOTDIR (1<<10) /* always retain leading . dir */
|
|
#define FTS_TOP (1<<8) /* don't traverse subdirectories */
|
|
#define FTS_XDEV (1<<9) /* don't cross mount points */
|
|
|
|
#define FTS_USER (1<<12) /* first user flag bit */
|
|
|
|
#define FTS_COMFOLLOW FTS_META
|
|
|
|
/*
|
|
* fts_info flags
|
|
*/
|
|
|
|
#define FTS_DEFAULT 0 /* ok, someone must have wanted this */
|
|
|
|
#define FTS_NS (1<<0) /* stat failed */
|
|
#define FTS_F (1<<1) /* file - not directory or symbolic link*/
|
|
#define FTS_SL (1<<2) /* symbolic link */
|
|
#define FTS_D (1<<3) /* directory - pre-order visit */
|
|
|
|
#define FTS_C (1<<4) /* causes cycle */
|
|
#define FTS_ERR (1<<5) /* some other error */
|
|
#define FTS_DD (1<<6) /* . or .. */
|
|
#define FTS_NR (1<<7) /* cannot read */
|
|
#define FTS_NX (1<<8) /* cannot search */
|
|
#define FTS_OK (1<<9) /* no info but otherwise ok */
|
|
#define FTS_P (1<<10) /* post-order visit */
|
|
|
|
#define FTS_DC (FTS_D|FTS_C) /* dir - would cause cycle */
|
|
#define FTS_DNR (FTS_D|FTS_NR) /* dir - no read permission */
|
|
#define FTS_DNX (FTS_D|FTS_NX) /* dir - no search permission */
|
|
#define FTS_DOT (FTS_D|FTS_DD) /* . or .. */
|
|
#define FTS_DP (FTS_D|FTS_P) /* dir - post-order visit */
|
|
#define FTS_NSOK (FTS_NS|FTS_OK) /* no stat (because you asked) */
|
|
#define FTS_SLNONE (FTS_SL|FTS_NS) /* symlink - to nowhere */
|
|
|
|
/*
|
|
* fts_set flags
|
|
*/
|
|
|
|
#define FTS_AGAIN FTS_TOP /* process entry again */
|
|
#define FTS_FOLLOW FTS_META /* follow FTS_SL symlink */
|
|
#define FTS_SKIP FTS_NOSTAT /* skip FTS_D directory */
|
|
#define FTS_STAT FTS_PHYSICAL /* stat() done by user */
|
|
|
|
typedef struct Fts FTS;
|
|
typedef struct Ftsent FTSENT;
|
|
|
|
struct Ftsent
|
|
{
|
|
char* fts_accpath; /* path relative to . */
|
|
char* fts_name; /* file name */
|
|
char* fts_path; /* path relative to top dir */
|
|
FTSENT* fts_cycle; /* offender if cycle */
|
|
FTSENT* fts_link; /* next child */
|
|
FTSENT* fts_parent; /* parent directory */
|
|
struct stat* fts_statp; /* stat info */
|
|
#ifdef _FTSENT_LOCAL_PRIVATE_
|
|
_FTSENT_LOCAL_PRIVATE_
|
|
#else
|
|
void* fts_pointer; /* local pointer value */
|
|
#endif
|
|
long fts_number; /* local numeric value */
|
|
int fts_errno; /* errno for this entry */
|
|
unsigned short fts_info; /* info flags */
|
|
|
|
unsigned short _fts_namelen; /* old fts_namelen */
|
|
unsigned short _fts_pathlen; /* old fts_pathlen */
|
|
short _fts_level; /* old fts_level */
|
|
|
|
short _fts_status; /* <ftwalk.h> compatibility */
|
|
struct stat _fts_statb; /* <ftwalk.h> compatibility */
|
|
|
|
FTS* fts; /* fts_open() handle */
|
|
size_t fts_namelen; /* strlen(fts_name) */
|
|
size_t fts_pathlen; /* strlen(fts_path) */
|
|
ssize_t fts_level; /* file tree depth, 0 at top */
|
|
|
|
#ifdef _FTSENT_PRIVATE_
|
|
_FTSENT_PRIVATE_
|
|
#endif
|
|
|
|
};
|
|
|
|
struct Fts
|
|
{
|
|
int fts_errno; /* last errno */
|
|
void* fts_handle; /* user defined handle */
|
|
|
|
#ifdef _FTS_PRIVATE_
|
|
_FTS_PRIVATE_
|
|
#endif
|
|
|
|
};
|
|
|
|
#if _BLD_ast && defined(__EXPORT__)
|
|
#define extern __EXPORT__
|
|
#endif
|
|
|
|
extern FTSENT* fts_children(FTS*, int);
|
|
extern int fts_close(FTS*);
|
|
extern int fts_flags(void);
|
|
extern int fts_local(FTSENT*);
|
|
extern int fts_notify(int(*)(FTS*, FTSENT*, void*), void*);
|
|
extern FTS* fts_open(char* const*, int, int(*)(FTSENT* const*, FTSENT* const*));
|
|
extern FTSENT* fts_read(FTS*);
|
|
extern int fts_set(FTS*, FTSENT*, int);
|
|
|
|
#undef extern
|
|
|
|
#endif
|