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::Bus	PACKAGE = Linux::Sysfs::Bus

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

void
close(bus)
		struct sysfs_bus* bus
	CODE:
		sysfs_close_bus(bus);

void
get_devices(bus)
		struct sysfs_bus* bus
	PREINIT:
		struct dlist* dev_list = NULL;
		struct sysfs_device* dev = NULL;
	PPCODE:
		dev_list = sysfs_get_bus_devices(bus);

		if (dev_list == NULL)
			XSRETURN_EMPTY;

		EXTEND(SP, dev_list->count);
		dlist_for_each_data(dev_list, dev, struct sysfs_device) {
			PUSHs(sv_2mortal( perl_sysfs_new_sv_from_ptr(dev, "Linux::Sysfs::Device") ));
		}

void
get_drivers(bus)
		struct sysfs_bus* bus
	PREINIT:
		struct dlist* drv_list = NULL;
		struct sysfs_driver* drv = NULL;
	PPCODE:
		drv_list = sysfs_get_bus_drivers(bus);

		if (drv_list == NULL)
			XSRETURN_EMPTY;

		EXTEND(SP, drv_list->count);
		dlist_for_each_data(drv_list, drv, struct sysfs_driver) {
			PUSHs(sv_2mortal( perl_sysfs_new_sv_from_ptr(drv, "Linux::Sysfs::Driver") ));
		}

struct sysfs_device*
get_device(bus, id)
		struct sysfs_bus* bus
		const char* id
	CODE:
		RETVAL = sysfs_get_bus_device(bus, id);
	OUTPUT:
		RETVAL

struct sysfs_driver*
get_driver(bus, drvname)
		struct sysfs_bus* bus
		const char* drvname
	CODE:
		RETVAL = sysfs_get_bus_driver(bus, drvname);
	OUTPUT:
		RETVAL

char*
name(bus)
		struct sysfs_bus* bus
	CODE:
		RETVAL = bus->name;
	OUTPUT:
		RETVAL

char*
path(bus)
		struct sysfs_bus* bus
	CODE:
		RETVAL = bus->path;
	OUTPUT:
		RETVAL