The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#include "perl_sysfs.h"

MODULE = Linux::Sysfs::Module	PACKAGE = Linux::Sysfs::Module

struct sysfs_module*
open(class, name)
		const char* name
	CODE:
		RETVAL = sysfs_open_module(name);
	OUTPUT:
		RETVAL

struct sysfs_module*
open_path(class, path)
		const char* path
	CODE:
		RETVAL = sysfs_open_module_path(path);
	OUTPUT:
		RETVAL

void
close(module)
		struct sysfs_module* module
	CODE:
		sysfs_close_module(module);

void
get_parms(module)
		struct sysfs_module* module
	PREINIT:
		struct dlist* parms_list = NULL;
		struct sysfs_attribute* parm = NULL;
	PPCODE:
		parms_list = sysfs_get_module_parms(module);

		if (parms_list == NULL)
			XSRETURN_EMPTY;

		EXTEND(SP, parms_list->count);
		dlist_for_each_data(parms_list, parm, struct sysfs_attribute) {
			PUSHs(sv_2mortal( perl_sysfs_new_sv_from_ptr(parm, "Linux::Sysfs::Attribute") ));
		}

void
get_sections(module)
		struct sysfs_module* module
	PREINIT:
		struct dlist* sections_list = NULL;
		struct sysfs_attribute* section = NULL;
	PPCODE:
		sections_list = sysfs_get_module_sections(module);

		if (sections_list == NULL)
			XSRETURN_EMPTY;

		EXTEND(SP, sections_list->count);
		dlist_for_each_data(sections_list, section, struct sysfs_attribute) {
			PUSHs(sv_2mortal( perl_sysfs_new_sv_from_ptr(section, "Linux::Sysfs::Attribute") ));
		}

void
get_attributes(module)
		struct sysfs_module* module
	ALIAS:
		get_attrs = 1
	PREINIT:
		struct dlist* attr_list = NULL;
		struct sysfs_attribute* attr = NULL;
	PPCODE:
		PERL_UNUSED_VAR(ix);
		attr_list = sysfs_get_module_attributes(module);

		if (attr_list == NULL)
			XSRETURN_EMPTY;

		EXTEND(SP, attr_list->count);
		dlist_for_each_data(attr_list, attr, struct sysfs_attribute) {
			PUSHs(sv_2mortal( perl_sysfs_new_sv_from_ptr(attr, "Linux::Sysfs::Attribute") ));
		}

struct sysfs_attribute*
get_attribute(module, name)
		struct sysfs_module* module
		const char* name
	ALIAS:
		get_attr = 1
	CODE:
		PERL_UNUSED_VAR(ix);
		RETVAL = sysfs_get_module_attr(module, name);
	OUTPUT:
		RETVAL


struct sysfs_attribute*
get_parm(module, parm)
		struct sysfs_module* module
		const char* parm
	CODE:
		RETVAL = sysfs_get_module_parm(module, parm);
	OUTPUT:
		RETVAL

struct sysfs_attribute*
get_section(module, section)
		struct sysfs_module* module
		const char* section
	CODE:
		RETVAL = sysfs_get_module_section(module, section);
	OUTPUT:
		RETVAL

char*
name(module)
		struct sysfs_module* module
	CODE:
		RETVAL = module->name;
	OUTPUT:
		RETVAL

char*
path(module)
		struct sysfs_module* module
	CODE:
		RETVAL = module->path;
	OUTPUT:
		RETVAL