zpmod  b19981f
High-performance Zsh module for script optimization and filesystem helpers
zpmod_internals.h
Go to the documentation of this file.
1 #pragma once
2 /* SPDX-License-Identifier: MIT */
3 /*
4  * zpmod_internals.h
5  * Minimal fallback externs & prototypes for a subset of zsh internals
6  * required by zpmod when the generated "zsh.mdh" (and *.epro set) is
7  * not available (e.g. slim Docker images lacking zsh -dev artifacts).
8  *
9  * Strict rules:
10  * 1. Only declare what zpmod directly references.
11  * 2. Signatures & types MUST match upstream exactly (volatile, typedefs).
12  * 3. Entire header is suppressed if ZSH_MDH_INCLUDED is defined.
13  */
14 #ifndef ZPMOD_INTERNALS_FALLBACK_H
15 #define ZPMOD_INTERNALS_FALLBACK_H
16 
17 #if !defined(ZSH_MDH_INCLUDED)
18 
19 #include <stddef.h>
20 #include <stdio.h>
21 
22 /* Forward typedefs mirroring upstream (opaque here). NOTE: do NOT redefine
23  * PrintTableStats: zsh.h already typedefs it (void (*)(HashTable)) and we
24  * include zsh.h before this fallback. Redefinition caused CI failures. */
25 typedef struct eprog *Eprog;
26 struct patprog;
27 typedef struct patprog *Patprog; /* Patprog */
28 struct hashtable;
29 typedef struct hashtable *HashTable; /* HashTable */
30 struct hashnode;
31 typedef struct hashnode *HashNode; /* HashNode */
32 struct builtin;
33 typedef struct builtin *Builtin; /* Builtin */
34 typedef struct funcstack *Funcstack; /* Funcstack */
35 typedef struct features *Features; /* Features */
36 typedef struct module *Module; /* Module (single typedef; duplicate removed) */
37 
38 /* Core global variables (match volatile & types) */
39 extern volatile long lastval; /* zlong lastval (assume long when unknown) */
40 extern volatile int retflag;
41 extern volatile int errflag;
42 extern volatile int exit_pending;
43 extern volatile int trap_state; /* enum trap_state bits */
44 extern char opts[]; /* options bitmap */
45 extern char **pparams;
46 extern char *argzero;
47 extern char **path;
48 extern char *scriptname;
49 extern char *scriptfilename;
50 extern int trap_return;
51 extern int SHIN;
52 extern int subsh;
53 extern int thisjob;
54 extern int loops;
55 extern void *cmdstack; /* treat opaque */
56 extern int cmdsp;
57 extern int sourcelevel;
58 extern Funcstack funcstack;
59 extern short *fdtable;
60 
61 /* Hash tables */
62 extern HashTable shfunctab;
63 extern HashTable builtintab;
64 
65 /* Functions (subset) */
66 extern char **zarrdup(char **);
67 extern char *ztrdup(const char *);
68 extern char *unmeta(char *);
69 extern void pushheap(void);
70 extern void popheap(void);
71 extern char *zhtricat(const char *, const char *, const char *);
72 extern void freearray(char **);
73 extern void zerrnam(const char *, const char *, ...);
74 extern void zwarnnam(const char *, const char *, ...);
75 extern void zwarn(const char *, ...);
76 extern void *zhalloc(size_t);
77 extern void *zshcalloc(size_t);
78 extern int movefd(int);
79 extern int strsfx(const char *, const char *);
80 extern void queue_signals(void);
81 extern void unqueue_signals(void);
82 extern HashTable newhashtable(int, char *, PrintTableStats);
83 extern unsigned int hasher(const char *);
85 extern void addhashnode(HashTable, char *, void *);
86 extern HashNode removehashnode(HashTable, const char *);
88 extern HashNode gethashnode2(HashTable, const char *);
89 extern int loop(int, int);
90 extern void freeeprog(Eprog);
91 extern int bin_zcompile(char *, char **, void *, int);
92 extern void incrdumpcount(void *);
93 extern void shinbufsave(void);
94 extern void shinbufrestore(void);
95 extern int dosetopt(int, int, int, unsigned char *);
96 /* Missing prototype when .epro exports absent */
97 extern int arrlen(char **);
98 /* Additional internals referenced by source.c when generated exports absent */
99 extern struct eprog dummy_eprog; /* placeholder Eprog */
100 /* NOTE: dummy_patprog1 is a macro (#define dummy_patprog1 ((Patprog) 1)) in
101  * upstream zsh headers; do NOT declare it here or it expands inside an extern
102  * and breaks the build (seen in Docker CI). We rely on the macro provided by
103  * vendor/zsh/Src/zsh.h. */
104 extern void printprompt4(void);
105 extern void execode(Eprog, int, int, char *);
106 extern char *dyncat(const char *, const char *);
107 extern char *pwd; /* current working directory */
108 extern FILE *xtrerr; /* trace/error file */
109 extern zlong lineno; /* current line number */
110 
111 #endif /* !ZSH_MDH_INCLUDED */
112 
113 #endif /* ZPMOD_INTERNALS_FALLBACK_H */
void emptyhashtable(HashTable)
void deletehashtable(HashTable)
void execode(Eprog, int, int, char *)
void zwarnnam(const char *, const char *,...)
volatile int retflag
int sourcelevel
void queue_signals(void)
int SHIN
char ** path
void pushheap(void)
HashTable shfunctab
FILE * xtrerr
struct hashtable * HashTable
void * cmdstack
int subsh
void zwarn(const char *,...)
void freeeprog(Eprog)
int thisjob
void unqueue_signals(void)
int loops
char * pwd
struct builtin * Builtin
int cmdsp
struct funcstack * Funcstack
short * fdtable
void shinbufrestore(void)
char * zhtricat(const char *, const char *, const char *)
HashNode gethashnode2(HashTable, const char *)
struct eprog dummy_eprog
HashTable newhashtable(int, char *, PrintTableStats)
int movefd(int)
char * argzero
int bin_zcompile(char *, char **, void *, int)
char * scriptfilename
struct features * Features
int arrlen(char **)
void * zshcalloc(size_t)
struct hashnode * HashNode
char * unmeta(char *)
int strsfx(const char *, const char *)
int trap_return
volatile int errflag
HashNode removehashnode(HashTable, const char *)
void incrdumpcount(void *)
unsigned int hasher(const char *)
void * zhalloc(size_t)
int dosetopt(int, int, int, unsigned char *)
struct patprog * Patprog
void freearray(char **)
char opts[]
void zerrnam(const char *, const char *,...)
void popheap(void)
int loop(int, int)
volatile long lastval
char ** pparams
struct eprog * Eprog
volatile int exit_pending
char * scriptname
void addhashnode(HashTable, char *, void *)
HashTable builtintab
char ** zarrdup(char **)
zlong lineno
Funcstack funcstack
void printprompt4(void)
volatile int trap_state
struct module * Module
void shinbufsave(void)
char * dyncat(const char *, const char *)
char * ztrdup(const char *)