fluffos/testsuite/command/external_curl.lpc
Yucong Sun 592dfc0688 Prefer .lpc source extension; rename testsuite to .lpc
Source resolution is now explicit-extension-exact: load_object("/foo.c")
probes only foo.c, never foo.lpc (and vice versa); extension-less names
prefer .lpc and fall back to .c. Object identity stays extension-blind:
object names carry no extension, any spelling finds a loaded object, and
the registry is consulted before the filesystem. The caller's raw
spelling now flows through find_object()/inherit/master/simul_efun loads
instead of being pre-stripped away.

- filename_to_obname and otable basename() strip .lpc too (children())
- save_object() strips either source extension before appending .o
- replace_program()/function_exists() handle both suffixes
- testsuite: all LPC sources renamed to .lpc; runner globs, master
  get_include_path cases, and program-name assertions updated;
  README.md rewritten with the extension rules and suite conventions
- new single/tests/efuns/dual_extension.lpc pins exact-pick, fallback,
  no-crossover, identity, and registry-before-filesystem with .c/.lpc
  fixture pairs in /clone

Verified: ctest 297/297 and driver-autotest x3 (ASan Debug) plus
RelWithDebInfo ctest + autotest.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 20:48:48 -04:00

49 lines
953 B
Text

mapping fd_to_msg;
mapping fd_to_obj;
void on_read(int fd, string msg) {
debug_message(sprintf("on_read: %d", fd));
fd_to_msg[fd] += sprintf("%s", msg);
}
void on_write(int fd) {
debug_message(sprintf("on_write: %d", fd));
}
void on_close(int fd) {
debug_message(sprintf("on_close: %d", fd));
tell_object(fd_to_obj[fd], fd_to_msg[fd]);
map_delete(fd_to_msg, fd);
map_delete(fd_to_obj, fd);
// Turn off debug messages for external_start
clear_debug_level("external_start") ;
}
int main(string arg)
{
int fd;
int CURL_CMD = 1;
if(__ARCH__ == "Microsoft Windows") CURL_CMD = 2;
if (!arg) arg = "";
// Turn on debug messages for external_start
set_debug_level("external_start") ;
fd = external_start(CURL_CMD, arg, "on_read", "on_write", "on_close");
if (!fd_to_msg) {
fd_to_msg = ([]);
}
if (!fd_to_obj) {
fd_to_obj = ([]);
}
fd_to_msg[fd] = "";
fd_to_obj[fd] = this_player();
return 1;
}