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