Skip to content

GLib.PathBuf

record (struct)

GPathBuf is a helper type that allows you to easily build paths from individual elements, using the platform specific conventions for path separators.

g_auto (GPathBuf) path;

g_path_buf_init (&path);

g_path_buf_push (&path, "usr");
g_path_buf_push (&path, "bin");
g_path_buf_push (&path, "echo");

g_autofree char *echo = g_path_buf_to_path (&path);
g_assert_cmpstr (echo, ==, "/usr/bin/echo");

You can also load a full path and then operate on its components:

g_auto (GPathBuf) path;

g_path_buf_init_from_path (&path, "/usr/bin/echo");

g_path_buf_pop (&path);
g_path_buf_push (&path, "sh");

g_autofree char *sh = g_path_buf_to_path (&path);
g_assert_cmpstr (sh, ==, "/usr/bin/sh");

Methods

clear

def clear(self) -> None

Clears the contents of the path buffer.

This function should be use to free the resources in a stack-allocated GPathBuf initialized using PathBuf.init or PathBuf.init_from_path.

clear_to_path

def clear_to_path(self) -> str | None

Clears the contents of the path buffer and returns the built path.

This function returns NULL if the GPathBuf is empty.

See also: PathBuf.to_path

free

def free(self) -> None

Frees a GPathBuf allocated by g_path_buf_new().

free_to_path

def free_to_path(self) -> str | None

Frees a GPathBuf allocated by g_path_buf_new(), and returns the path inside the buffer.

This function returns NULL if the GPathBuf is empty.

See also: PathBuf.to_path

init

def init(self) -> PathBuf

Initializes a GPathBuf instance.

init_from_path

def init_from_path(self, path: str | bytes | os.PathLike[str] | os.PathLike[bytes] | None = ...) -> PathBuf

Initializes a GPathBuf instance with the given path.

Parameters:

  • path — a file system path

pop

def pop(self) -> bool

Removes the last element of the path buffer.

If there is only one element in the path buffer (for example, / on Unix-like operating systems or the drive on Windows systems), it will not be removed and False will be returned instead.

GPathBuf buf, cmp;

g_path_buf_init_from_path (&buf, "/bin/sh");

g_path_buf_pop (&buf);
g_path_buf_init_from_path (&cmp, "/bin");
g_assert_true (g_path_buf_equal (&buf, &cmp));
g_path_buf_clear (&cmp);

g_path_buf_pop (&buf);
g_path_buf_init_from_path (&cmp, "/");
g_assert_true (g_path_buf_equal (&buf, &cmp));
g_path_buf_clear (&cmp);

g_path_buf_clear (&buf);

push

def push(self, path: str | bytes | os.PathLike[str] | os.PathLike[bytes]) -> PathBuf

Extends the given path buffer with path.

If path is absolute, it replaces the current path.

If path contains a directory separator, the buffer is extended by as many elements the path provides.

On Windows, both forward slashes and backslashes are treated as directory separators. On other platforms, DIR_SEPARATOR_S is the only directory separator.

GPathBuf buf, cmp;

g_path_buf_init_from_path (&buf, "/tmp");
g_path_buf_push (&buf, ".X11-unix/X0");
g_path_buf_init_from_path (&cmp, "/tmp/.X11-unix/X0");
g_assert_true (g_path_buf_equal (&buf, &cmp));
g_path_buf_clear (&cmp);

g_path_buf_push (&buf, "/etc/locale.conf");
g_path_buf_init_from_path (&cmp, "/etc/locale.conf");
g_assert_true (g_path_buf_equal (&buf, &cmp));
g_path_buf_clear (&cmp);

g_path_buf_clear (&buf);

Parameters:

  • path — a path

set_extension

def set_extension(self, extension: str | bytes | os.PathLike[str] | os.PathLike[bytes] | None = ...) -> bool

Adds an extension to the file name in the path buffer.

If extension is NULL, the extension will be unset.

If the path buffer does not have a file name set, this function returns FALSE and leaves the path buffer unmodified.

Parameters:

  • extension — the file extension

set_filename

def set_filename(self, file_name: str | bytes | os.PathLike[str] | os.PathLike[bytes]) -> bool

Sets the file name of the path.

If the path buffer is empty, the filename is left unset and this function returns FALSE.

If the path buffer only contains the root element (on Unix-like operating systems) or the drive (on Windows), this is the equivalent of pushing the new file_name.

If the path buffer contains a path, this is the equivalent of popping the path buffer and pushing file_name, creating a sibling of the original path.

GPathBuf buf, cmp;

g_path_buf_init_from_path (&buf, "/");

g_path_buf_set_filename (&buf, "bar");
g_path_buf_init_from_path (&cmp, "/bar");
g_assert_true (g_path_buf_equal (&buf, &cmp));
g_path_buf_clear (&cmp);

g_path_buf_set_filename (&buf, "baz.txt");
g_path_buf_init_from_path (&cmp, "/baz.txt");
g_assert_true (g_path_buf_equal (&buf, &cmp);
g_path_buf_clear (&cmp);

g_path_buf_clear (&buf);

Parameters:

  • file_name — the file name in the path

to_path

def to_path(self) -> str | None

Retrieves the built path from the path buffer.

On Windows, the result contains backslashes as directory separators, even if forward slashes were used in input.

If the path buffer is empty, this function returns NULL.

Static functions

equal

@staticmethod
def equal(v1: int, v2: int) -> bool

Compares two path buffers for equality and returns TRUE if they are equal.

The paths inside the path buffers are not going to be normalized, so X/Y/Z/A/.., X/./Y/Z and X/Y/Z are not going to be considered equal.

This function can be passed to g_hash_table_new() as the key_equal_func parameter.

Parameters:

  • v1 — a path buffer to compare
  • v2 — a path buffer to compare

Properties

dummy

dummy: list[int]  # read/write