Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env -S ucode -L.
- import * as ffi from 'cparse';
- const narr = ffi.ctype('int[5]', 56, 4, 12, 1, 5);
- const sarr = ffi.ctype('const char *[?]', 3, 'foo', 'bar', 'qrx');
- const qsort = ffi.C.wrap('void qsort(void *, size_t, size_t, int (*)(const void *, const void *))');
- const strcmp = ffi.C.wrap('int strcmp(const char *, const char *)');
- if (0) {
- print(`BEFORE: ${narr.get()}\n`);
- qsort(narr.ptr(), ffi.sizeof(narr) / ffi.sizeof('int'), ffi.sizeof('int'),
- (a, b) => a.deref('int') - b.deref('int'));
- print(`AFTER: ${narr.get()}\n`);
- }
- if (1) {
- print(`BEFORE: ${sarr.get()}\n`);
- if (0) qsort(sarr.ptr(), ffi.sizeof(sarr) / ffi.sizeof('char *'), ffi.sizeof('char *'),
- (a, b) => {
- const x = a.deref('const char *').get();
- const y = b.deref('const char *').get();
- warn([x, y], "\n");
- return x < y ? -1 : x > y ? 1 : 0;
- });
- qsort(sarr.ptr(), sarr.length(), sarr.itemsize(),
- (a, b) => strcmp(a.deref('const char *'), b.deref('const char *')));
- print(`AFTER: ${sarr.get()} ${sarr.get(0)}\n`);
- }
- ffi.cdef('extern char **environ');
- warn('ENV: ');
- x = ffi.C.dlsym('environ').get(1);
- warn(x, 'ENVEND\n');
- printf('%.J\n', [
- ffi.C.wrap('char *getenv(char *)')("DBUS_SESSION_BUS_ADDRESS").get(),
- ffi.ctype('const char *', 'FOO').get(),
- ffi.ctype('const char *[?]', 3, 'foo', 'bar', 'qrx').get(2),
- ffi.ctype('struct { const char *x; const char *y; }', { x: "abc", y: "def" }).get("y"),
- ffi.cast('const char *', ffi.ctype('const void *', "abc")).get(),
- ffi.cast('const char **',
- ffi.ctype('struct { const char *x; const char *y; }', { x: "abc", y: "def" })).get(1)
- ]);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement