What

LibGSystem is a GIO-based library, targeted primarily for use by operating system components.

It is on track to being deprecated; some of its components have moved into GLib (the cleanup macros and subprocess). Other Linux-specific parts will move into a to-be-created git submodule (likely "libgsystem2").

Old Description

It has a few goals:

  • Provide macros for the GCC attribute(cleanup) that work with GLib data types. Using these can dramatically simplify local memory management inside functions.

  • Prototype and test APIs that will eventually be in GLib. Currently these include "GSSubprocess" for launching child processes, and some GFile helpers.
  • Provide Linux-specific APIs in a nicer GLib fashion, such as O_NOATIME.

Requirements

  • gio-unix-2.0 (libgsystem will not build on Windows)

  • GCC or CLang (the known compilers implementing attribute(cleanup)); compilers which are known to currently NOT implement this are MSVC and Sun Studio.

How

Libgsystem used to be a git submodule. If you are still using it this way, you can follow the submodule branch. To use it that way, see Projects/LibGSystem/SubmoduleInstructions.

Example users

OSTree

attribute(cleanup) macros

These macros allow automatically performing an unref/free on GLib data types when a variable goes out of scope. They're based on the GCC attribute(cleanup). See GCC manual, this post to gtk-devel-list, networkmanager-devel discussion.

Example:

static void
print_yes_if_file_exists (GFile *path)
{
  gs_unref_object GFileInfo *fileinfo = NULL;

  fileinfo = g_file_query_info (path, "standard::*", 0, NULL, NULL);
  if (!fileinfo)
    return; /* fileinfo is automatically unreffed here */
  g_print ("yes\n");
  /* fileinfo is automatically unreffed here */
}

GLib utility API

libgsystem includes at present high level file helpers, subprocess launching, and more.

Linux-specific APIs

While GLib transparently takes advantage of Linux features in may cases, not all APIs are wrapped nicely. An example API that libgsystem provides is reading a file with O_NOATIME.

Projects/LibGSystem (last edited 2015-02-12 23:49:14 by walters)