mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-03-09 15:50:02 +00:00
Notable changes: - The typeset builtin's usage and error messages for incompatible options used with -f has been corrected to show that -t and -u can be used with -f. - In name.c, get rid of misleaadingly named Null static which is actually the empty string, not the null value. Replace with a new AltEmpty macro that is defined similarly to Empty. This is now also used in nvtype.c (re: de037b6e).
146 lines
4.9 KiB
C
146 lines
4.9 KiB
C
/***********************************************************************
|
|
* *
|
|
* This software is part of the ast package *
|
|
* Copyright (c) 1982-2012 AT&T Intellectual Property *
|
|
* Copyright (c) 2020-2022 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 *
|
|
* *
|
|
* David Korn <dgk@research.att.com> *
|
|
* *
|
|
***********************************************************************/
|
|
#ifndef PATH_OFFSET
|
|
|
|
/*
|
|
* UNIX shell path handling interface
|
|
* Written by David Korn
|
|
* These are the definitions for the lexical analyzer
|
|
*/
|
|
|
|
#include "FEATURE/options"
|
|
#include <nval.h>
|
|
#include "defs.h"
|
|
|
|
#if !defined(SHOPT_SPAWN)
|
|
# if _UWIN || _use_spawnveg
|
|
# define SHOPT_SPAWN 1
|
|
# endif
|
|
#endif /* !SHOPT_SPAWN */
|
|
|
|
#define PATH_PATH 0001
|
|
#define PATH_FPATH 0002
|
|
#define PATH_CDPATH 0004
|
|
#define PATH_BFPATH 0010
|
|
#define PATH_SKIP 0020
|
|
#define PATH_BUILTIN_LIB 0040
|
|
#define PATH_STD_DIR 0100 /* directory is on $(getconf PATH) */
|
|
|
|
#define PATH_OFFSET 2 /* path offset for path_join */
|
|
#define MAXDEPTH (sizeof(char*)==2?64:1024) /* maximum recursion depth */
|
|
|
|
/*
|
|
* path component structure for path searching
|
|
*/
|
|
typedef struct pathcomp
|
|
{
|
|
struct pathcomp *next;
|
|
int refcount;
|
|
dev_t dev;
|
|
ino_t ino;
|
|
time_t mtime;
|
|
char *name;
|
|
char *lib;
|
|
char *bbuf;
|
|
char *blib;
|
|
unsigned short len;
|
|
unsigned short flags;
|
|
} Pathcomp_t;
|
|
|
|
#ifndef ARG_RAW
|
|
struct argnod;
|
|
#endif /* !ARG_RAW */
|
|
|
|
/* pathname handling routines */
|
|
extern void path_newdir(Pathcomp_t*);
|
|
extern Pathcomp_t *path_dirfind(Pathcomp_t*,const char*,int);
|
|
extern Pathcomp_t *path_unsetfpath(void);
|
|
extern Pathcomp_t *path_addpath(Pathcomp_t*,const char*,int);
|
|
extern Pathcomp_t *path_dup(Pathcomp_t*);
|
|
extern void path_delete(Pathcomp_t*);
|
|
extern void path_alias(Namval_t*,Pathcomp_t*);
|
|
extern Pathcomp_t *path_absolute(const char*, Pathcomp_t*, int);
|
|
extern char *path_basename(const char*);
|
|
extern char *path_fullname(const char*);
|
|
extern int path_expand(const char*, struct argnod**);
|
|
extern noreturn void path_exec(const char*,char*[],struct argnod*);
|
|
extern pid_t path_spawn(const char*,char*[],char*[],Pathcomp_t*,int);
|
|
#if defined(__EXPORT__) && defined(_BLD_DLL)
|
|
# define extern __EXPORT__
|
|
#endif
|
|
extern int path_open(const char*,Pathcomp_t*);
|
|
extern Pathcomp_t *path_get(const char*);
|
|
#undef extern
|
|
extern char *path_pwd(void);
|
|
extern Pathcomp_t *path_nextcomp(Pathcomp_t*,const char*,Pathcomp_t*);
|
|
extern int path_search(const char*,Pathcomp_t**,int);
|
|
extern char *path_relative(const char*);
|
|
extern int path_complete(const char*, const char*,struct argnod**);
|
|
#if SHOPT_BRACEPAT
|
|
extern int path_generate(struct argnod*,struct argnod**);
|
|
#endif /* SHOPT_BRACEPAT */
|
|
|
|
#if SHOPT_DYNAMIC
|
|
/* builtin/plugin routines */
|
|
extern int sh_addlib(void*,char*,Pathcomp_t*);
|
|
extern Shbltin_f sh_getlib(char*,Pathcomp_t*);
|
|
#endif /* SHOPT_DYNAMIC */
|
|
|
|
/* constant strings needed for whence */
|
|
extern const char e_timeformat[];
|
|
extern const char e_badtformat[];
|
|
extern const char e_funload[];
|
|
extern const char e_pwd[];
|
|
extern const char e_logout[];
|
|
extern const char e_alphanum[];
|
|
extern const char e_mailmsg[];
|
|
extern const char e_suidprofile[];
|
|
extern const char e_sysprofile[];
|
|
extern const char e_traceprompt[];
|
|
#if SHOPT_SUID_EXEC
|
|
extern const char e_suidexec[];
|
|
#endif /* SHOPT_SUID_EXEC */
|
|
extern const char is_alias[];
|
|
extern const char is_builtin[];
|
|
extern const char is_spcbuiltin[];
|
|
extern const char is_builtver[];
|
|
extern const char is_reserved[];
|
|
extern const char is_talias[];
|
|
extern const char is_function[];
|
|
extern const char is_ufunction[];
|
|
extern const char e_autoloadfrom[];
|
|
#ifdef SHELLMAGIC
|
|
extern const char e_prohibited[];
|
|
#endif /* SHELLMAGIC */
|
|
|
|
#if SHOPT_ACCT
|
|
# include "FEATURE/acct"
|
|
# ifdef _sys_acct
|
|
extern void sh_accinit(void);
|
|
extern void sh_accbegin(const char*);
|
|
extern void sh_accend(void);
|
|
extern void sh_accsusp(void);
|
|
# else
|
|
# undef SHOPT_ACCT
|
|
# endif /* _sys_acct */
|
|
#endif /* SHOPT_ACCT */
|
|
|
|
#endif /*! PATH_OFFSET */
|