commit 0dba730
hovercats
·
2026-05-02 21:05:31 +0000 UTC
parent 5c28503
rc: apply fix to make sure $PATH and $path stays in sync both ways
2 files changed,
+61,
-32
R pkg/rc/patch/0004-convert-PATH-to-path.patch =>
pkg/rc/patch/0004-keep-PATH-and-path-in-sync.patch
+60,
-31
1@@ -1,17 +1,17 @@
2-From 82316253f508e421bd6f3498310fad3d65779627 Mon Sep 17 00:00:00 2001
3+From 4a4ebe30b0b2a46027451bc8b86459961f30bbd1 Mon Sep 17 00:00:00 2001
4 From: hovercats <hovercatswithlasereyes@protonmail.com>
5 Date: Sat, 25 Apr 2026 16:54:31 +0200
6-Subject: [PATCH] convert $PATH to $path
7+Subject: [PATCH] keep $PATH and $path in sync
8
9 ---
10- exec.c | 1 +
11+ exec.c | 12 ++++----
12 fns.h | 1 +
13 rc.h | 1 +
14- var.c | 96 +++++++++++++++++++++++++++++++++++++++++++++++++++++++---
15- 4 files changed, 95 insertions(+), 4 deletions(-)
16+ var.c | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
17+ 4 files changed, 99 insertions(+), 8 deletions(-)
18
19 diff --git a/exec.c b/exec.c
20-index e499d9f..1c11e4a 100644
21+index e499d9f..ba11796 100644
22 --- a/exec.c
23 +++ b/exec.c
24 @@ -244,6 +244,7 @@ main(int argc, char *argv[])
25@@ -22,6 +22,28 @@ index e499d9f..1c11e4a 100644
26 setvar("pid", newword(num, (word *)0));
27 setvar("cflag", flag['c']?newword(flag['c'][0], (word *)0)
28 :(word *)0);
29+@@ -737,16 +738,15 @@ void
30+ Xassign(void)
31+ {
32+ var *v;
33++ word *w;
34+
35+- if(count(runq->argv->words)!=1){
36++ w = Poplist();
37++ if(count(w)!=1){
38+ Xerror1("= variable name not singleton!");
39+ return;
40+ }
41+- v = vlook(runq->argv->words->word);
42+- poplist();
43+- freewords(v->val);
44+- v->val = Poplist();
45+- v->changed = 1;
46++ setvar(w->word, Poplist());
47++ freewords(w);
48+ }
49+
50+ /*
51 diff --git a/fns.h b/fns.h
52 index 1644d1e..a99f6fa 100644
53 --- a/fns.h
54@@ -47,23 +69,30 @@ index a688663..3f48cce 100644
55 };
56 var *vlook(char*), *gvlook(char*), *newvar(char*, var*);
57 diff --git a/var.c b/var.c
58-index 73b01fa..9ea49bd 100644
59+index 73b01fa..e132a7b 100644
60 --- a/var.c
61 +++ b/var.c
62-@@ -93,12 +93,74 @@ vlook(char *name)
63+@@ -70,6 +70,7 @@ newvar(char *name, var *next)
64+ v->fn = 0;
65+ v->changed = 0;
66+ v->fnchanged = 0;
67++ v->changefn = 0;
68+ return v;
69 }
70
71- void
72+@@ -92,13 +93,21 @@ vlook(char *name)
73+ return gvlook(name);
74+ }
75+
76+-void
77 -setvar(char *name, word *val)
78-+_setvar(char *name, word *val, int callfn)
79++static void
80++setvar_(char *name, word *val, int callfn)
81 {
82-- var *v = vlook(name);
83-+ struct var *v = vlook(name);
84+ var *v = vlook(name);
85 freewords(v->val);
86-- v->val = val;
87-- v->changed = 1;
88-+ v->val=val;
89-+ v->changed=1;
90+ v->val = val;
91+ v->changed = 1;
92 + if(callfn && v->changefn)
93 + v->changefn(v);
94 +}
95@@ -71,10 +100,16 @@ index 73b01fa..9ea49bd 100644
96 +void
97 +setvar(char *name, word *val)
98 +{
99-+ _setvar(name, val, 1);
100-+}
101++ setvar_(name, val, 1);
102+ }
103+
104+ void
105+@@ -107,3 +116,83 @@ freevar(var *v)
106+ freewords(v->val);
107+ free(v);
108+ }
109 +
110-+void
111++static void
112 +bigpath(var *v)
113 +{
114 + /* convert $PATH to $path */
115@@ -82,7 +117,7 @@ index 73b01fa..9ea49bd 100644
116 + word **l, *w;
117 +
118 + if(v->val == 0){
119-+ _setvar("path", 0, 0);
120++ setvar_("path", 0, 0);
121 + return;
122 + }
123 + p = v->val->word;
124@@ -105,10 +140,10 @@ index 73b01fa..9ea49bd 100644
125 + }else
126 + p = 0;
127 + }
128-+ _setvar("path", w, 0);
129++ setvar_("path", w, 0);
130 +}
131 +
132-+char*
133++static char *
134 +list2strcolon(word *words)
135 +{
136 + char *value, *s, *t;
137@@ -126,15 +161,9 @@ index 73b01fa..9ea49bd 100644
138 + *s='\0';
139 + else s[-1]='\0';
140 + return value;
141- }
142-
143- void
144-@@ -107,3 +169,29 @@ freevar(var *v)
145- freewords(v->val);
146- free(v);
147- }
148++}
149 +
150-+void
151++static void
152 +littlepath(var *v)
153 +{
154 + /* convert $path to $PATH */
155@@ -145,7 +174,7 @@ index 73b01fa..9ea49bd 100644
156 + w = new(word);
157 + w->word = p;
158 + w->next = 0;
159-+ _setvar("PATH", w, 1); /* 1: recompute $path to expose colon problems */
160++ setvar_("PATH", w, 1); /* 1: recompute $path to expose colon problems */
161 +}
162 +
163 +void
+1,
-1
1@@ -1 +1 @@
2-3e907e648d r2
3+3e907e648d r3