Nexoniarz is the sole author and SchOS was never published under Apache-2.0, so this is a straight relicence. LICENSE is the FSF GPLv2 text, every first-party SPDX header moves to GPL-2.0-or-later, and NOTICE, README.md, docs/licensing.md and the site say so. projects/schfs-linux follows the rest of the tree. The GPL gives copyleft: a fork has to ship its source. It also lifts the old "Linux drivers, never" rule, since GPL-2.0-only code combines with GPL-2.0-or-later. "Or later" leaves room for GPLv3, but one binary still has to pick one version, so docs/licensing.md now keeps Apache-2.0 and GPLv3 code out of the kernel to keep Linux code possible there. BSD 4-clause code goes from "avoid" to "no", because the advertising clause is GPL-incompatible. LDLS still ships no .ko. That boundary is now project policy rather than a legal requirement, and ldls.md, devices.md and licensing.md section 6 say so. refmod declares license=GPL, and ldls-check passes (27 checks). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
28 lines
996 B
C
28 lines
996 B
C
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
//
|
|
// <stdlib.h> for lwIP, shadowing the host's. See shim/string.h for why these
|
|
// files exist at all.
|
|
//
|
|
// lwIP does not need an allocator from here: MEM_LIBC_MALLOC is off, so it uses
|
|
// its own pools out of a static heap. That is not a workaround -- the kernel's
|
|
// allocator hands out whole pages and lwIP wants byte granularity, so its pools
|
|
// are the better fit either way.
|
|
//
|
|
// atoi is the one thing it genuinely calls, in netif_name_to_index, to turn the
|
|
// digits at the end of an interface name into a number.
|
|
#ifndef LWIP_SHIM_STDLIB_H
|
|
#define LWIP_SHIM_STDLIB_H
|
|
|
|
// Deliberately not a general atoi: no sign, no whitespace, no overflow
|
|
// handling. It is fed the tail of an interface name ("en0" -> "0"), and
|
|
// anything cleverer would be untested code answering a question nobody asks.
|
|
static inline int
|
|
atoi(const char *s)
|
|
{
|
|
int n = 0;
|
|
while (*s >= '0' && *s <= '9')
|
|
n = n * 10 + (*s++ - '0');
|
|
return n;
|
|
}
|
|
|
|
#endif
|