Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@plicease
Last active July 2, 2019 08:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save plicease/7d561de84800cd7fbac25319f3834cb9 to your computer and use it in GitHub Desktop.
Save plicease/7d561de84800cd7fbac25319f3834cb9 to your computer and use it in GitHub Desktop.
package UV::FFI::Constants;
use strict;
use warnings;
use constant ();
use FFI::Build;
use FFI::Platypus;
use base qw( Exporter );
our @EXPORT_OK;
{
my $build = FFI::Build->new(
'uvconstant',
source => [ [ C => \ do { local $/; <DATA> } ] ],
#verbose => 2,
alien => ['Alien::libuv'],
);
my $ffi = FFI::Platypus->new;
$ffi->lib($build->build);
$ffi->type('(string,string)->void', 'set_str_t');
$ffi->type('(string,sint64)->void', 'set_sint64_t');
my $f = $ffi->closure(sub {
my($name, $value) = @_;
constant->import($name, $value);
push @EXPORT_OK, $name;
});
$ffi->function('constant_export' => [ 'set_str_t', 'set_sint64_t' ] => 'void' )->call($f,$f);
}
1;
__DATA__
#include <uv.h>
#include <stdint.h>
typedef void (*set_str_t)(const char *name, const char *value);
typedef void (*set_sint64_t)(const char *name, int64_t value);
#define set_str(c) set_str_cb(#c,c)
#define set_sint64(c) set_sint64_cb(#c,c)
void
constant_export(set_str_t set_str_cb, set_sint64_t set_sint64_cb)
{
set_sint64(UV_VERSION_MAJOR);
set_sint64(UV_VERSION_MINOR);
set_sint64(UV_VERSION_PATCH);
set_sint64(UV_VERSION_IS_RELEASE);
set_sint64(UV_VERSION_HEX);
set_str(UV_VERSION_SUFFIX);
set_sint64(UV_E2BIG);
set_sint64(UV_EACCES);
set_sint64(UV_EADDRINUSE);
set_sint64(UV_EADDRNOTAVAIL);
set_sint64(UV_EAFNOSUPPORT);
set_sint64(UV_EAGAIN);
set_sint64(UV_EAI_ADDRFAMILY);
set_sint64(UV_EAI_AGAIN);
set_sint64(UV_EAI_BADFLAGS);
set_sint64(UV_EAI_BADHINTS);
set_sint64(UV_EAI_CANCELED);
set_sint64(UV_EAI_FAIL);
set_sint64(UV_EAI_FAMILY);
set_sint64(UV_EAI_MEMORY);
set_sint64(UV_EAI_NODATA);
set_sint64(UV_EAI_NONAME);
set_sint64(UV_EAI_OVERFLOW);
set_sint64(UV_EAI_PROTOCOL);
set_sint64(UV_EAI_SERVICE);
set_sint64(UV_EAI_SOCKTYPE);
set_sint64(UV_EALREADY);
set_sint64(UV_EBADF);
set_sint64(UV_EBUSY);
set_sint64(UV_ECANCELED);
set_sint64(UV_ECHARSET);
set_sint64(UV_ECONNABORTED);
set_sint64(UV_ECONNREFUSED);
set_sint64(UV_ECONNRESET);
set_sint64(UV_EDESTADDRREQ);
set_sint64(UV_EEXIST);
set_sint64(UV_EFAULT);
set_sint64(UV_EFBIG);
set_sint64(UV_EHOSTUNREACH);
set_sint64(UV_EINTR);
set_sint64(UV_EINVAL);
set_sint64(UV_EIO);
set_sint64(UV_EISCONN);
set_sint64(UV_EISDIR);
set_sint64(UV_ELOOP);
set_sint64(UV_EMFILE);
set_sint64(UV_EMSGSIZE);
set_sint64(UV_ENAMETOOLONG);
set_sint64(UV_ENETDOWN);
set_sint64(UV_ENETUNREACH);
set_sint64(UV_ENFILE);
set_sint64(UV_ENOBUFS);
set_sint64(UV_ENODEV);
set_sint64(UV_ENOENT);
set_sint64(UV_ENOMEM);
set_sint64(UV_ENONET);
set_sint64(UV_ENOPROTOOPT);
set_sint64(UV_ENOSPC);
set_sint64(UV_ENOSYS);
set_sint64(UV_ENOTCONN);
set_sint64(UV_ENOTDIR);
set_sint64(UV_ENOTEMPTY);
set_sint64(UV_ENOTSOCK);
set_sint64(UV_ENOTSUP);
set_sint64(UV_EPERM);
set_sint64(UV_EPIPE);
set_sint64(UV_EPROTO);
set_sint64(UV_EPROTONOSUPPORT);
set_sint64(UV_EPROTOTYPE);
set_sint64(UV_ERANGE);
set_sint64(UV_EROFS);
set_sint64(UV_ESHUTDOWN);
set_sint64(UV_ESPIPE);
set_sint64(UV_ESRCH);
set_sint64(UV_ETIMEDOUT);
set_sint64(UV_ETXTBSY);
set_sint64(UV_EXDEV);
set_sint64(UV_UNKNOWN);
set_sint64(UV_EOF);
set_sint64(UV_ENXIO);
set_sint64(UV_EMLINK);
set_sint64(UV_ASYNC);
set_sint64(UV_CHECK);
set_sint64(UV_FS_EVENT);
set_sint64(UV_FS_POLL);
set_sint64(UV_IDLE);
set_sint64(UV_NAMED_PIPE);
set_sint64(UV_POLL);
set_sint64(UV_PREPARE);
set_sint64(UV_PROCESS);
set_sint64(UV_STREAM);
set_sint64(UV_TCP);
set_sint64(UV_TIMER);
set_sint64(UV_TTY);
set_sint64(UV_UDP);
set_sint64(UV_SIGNAL);
set_sint64(UV_FILE);
/* Loop run constants */
set_sint64(UV_RUN_DEFAULT);
set_sint64(UV_RUN_ONCE);
set_sint64(UV_RUN_NOWAIT);
/* expose the Loop configure constants */
set_sint64(UV_LOOP_BLOCK_SIGNAL);
set_sint64(SIGPROF);
/* Poll Event Types */
set_sint64(UV_READABLE);
set_sint64(UV_WRITABLE);
set_sint64(UV_DISCONNECT);
set_sint64(UV_PRIORITIZED);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment