mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-02-27 20:52:12 +01:00
GMappedFile: return an error when trying to map a device
Previously, we were returning an empty buffer for all filenames where fstat() gives a size of 0. But this is only appropriate for regular files. Also improve the documentation around this issue. Based on a patch by Ryan Lortie. Conflicts: glib/tests/mappedfile.c https://bugzilla.gnome.org/show_bug.cgi?id=659212
This commit is contained in:
parent
b83e0a39fb
commit
f18eab2ac7
@ -80,8 +80,8 @@ differences in when a system will report a given error, etc.
|
|||||||
couldn't find the device. This can mean that the device file was
|
couldn't find the device. This can mean that the device file was
|
||||||
installed incorrectly, or that the physical device is missing or
|
installed incorrectly, or that the physical device is missing or
|
||||||
not correctly attached to the computer.
|
not correctly attached to the computer.
|
||||||
@G_FILE_ERROR_NODEV: This file is of a type that doesn't support
|
@G_FILE_ERROR_NODEV: The underlying file system of the specified file
|
||||||
mapping.
|
does not support memory mapping.
|
||||||
@G_FILE_ERROR_ROFS: The directory containing the new link can't be
|
@G_FILE_ERROR_ROFS: The directory containing the new link can't be
|
||||||
modified because it's on a read-only file system.
|
modified because it's on a read-only file system.
|
||||||
@G_FILE_ERROR_TXTBSY: Text file busy.
|
@G_FILE_ERROR_TXTBSY: Text file busy.
|
||||||
|
@ -112,14 +112,19 @@ g_mapped_file_destroy (GMappedFile *file)
|
|||||||
* Maps a file into memory. On UNIX, this is using the mmap() function.
|
* Maps a file into memory. On UNIX, this is using the mmap() function.
|
||||||
*
|
*
|
||||||
* If @writable is %TRUE, the mapped buffer may be modified, otherwise
|
* If @writable is %TRUE, the mapped buffer may be modified, otherwise
|
||||||
* it is an error to modify the mapped buffer. Modifications to the buffer
|
* it is an error to modify the mapped buffer. Modifications to the buffer
|
||||||
* are not visible to other processes mapping the same file, and are not
|
* are not visible to other processes mapping the same file, and are not
|
||||||
* written back to the file.
|
* written back to the file.
|
||||||
*
|
*
|
||||||
* Note that modifications of the underlying file might affect the contents
|
* Note that modifications of the underlying file might affect the contents
|
||||||
* of the #GMappedFile. Therefore, mapping should only be used if the file
|
* of the #GMappedFile. Therefore, mapping should only be used if the file
|
||||||
* will not be modified, or if all modifications of the file are done
|
* will not be modified, or if all modifications of the file are done
|
||||||
* atomically (e.g. using g_file_set_contents()).
|
* atomically (e.g. using g_file_set_contents()).
|
||||||
|
*
|
||||||
|
* If @filename is the name of an empty, regular file, the function
|
||||||
|
* will successfully return an empty #GMappedFile. In other cases of
|
||||||
|
* size 0 (e.g. device files such as /dev/null), @error will be set
|
||||||
|
* to the #GFileError value #G_FILE_ERROR_INVAL.
|
||||||
*
|
*
|
||||||
* Return value: a newly allocated #GMappedFile which must be unref'd
|
* Return value: a newly allocated #GMappedFile which must be unref'd
|
||||||
* with g_mapped_file_unref(), or %NULL if the mapping failed.
|
* with g_mapped_file_unref(), or %NULL if the mapping failed.
|
||||||
|
@ -36,6 +36,18 @@ test_empty (void)
|
|||||||
g_mapped_file_free (file);
|
g_mapped_file_free (file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_device (void)
|
||||||
|
{
|
||||||
|
GError *error = NULL;
|
||||||
|
GMappedFile *file;
|
||||||
|
|
||||||
|
file = g_mapped_file_new ("/dev/null", FALSE, &error);
|
||||||
|
g_assert_error (error, G_FILE_ERROR, G_FILE_ERROR_INVAL);
|
||||||
|
g_assert (file == NULL);
|
||||||
|
g_error_free (error);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
test_nonexisting (void)
|
test_nonexisting (void)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user