Skip to content

Commit 60a6fea

Browse files
authored
Fix list management in stdio_set_driver_enabled so drivers can be freely added and removed (#822)
1 parent 04c68c5 commit 60a6fea

File tree

1 file changed

+6
-7
lines changed

1 file changed

+6
-7
lines changed

src/rp2_common/pico_stdio/stdio.c

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -180,20 +180,19 @@ int _write(int handle, char *buffer, int length) {
180180
}
181181

182182
void stdio_set_driver_enabled(stdio_driver_t *driver, bool enable) {
183-
stdio_driver_t *prev = drivers;
184-
for (stdio_driver_t *d = drivers; d; d = d->next) {
185-
if (d == driver) {
183+
stdio_driver_t **prev = &drivers;
184+
while (*prev) {
185+
if (*prev == driver) {
186186
if (!enable) {
187-
prev->next = d->next;
187+
*prev = driver->next;
188188
driver->next = NULL;
189189
}
190190
return;
191191
}
192-
prev = d;
192+
prev = &(*prev)->next;
193193
}
194194
if (enable) {
195-
if (prev) prev->next = driver;
196-
else drivers = driver;
195+
*prev = driver;
197196
}
198197
}
199198

0 commit comments

Comments
 (0)