Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
HQUERY(3)		   libdill Library Functions		     HQUERY(3)

NAME
       hquery -	gets an	opaque pointer associated with a handle	and a type

SYNOPSIS
	      #include <libdillimpl.h>

	      void* hquery(
		  int h,
		  const	char* type);

DESCRIPTION
       Returns	an  opaque pointer associated with the passed handle and type.
       This function is	a fundamental construct	for building APIs  on  top  of
       handles.

       The type	argument is not	interpreted in any way.	 It is used only as an
       unique ID.  A unique ID can be created, for instance, like this:

	      int foobar_placeholder = 0;
	      const void *foobar_type =	&foobar_placeholder;

       The  return value has no	specified semantics.  It is an opaque pointer.
       One typical use case for	it is to return	a pointer to a table of	 func-
       tion  pointers.	These function pointers	can then be used to access the
       handle's	functionality (see the example).

       Pointers	returned by hquery are meant to	be cachable.  In other	words,
       if  you	call  hquery  on  the  same handle with	the same type multiple
       times, the result should	be the same.

       h: The handle.

       type: The opaque	ID of the queried type.

RETURN VALUE
       In case of success the function returns opaque pointer.	In case	of er-
       ror it returns NULL and sets errno to one of the	values below.

ERRORS
        EBADF:	Invalid	handle.

EXAMPLE
	      struct quux_vfs {
		  int (*foo)(struct quux_vfs *vfs, int a, int b);
		  void (*bar)(struct quux_vfs *vfs, char *c);
	      };

	      int quux_foo(int h, int a, int b)	{
		  struct foobar_vfs *vfs = hquery(h, foobar_type);
		  if(!vfs) return -1;
		  return vfs->foo(vfs, a, b);
	      }

	      void quux_bar(int	h, char	*c) {
		  struct foobar_vfs *vfs = hquery(h, foobar_type);
		  if(!vfs) return -1;
		  vfs->bar(vfs,	c);
	      }

SEE ALSO
       hclose(3) hmake(3) hown(3)

libdill								     HQUERY(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=hquery&sektion=3&manpath=FreeBSD+Ports+15.0>

home | help