1
0
mirror of https://gitlab.gnome.org/GNOME/glib.git synced 2025-08-27 11:29:02 +02:00
Files
.gitlab-ci
.reuse
LICENSES
docs
fuzzing
gio
completion
gdbus-2.0
inotify
kqueue
tests
cert-tests
de
desktop-files
gdbus-object-manager-example
modules
schema-tests
services
static-link
thumbnails
x-content
111_digit_test.gresource.xml
actions.c
appinfo-test-actions.desktop
appinfo-test-gnome.desktop.in
appinfo-test-notgnome.desktop.in
appinfo-test-path.desktop.in
appinfo-test-static.desktop
appinfo-test.c
appinfo-test.desktop.in
appinfo-test2.desktop.in
appinfo.c
application-command-line.c
appmonitor.c
apps.c
async-close-output-stream.c
async-splice-output-stream.c
autoptr.c
basic-application.c
buffered-input-stream.c
buffered-output-stream.c
cancellable.c
codegen.py
contenttype.c
contexts.c
converter-stream.c
converter.c
credentials.c
cxx.cpp
data-input-stream.c
data-output-stream.c
dbus-appinfo.c
dbus-launch.c
de.po
debugcontroller.c
defaultvalue.c
desktop-app-info.c
echo-server.c
empty.txt
enums.xml.template
error.c
fake-desktop-portal.c
fake-desktop-portal.h
fake-document-portal.c
fake-document-portal.h
fake-service-name.c
fdo-notification-backend.c
file-thumbnail.c
file.c
fileattributematcher.c
filter-cat.c
filter-streams.c
g-file-info-filesystem-readonly.c
g-file-info.c
g-file.c
g-icon.c
gapplication-example-actions.c
gapplication-example-cmdline.c
gapplication-example-cmdline2.c
gapplication-example-cmdline3.c
gapplication-example-cmdline4.c
gapplication-example-dbushooks.c
gapplication-example-open.c
gapplication.c
gdbus-address-get-session.c
gdbus-addresses.c
gdbus-auth.c
gdbus-bz627724.c
gdbus-close-pending.c
gdbus-connection-flush-helper.c
gdbus-connection-flush.c
gdbus-connection-loss.c
gdbus-connection-slow.c
gdbus-connection.c
gdbus-daemon.c
gdbus-error.c
gdbus-example-export.c
gdbus-example-objectmanager-client.c
gdbus-example-objectmanager-server.c
gdbus-example-own-name.c
gdbus-example-peer.c
gdbus-example-proxy-subclass.c
gdbus-example-server.c
gdbus-example-subtree.c
gdbus-example-unix-fd-client.c
gdbus-example-watch-name.c
gdbus-example-watch-proxy.c
gdbus-exit-on-close.c
gdbus-export.c
gdbus-introspection.c
gdbus-message.c
gdbus-method-invocation.c
gdbus-names.c
gdbus-non-socket.c
gdbus-overflow.c
gdbus-peer-object-manager.c
gdbus-peer.c
gdbus-proxy-threads.c
gdbus-proxy-unique-name.c
gdbus-proxy-well-known-name.c
gdbus-proxy.c
gdbus-sasl.c
gdbus-serialization.c
gdbus-server-auth.c
gdbus-sessionbus.c
gdbus-sessionbus.h
gdbus-subscribe.c
gdbus-test-codegen.c
gdbus-test-fixture.c
gdbus-tests.c
gdbus-tests.h
gdbus-testserver.c
gdbus-threading.c
gen-big-test-resource.py
gengiotypefuncs.py
gio-du.c
gio-tool.py
giomodule.c
glistmodel.c
gmenumodel.c
gnotification-server.c
gnotification-server.h
gnotification.c
gschema-compile.c
gsettings.c
gsocketclient-slow.c
gsubprocess-testprog.c
gsubprocess.c
gtesttlsbackend.c
gtesttlsbackend.h
gtlsconsoleinteraction.c
gtlsconsoleinteraction.h
httpd.c
inet-address.c
io-stream.c
live-g-file.c
live-g-file.txt
max-version.c
memory-input-stream.c
memory-monitor-dbus.py.in
memory-monitor-portal.py.in
memory-monitor.c
memory-output-stream.c
memory-settings-backend.c
meson.build
mimeapps.c
mock-resolver.c
mock-resolver.h
mount-operation.c
network-address.c
network-monitor-race.c
network-monitor.c
null-settings-backend.c
org.gtk.schemasourcecheck.gschema.xml
org.gtk.test.dbusappinfo.desktop
org.gtk.test.dbusappinfo.flatpak.desktop
org.gtk.test.gschema.override.orig
org.gtk.test.gschema.xml.orig
osx-appinfo.c
permission.c
pollable.c
portal-support-env-var.c
portal-support-flatpak-full.c
portal-support-flatpak-gsettings-only.c
portal-support-flatpak-network-only.c
portal-support-flatpak-none.c
portal-support-none.c
portal-support-snap-classic.c
portal-support-snap.c
portal-support-utils.c
portal-support-utils.h
power-profile-monitor-dbus.py.in
power-profile-monitor-portal.py.in
power-profile-monitor.c
proxy-test.c
proxy.c
readwrite.c
resolver-parsing.c
resolver.c
resourceplugin.c
resources.c
sandbox.c
send-data.c
simple-async-result.c
simple-proxy.c
sleepy-stream.c
slow-connect-preload.c
socket-address.c
socket-common.c
socket-listener.c
socket-service.c
socket-testclient.c
socket-testserver.c
socket.c
srvtarget.c
static-link.py
stream-rw_all.c
taptestrunner.py
task.c
test-codegen.xml
test-io-stream.c
test-io-stream.h
test-pipe-unix.c
test-pipe-unix.h
test.gresource.xml
test1.overlay
test1.txt
test2.gresource.xml
test2.txt
test3.gresource.xml
test3.txt
test4.gresource.xml
test5.gresource.xml
test6.gresource.xml
testenum.h
testfilemonitor.c
thumbnail-verification.c
tls-bindings.c
tls-certificate.c
tls-database.c
tls-interaction.c
trash.c
unix-fd.c
unix-mounts.c
unix-streams.c
vfs.c
volumemonitor.c
win32-appinfo.c
win32-streams.c
win32
xdgmime
data-to-c.py
dbus-daemon.xml
gaction.c
gaction.h
gactiongroup.c
gactiongroup.h
gactiongroupexporter.c
gactiongroupexporter.h
gactionmap.c
gactionmap.h
gappinfo.c
gappinfo.h
gappinfoprivate.h
gapplication-tool.c
gapplication.c
gapplication.h
gapplicationcommandline.c
gapplicationcommandline.h
gapplicationimpl-dbus.c
gapplicationimpl.h
gasynchelper.c
gasynchelper.h
gasyncinitable.c
gasyncinitable.h
gasyncresult.c
gasyncresult.h
gbufferedinputstream.c
gbufferedinputstream.h
gbufferedoutputstream.c
gbufferedoutputstream.h
gbytesicon.c
gbytesicon.h
gcancellable.c
gcancellable.h
gcharsetconverter.c
gcharsetconverter.h
gcocoanotificationbackend.m
gcontenttype-fdo.c
gcontenttype-osx.m
gcontenttype-win32.c
gcontenttype.c
gcontenttype.h
gcontenttypeprivate.h
gcontextspecificgroup.c
gcontextspecificgroup.h
gconverter.c
gconverter.h
gconverterinputstream.c
gconverterinputstream.h
gconverteroutputstream.c
gconverteroutputstream.h
gcredentials.c
gcredentials.h
gcredentialsprivate.h
gdatagrambased.c
gdatagrambased.h
gdatainputstream.c
gdatainputstream.h
gdataoutputstream.c
gdataoutputstream.h
gdbus-tool.c
gdbusactiongroup-private.h
gdbusactiongroup.c
gdbusactiongroup.h
gdbusaddress.c
gdbusaddress.h
gdbusauth.c
gdbusauth.h
gdbusauthmechanism.c
gdbusauthmechanism.h
gdbusauthmechanismanon.c
gdbusauthmechanismanon.h
gdbusauthmechanismexternal.c
gdbusauthmechanismexternal.h
gdbusauthmechanismsha1.c
gdbusauthmechanismsha1.h
gdbusauthobserver.c
gdbusauthobserver.h
gdbusconnection.c
gdbusconnection.h
gdbusdaemon.c
gdbusdaemon.h
gdbuserror.c
gdbuserror.h
gdbusinterface.c
gdbusinterface.h
gdbusinterfaceskeleton.c
gdbusinterfaceskeleton.h
gdbusintrospection.c
gdbusintrospection.h
gdbusmenumodel.c
gdbusmenumodel.h
gdbusmessage.c
gdbusmessage.h
gdbusmethodinvocation.c
gdbusmethodinvocation.h
gdbusnameowning.c
gdbusnameowning.h
gdbusnamewatching.c
gdbusnamewatching.h
gdbusobject.c
gdbusobject.h
gdbusobjectmanager.c
gdbusobjectmanager.h
gdbusobjectmanagerclient.c
gdbusobjectmanagerclient.h
gdbusobjectmanagerserver.c
gdbusobjectmanagerserver.h
gdbusobjectproxy.c
gdbusobjectproxy.h
gdbusobjectskeleton.c
gdbusobjectskeleton.h
gdbusprivate.c
gdbusprivate.h
gdbusproxy.c
gdbusproxy.h
gdbusserver.c
gdbusserver.h
gdbusutils.c
gdbusutils.h
gdebugcontroller.c
gdebugcontroller.h
gdebugcontrollerdbus.c
gdebugcontrollerdbus.h
gdelayedsettingsbackend.c
gdelayedsettingsbackend.h
gdesktopappinfo.c
gdesktopappinfo.h
gdocumentportal.c
gdocumentportal.h
gdrive.c
gdrive.h
gdtlsclientconnection.c
gdtlsclientconnection.h
gdtlsconnection.c
gdtlsconnection.h
gdtlsserverconnection.c
gdtlsserverconnection.h
gdummyfile.c
gdummyfile.h
gdummyproxyresolver.c
gdummyproxyresolver.h
gdummytlsbackend.c
gdummytlsbackend.h
gemblem.c
gemblem.h
gemblemedicon.c
gemblemedicon.h
gfdonotificationbackend.c
gfile.c
gfile.h
gfileattribute-priv.h
gfileattribute.c
gfileattribute.h
gfiledescriptorbased.c
gfiledescriptorbased.h
gfileenumerator.c
gfileenumerator.h
gfileicon.c
gfileicon.h
gfileinfo-priv.h
gfileinfo.c
gfileinfo.h
gfileinputstream.c
gfileinputstream.h
gfileiostream.c
gfileiostream.h
gfilemonitor.c
gfilemonitor.h
gfilenamecompleter.c
gfilenamecompleter.h
gfileoutputstream.c
gfileoutputstream.h
gfilterinputstream.c
gfilterinputstream.h
gfilteroutputstream.c
gfilteroutputstream.h
ggtknotificationbackend.c
ghttpproxy.c
ghttpproxy.h
gicon.c
gicon.h
ginetaddress.c
ginetaddress.h
ginetaddressmask.c
ginetaddressmask.h
ginetsocketaddress.c
ginetsocketaddress.h
ginitable.c
ginitable.h
ginputstream.c
ginputstream.h
gio-autocleanups.h
gio-launch-desktop.c
gio-querymodules.c
gio-tool-cat.c
gio-tool-copy.c
gio-tool-info.c
gio-tool-launch.c
gio-tool-list.c
gio-tool-mime.c
gio-tool-mkdir.c
gio-tool-monitor.c
gio-tool-mount.c
gio-tool-move.c
gio-tool-open.c
gio-tool-remove.c
gio-tool-rename.c
gio-tool-save.c
gio-tool-set.c
gio-tool-trash.c
gio-tool-tree.c
gio-tool.c
gio-tool.h
gio.h
gio.rc.in
gio.stp.in
gio_probes.d
gio_trace.h
gioenums.h
gioenumtypes.c.template
gioenumtypes.h.template
gioerror.c
gioerror.h
giomodule-priv.c
giomodule-priv.h
giomodule.c
giomodule.h
gioprivate.h
gioscheduler.c
gioscheduler.h
giostream.c
giostream.h
giotypes.h
giounix-private.c
giounix-private.h
giowin32-afunix.h
giowin32-priv.h
giowin32-private.c
gkeyfilesettingsbackend.c
glib-compile-resources.c
glib-compile-schemas.c
glistmodel.c
glistmodel.h
gliststore.c
gliststore.h
gloadableicon.c
gloadableicon.h
glocalfile.c
glocalfile.h
glocalfileenumerator.c
glocalfileenumerator.h
glocalfileinfo.c
glocalfileinfo.h
glocalfileinputstream.c
glocalfileinputstream.h
glocalfileiostream.c
glocalfileiostream.h
glocalfilemonitor.c
glocalfilemonitor.h
glocalfileoutputstream.c
glocalfileoutputstream.h
glocalvfs.c
glocalvfs.h
gmarshal-internal.c
gmarshal-internal.h
gmarshal-internal.list
gmemoryinputstream.c
gmemoryinputstream.h
gmemorymonitor.c
gmemorymonitor.h
gmemorymonitordbus.c
gmemorymonitordbus.h
gmemorymonitorportal.c
gmemorymonitorportal.h
gmemorymonitorwin32.c
gmemoryoutputstream.c
gmemoryoutputstream.h
gmemorysettingsbackend.c
gmenu.c
gmenu.h
gmenuexporter.c
gmenuexporter.h
gmenumodel.c
gmenumodel.h
gmount.c
gmount.h
gmountoperation.c
gmountoperation.h
gmountprivate.h
gnativesocketaddress.c
gnativesocketaddress.h
gnativevolumemonitor.c
gnativevolumemonitor.h
gnetworkaddress.c
gnetworkaddress.h
gnetworking.c
gnetworking.h.in
gnetworkingprivate.h
gnetworkmonitor.c
gnetworkmonitor.h
gnetworkmonitorbase.c
gnetworkmonitorbase.h
gnetworkmonitornetlink.c
gnetworkmonitornetlink.h
gnetworkmonitornm.c
gnetworkmonitornm.h
gnetworkmonitorportal.c
gnetworkmonitorportal.h
gnetworkservice.c
gnetworkservice.h
gnextstepsettingsbackend.m
gnotification-private.h
gnotification.c
gnotification.h
gnotificationbackend.c
gnotificationbackend.h
gnullsettingsbackend.c
gopenuriportal.c
gopenuriportal.h
gosxappinfo.h
gosxappinfo.m
gosxnetworkmonitor.c
gosxnetworkmonitor.h
goutputstream.c
goutputstream.h
gpermission.c
gpermission.h
gpollableinputstream.c
gpollableinputstream.h
gpollableoutputstream.c
gpollableoutputstream.h
gpollableutils.c
gpollableutils.h
gpollfilemonitor.c
gpollfilemonitor.h
gportalnotificationbackend.c
gportalsupport.c
gportalsupport.h
gpowerprofilemonitor.c
gpowerprofilemonitor.h
gpowerprofilemonitordbus.c
gpowerprofilemonitordbus.h
gpowerprofilemonitorportal.c
gpowerprofilemonitorportal.h
gpropertyaction.c
gpropertyaction.h
gproxy.c
gproxy.h
gproxyaddress.c
gproxyaddress.h
gproxyaddressenumerator.c
gproxyaddressenumerator.h
gproxyresolver.c
gproxyresolver.h
gproxyresolverportal.c
gproxyresolverportal.h
gregistrysettingsbackend.c
gregistrysettingsbackend.h
gremoteactiongroup.c
gremoteactiongroup.h
gresolver.c
gresolver.h
gresource-tool.c
gresource.c
gresource.dtd
gresource.h
gresourcefile.c
gresourcefile.h
gsandbox.c
gsandbox.h
gschema.dtd
gschema.its
gschema.loc
gseekable.c
gseekable.h
gsettings-mapping.c
gsettings-mapping.h
gsettings-tool.c
gsettings.c
gsettings.h
gsettingsbackend.c
gsettingsbackend.h
gsettingsbackendinternal.h
gsettingsschema-internal.h
gsettingsschema.c
gsettingsschema.h
gsimpleaction.c
gsimpleaction.h
gsimpleactiongroup.c
gsimpleactiongroup.h
gsimpleasyncresult.c
gsimpleasyncresult.h
gsimpleiostream.c
gsimpleiostream.h
gsimplepermission.c
gsimplepermission.h
gsimpleproxyresolver.c
gsimpleproxyresolver.h
gsocket.c
gsocket.h
gsocketaddress.c
gsocketaddress.h
gsocketaddressenumerator.c
gsocketaddressenumerator.h
gsocketclient.c
gsocketclient.h
gsocketconnectable.c
gsocketconnectable.h
gsocketconnection.c
gsocketconnection.h
gsocketcontrolmessage.c
gsocketcontrolmessage.h
gsocketinputstream.c
gsocketinputstream.h
gsocketlistener.c
gsocketlistener.h
gsocketoutputstream.c
gsocketoutputstream.h
gsocketservice.c
gsocketservice.h
gsocks4aproxy.c
gsocks4aproxy.h
gsocks4proxy.c
gsocks4proxy.h
gsocks5proxy.c
gsocks5proxy.h
gsrvtarget.c
gsrvtarget.h
gsubprocess.c
gsubprocess.h
gsubprocesslauncher-private.h
gsubprocesslauncher.c
gsubprocesslauncher.h
gtask.c
gtask.h
gtcpconnection.c
gtcpconnection.h
gtcpwrapperconnection.c
gtcpwrapperconnection.h
gtestdbus.c
gtestdbus.h
gthemedicon.c
gthemedicon.h
gthreadedresolver-private.h
gthreadedresolver.c
gthreadedresolver.h
gthreadedsocketservice.c
gthreadedsocketservice.h
gtlsbackend.c
gtlsbackend.h
gtlscertificate.c
gtlscertificate.h
gtlsclientconnection.c
gtlsclientconnection.h
gtlsconnection.c
gtlsconnection.h
gtlsdatabase.c
gtlsdatabase.h
gtlsfiledatabase.c
gtlsfiledatabase.h
gtlsinteraction.c
gtlsinteraction.h
gtlspassword.c
gtlspassword.h
gtlsserverconnection.c
gtlsserverconnection.h
gtrashportal.c
gtrashportal.h
gunionvolumemonitor.c
gunionvolumemonitor.h
gunixconnection.c
gunixconnection.h
gunixcredentialsmessage.c
gunixcredentialsmessage.h
gunixfdlist.c
gunixfdlist.h
gunixfdmessage.c
gunixfdmessage.h
gunixinputstream.c
gunixinputstream.h
gunixmount.c
gunixmount.h
gunixmounts.c
gunixmounts.h
gunixoutputstream.c
gunixoutputstream.h
gunixsocketaddress.c
gunixsocketaddress.h
gunixvolume.c
gunixvolume.h
gunixvolumemonitor.c
gunixvolumemonitor.h
gvfs.c
gvfs.h
gvolume.c
gvolume.h
gvolumemonitor.c
gvolumemonitor.h
gwin32api-application-activation-manager.h
gwin32api-iterator.h
gwin32api-misc.h
gwin32api-package.h
gwin32api-storage.h
gwin32appinfo.c
gwin32appinfo.h
gwin32file-sync-stream.c
gwin32file-sync-stream.h
gwin32inputstream.c
gwin32inputstream.h
gwin32mount.c
gwin32mount.h
gwin32networkmonitor.c
gwin32networkmonitor.h
gwin32notificationbackend.c
gwin32outputstream.c
gwin32outputstream.h
gwin32packageparser.c
gwin32packageparser.h
gwin32registrykey.c
gwin32registrykey.h
gwin32sid.c
gwin32sid.h
gwin32volumemonitor.c
gwin32volumemonitor.h
gzlibcompressor.c
gzlibcompressor.h
gzlibdecompressor.c
gzlibdecompressor.h
meson.build
org.freedesktop.portal.Documents.xml
org.freedesktop.portal.OpenURI.xml
org.freedesktop.portal.ProxyResolver.xml
org.freedesktop.portal.Request.xml
org.freedesktop.portal.Trash.xml
strinfo.c
thumbnail-verify.c
thumbnail-verify.h
girepository
glib
gmodule
gobject
gthread
m4macros
po
subprojects
tests
tools
.clang-format
.dir-locals.el
.editorconfig
.gitignore
.gitlab-ci.yml
.gitmodules
.lcovrc
CODE_OF_CONDUCT.md
CONTRIBUTING.md
INSTALL.md
NEWS
README.md
SECURITY.md
glib.doap
meson.build
meson.options
glib/gio/tests/data-output-stream.c
Philip Withnall 6e362ce3b6 gio: Fix various implicit conversions from size_t to smaller types
Basically various trivial instances of the following MSVC compiler
warning:
```
../gio/gio-tool-set.c(50): warning C4267: '=': conversion from 'size_t' to 'int', possible loss of data
```

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2024-04-25 00:37:47 +01:00

517 lines
18 KiB
C

/* GLib testing framework examples and tests
* Copyright (C) 2008 Red Hat, Inc.
* Authors: Tomas Bzatek <tbzatek@redhat.com>
*
* SPDX-License-Identifier: LicenseRef-old-glib-tests
*
* This work is provided "as is"; redistribution and modification
* in whole or in part, in any medium, physical or electronic is
* permitted without restriction.
*
* This work is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
* In no event shall the authors or contributors be liable for any
* direct, indirect, incidental, special, exemplary, or consequential
* damages (including, but not limited to, procurement of substitute
* goods or services; loss of use, data, or profits; or business
* interruption) however caused and on any theory of liability, whether
* in contract, strict liability, or tort (including negligence or
* otherwise) arising in any way out of the use of this software, even
* if advised of the possibility of such damage.
*/
#include <glib/glib.h>
#include <gio/gio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINES 0xFFF
#define MAX_LINES_BUFF 0xFFFFFF
#define MAX_BYTES_BINARY 0x100
static void
test_basic (void)
{
GOutputStream *stream;
GOutputStream *base_stream;
gpointer data;
gint val;
data = g_malloc0 (MAX_LINES_BUFF);
/* initialize objects */
base_stream = g_memory_output_stream_new (data, MAX_LINES_BUFF, NULL, NULL);
stream = G_OUTPUT_STREAM (g_data_output_stream_new (base_stream));
g_object_get (stream, "byte-order", &val, NULL);
g_assert_cmpint (val, ==, G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN);
g_object_set (stream, "byte-order", G_DATA_STREAM_BYTE_ORDER_LITTLE_ENDIAN, NULL);
g_assert_cmpint (g_data_output_stream_get_byte_order (G_DATA_OUTPUT_STREAM (stream)), ==, G_DATA_STREAM_BYTE_ORDER_LITTLE_ENDIAN);
g_object_unref (stream);
g_object_unref (base_stream);
g_free (data);
}
static void
test_read_lines (GDataStreamNewlineType newline_type)
{
GOutputStream *stream;
GOutputStream *base_stream;
GError *error = NULL;
gpointer data;
char *lines;
size_t size;
int i;
#define TEST_STRING "some_text"
const char* endl[4] = {"\n", "\r", "\r\n", "\n"};
data = g_malloc0 (MAX_LINES_BUFF);
lines = g_malloc0 ((strlen (TEST_STRING) + strlen (endl[newline_type])) * MAX_LINES + 1);
/* initialize objects */
base_stream = g_memory_output_stream_new (data, MAX_LINES_BUFF, NULL, NULL);
stream = G_OUTPUT_STREAM (g_data_output_stream_new (base_stream));
/* fill data */
for (i = 0; i < MAX_LINES; i++)
{
gboolean res;
char *s = g_strconcat (TEST_STRING, endl[newline_type], NULL);
res = g_data_output_stream_put_string (G_DATA_OUTPUT_STREAM (stream), s, NULL, &error);
g_stpcpy ((char*)(lines + i*strlen(s)), s);
g_assert_no_error (error);
g_assert (res == TRUE);
g_free (s);
}
/* Byte order testing */
g_data_output_stream_set_byte_order (G_DATA_OUTPUT_STREAM (stream), G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN);
g_assert_cmpint (g_data_output_stream_get_byte_order (G_DATA_OUTPUT_STREAM (stream)), ==, G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN);
g_data_output_stream_set_byte_order (G_DATA_OUTPUT_STREAM (stream), G_DATA_STREAM_BYTE_ORDER_LITTLE_ENDIAN);
g_assert_cmpint (g_data_output_stream_get_byte_order (G_DATA_OUTPUT_STREAM (stream)), ==, G_DATA_STREAM_BYTE_ORDER_LITTLE_ENDIAN);
/* compare data */
size = strlen (data);
g_assert_cmpuint (size, <, MAX_LINES_BUFF);
g_assert_cmpstr ((char*)data, ==, lines);
g_object_unref (base_stream);
g_object_unref (stream);
g_free (data);
g_free (lines);
}
static void
test_read_lines_LF (void)
{
test_read_lines (G_DATA_STREAM_NEWLINE_TYPE_LF);
}
static void
test_read_lines_CR (void)
{
test_read_lines (G_DATA_STREAM_NEWLINE_TYPE_CR);
}
static void
test_read_lines_CR_LF (void)
{
test_read_lines (G_DATA_STREAM_NEWLINE_TYPE_CR_LF);
}
enum TestDataType {
TEST_DATA_BYTE = 0,
TEST_DATA_INT16,
TEST_DATA_UINT16,
TEST_DATA_INT32,
TEST_DATA_UINT32,
TEST_DATA_INT64,
TEST_DATA_UINT64
};
static void
test_data_array (guchar *buffer, gsize len,
enum TestDataType data_type, GDataStreamByteOrder byte_order)
{
GOutputStream *stream;
GOutputStream *base_stream;
guchar *stream_data;
GError *error = NULL;
guint pos;
GDataStreamByteOrder native;
gboolean swap;
gboolean res;
/* create objects */
stream_data = g_malloc0 (len);
base_stream = g_memory_output_stream_new (stream_data, len, NULL, NULL);
stream = G_OUTPUT_STREAM (g_data_output_stream_new (base_stream));
g_data_output_stream_set_byte_order (G_DATA_OUTPUT_STREAM (stream), byte_order);
/* Set flag to swap bytes if needed */
native = (G_BYTE_ORDER == G_BIG_ENDIAN) ? G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN : G_DATA_STREAM_BYTE_ORDER_LITTLE_ENDIAN;
swap = (byte_order != G_DATA_STREAM_BYTE_ORDER_HOST_ENDIAN) && (byte_order != native);
/* set len to length of buffer cast to actual type */
switch (data_type)
{
case TEST_DATA_BYTE:
break;
case TEST_DATA_INT16:
case TEST_DATA_UINT16:
g_assert_cmpint (len % 2, ==, 0);
G_GNUC_FALLTHROUGH;
case TEST_DATA_INT32:
case TEST_DATA_UINT32:
g_assert_cmpint (len % 4, ==, 0);
G_GNUC_FALLTHROUGH;
case TEST_DATA_INT64:
case TEST_DATA_UINT64:
g_assert_cmpint (len % 8, ==, 0);
len /= 8;
break;
default:
g_assert_not_reached ();
break;
}
/* Write data to the file */
for (pos = 0; pos < len; pos++)
{
switch (data_type)
{
case TEST_DATA_BYTE:
res = g_data_output_stream_put_byte (G_DATA_OUTPUT_STREAM (stream), buffer[pos], NULL, &error);
break;
case TEST_DATA_INT16:
res = g_data_output_stream_put_int16 (G_DATA_OUTPUT_STREAM (stream), ((gint16 *) buffer)[pos], NULL, &error);
break;
case TEST_DATA_UINT16:
res = g_data_output_stream_put_uint16 (G_DATA_OUTPUT_STREAM (stream), ((guint16 *) buffer)[pos], NULL, &error);
break;
case TEST_DATA_INT32:
res = g_data_output_stream_put_int32 (G_DATA_OUTPUT_STREAM (stream), ((gint32 *) buffer)[pos], NULL, &error);
break;
case TEST_DATA_UINT32:
res = g_data_output_stream_put_uint32 (G_DATA_OUTPUT_STREAM (stream), ((guint32 *) buffer)[pos], NULL, &error);
break;
case TEST_DATA_INT64:
res = g_data_output_stream_put_int64 (G_DATA_OUTPUT_STREAM (stream), ((gint64 *) buffer)[pos], NULL, &error);
break;
case TEST_DATA_UINT64:
res = g_data_output_stream_put_uint64 (G_DATA_OUTPUT_STREAM (stream), ((guint64 *) buffer)[pos], NULL, &error);
break;
default:
g_assert_not_reached ();
break;
}
g_assert_no_error (error);
g_assert_cmpint (res, ==, TRUE);
}
/* Compare data back */
for (pos = 0; pos < len; pos++)
{
switch (data_type)
{
case TEST_DATA_BYTE:
/* swapping unnecessary */
g_assert_cmpint (buffer[pos], ==, stream_data[pos]);
break;
case TEST_DATA_UINT16:
if (swap)
g_assert_cmpint (GUINT16_SWAP_LE_BE (((guint16 *) buffer)[pos]), ==, ((guint16 *) stream_data)[pos]);
else
g_assert_cmpint (((guint16 *) buffer)[pos], ==, ((guint16 *) stream_data)[pos]);
break;
case TEST_DATA_INT16:
if (swap)
g_assert_cmpint ((gint16) GUINT16_SWAP_LE_BE (((gint16 *) buffer)[pos]), ==, ((gint16 *) stream_data)[pos]);
else
g_assert_cmpint (((gint16 *) buffer)[pos], ==, ((gint16 *) stream_data)[pos]);
break;
case TEST_DATA_UINT32:
if (swap)
g_assert_cmpint (GUINT32_SWAP_LE_BE (((guint32 *) buffer)[pos]), ==, ((guint32 *) stream_data)[pos]);
else
g_assert_cmpint (((guint32 *) buffer)[pos], ==, ((guint32 *) stream_data)[pos]);
break;
case TEST_DATA_INT32:
if (swap)
g_assert_cmpint ((gint32) GUINT32_SWAP_LE_BE (((gint32 *) buffer)[pos]), ==, ((gint32 *) stream_data)[pos]);
else
g_assert_cmpint (((gint32 *) buffer)[pos], ==, ((gint32 *) stream_data)[pos]);
break;
case TEST_DATA_UINT64:
if (swap)
g_assert_cmpint (GUINT64_SWAP_LE_BE (((guint64 *) buffer)[pos]), ==, ((guint64 *) stream_data)[pos]);
else
g_assert_cmpint (((guint64 *) buffer)[pos], ==, ((guint64 *) stream_data)[pos]);
break;
case TEST_DATA_INT64:
if (swap)
g_assert_cmpint ((gint64) GUINT64_SWAP_LE_BE (((gint64 *) buffer)[pos]), ==, ((gint64 *) stream_data)[pos]);
else
g_assert_cmpint (((gint64 *) buffer)[pos], ==, ((gint64 *) stream_data)[pos]);
break;
default:
g_assert_not_reached ();
break;
}
}
g_object_unref (base_stream);
g_object_unref (stream);
g_free (stream_data);
}
static void
test_read_int (void)
{
GRand *randomizer;
gpointer buffer;
int i;
randomizer = g_rand_new ();
buffer = g_malloc0(MAX_BYTES_BINARY);
/* Fill in some random data */
for (i = 0; i < MAX_BYTES_BINARY; i++)
{
guchar x = 0;
while (! x) x = (guchar)g_rand_int (randomizer);
*(guchar*)((guchar*)buffer + sizeof (guchar) * i) = x;
}
for (i = 0; i < 3; i++)
{
int j;
for (j = 0; j <= TEST_DATA_UINT64; j++)
test_data_array (buffer, MAX_BYTES_BINARY, j, i);
}
g_rand_free (randomizer);
g_free (buffer);
}
static void
test_seek (void)
{
GDataOutputStream *stream;
GMemoryOutputStream *base_stream;
GSeekable *seekable;
GError *error;
guchar *stream_data;
gsize len;
gboolean res;
len = 8;
/* create objects */
stream_data = g_malloc0 (len);
base_stream = G_MEMORY_OUTPUT_STREAM (g_memory_output_stream_new (stream_data, len, NULL, NULL));
stream = g_data_output_stream_new (G_OUTPUT_STREAM (base_stream));
g_data_output_stream_set_byte_order (stream, G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN);
seekable = G_SEEKABLE (stream);
g_assert (!g_seekable_can_truncate (seekable));
error = NULL;
/* Write */
g_assert_cmpint (g_seekable_tell (seekable), ==, 0);
res = g_data_output_stream_put_uint16 (stream, 0x0123, NULL, &error);
g_assert_no_error (error);
g_assert (res);
g_data_output_stream_put_uint16 (stream, 0x4567, NULL, NULL);
g_assert_cmpint (g_seekable_tell (seekable), ==, 4);
g_assert_cmpint (stream_data[0], ==, 0x01);
g_assert_cmpint (stream_data[1], ==, 0x23);
g_assert_cmpint (stream_data[2], ==, 0x45);
g_assert_cmpint (stream_data[3], ==, 0x67);
g_assert_cmpint (g_memory_output_stream_get_data_size (base_stream), ==, 4);
/* Forward relative seek */
res = g_seekable_seek (seekable, 2, G_SEEK_CUR, NULL, &error);
g_assert_no_error (error);
g_assert (res);
g_assert_cmpint (g_seekable_tell (seekable), ==, 6);
g_assert_cmpint (g_memory_output_stream_get_data_size (base_stream), ==, 4);
res = g_data_output_stream_put_uint16 (stream, 0x89AB, NULL, &error);
g_assert (res);
g_assert_cmpint (g_seekable_tell (seekable), ==, 8);
g_assert_cmpint (g_memory_output_stream_get_data_size (base_stream), ==, 8);
g_assert_cmpint (stream_data[0], ==, 0x01);
g_assert_cmpint (stream_data[1], ==, 0x23);
g_assert_cmpint (stream_data[2], ==, 0x45);
g_assert_cmpint (stream_data[3], ==, 0x67);
g_assert_cmpint (stream_data[4], ==, 0x00);
g_assert_cmpint (stream_data[5], ==, 0x00);
g_assert_cmpint (stream_data[6], ==, 0x89);
g_assert_cmpint (stream_data[7], ==, 0xAB);
/* Backward relative seek */
res = g_seekable_seek (seekable, -3, G_SEEK_CUR, NULL, &error);
g_assert_no_error (error);
g_assert (res);
g_assert_cmpint (g_seekable_tell (seekable), ==, 5);
g_assert_cmpint (g_memory_output_stream_get_data_size (base_stream), ==, 8);
res = g_data_output_stream_put_uint16 (stream, 0xCDEF, NULL, &error);
g_assert_no_error (error);
g_assert (res);
g_assert_cmpint (g_seekable_tell (seekable), ==, 7);
g_assert_cmpint (g_memory_output_stream_get_data_size (base_stream), ==, 8);
g_assert_cmpint (stream_data[0], ==, 0x01);
g_assert_cmpint (stream_data[1], ==, 0x23);
g_assert_cmpint (stream_data[2], ==, 0x45);
g_assert_cmpint (stream_data[3], ==, 0x67);
g_assert_cmpint (stream_data[4], ==, 0x00);
g_assert_cmpint (stream_data[5], ==, 0xCD);
g_assert_cmpint (stream_data[6], ==, 0xEF);
g_assert_cmpint (stream_data[7], ==, 0xAB);
/* From start */
res = g_seekable_seek (seekable, 4, G_SEEK_SET, NULL, &error);
g_assert_no_error (error);
g_assert (res);
g_assert_cmpint (g_seekable_tell (seekable), ==, 4);
g_assert_cmpint (g_memory_output_stream_get_data_size (base_stream), ==, 8);
res = g_data_output_stream_put_uint16 (stream, 0xFEDC, NULL, &error);
g_assert_no_error (error);
g_assert (res);
g_assert_cmpint (g_seekable_tell (seekable), ==, 6);
g_assert_cmpint (g_memory_output_stream_get_data_size (base_stream), ==, 8);
g_assert_cmpint (stream_data[0], ==, 0x01);
g_assert_cmpint (stream_data[1], ==, 0x23);
g_assert_cmpint (stream_data[2], ==, 0x45);
g_assert_cmpint (stream_data[3], ==, 0x67);
g_assert_cmpint (stream_data[4], ==, 0xFE);
g_assert_cmpint (stream_data[5], ==, 0xDC);
g_assert_cmpint (stream_data[6], ==, 0xEF);
g_assert_cmpint (stream_data[7], ==, 0xAB);
/* From end */
res = g_seekable_seek (seekable, -4, G_SEEK_END, NULL, &error);
g_assert_no_error (error);
g_assert (res);
g_assert_cmpint (g_seekable_tell (seekable), ==, 4);
g_assert_cmpint (g_memory_output_stream_get_data_size (base_stream), ==, 8);
res = g_data_output_stream_put_uint16 (stream, 0xBA87, NULL, &error);
g_assert_no_error (error);
g_assert (res);
g_assert_cmpint (g_seekable_tell (seekable), ==, 6);
g_assert_cmpint (g_memory_output_stream_get_data_size (base_stream), ==, 8);
g_assert_cmpint (stream_data[0], ==, 0x01);
g_assert_cmpint (stream_data[1], ==, 0x23);
g_assert_cmpint (stream_data[2], ==, 0x45);
g_assert_cmpint (stream_data[3], ==, 0x67);
g_assert_cmpint (stream_data[4], ==, 0xBA);
g_assert_cmpint (stream_data[5], ==, 0x87);
g_assert_cmpint (stream_data[6], ==, 0xEF);
g_assert_cmpint (stream_data[7], ==, 0xAB);
g_object_unref (stream);
g_object_unref (base_stream);
g_free (stream_data);
}
static void
test_truncate (void)
{
GDataOutputStream *stream;
GMemoryOutputStream *base_stream;
GSeekable *seekable;
GError *error;
guchar *stream_data;
gsize len;
gboolean res;
len = 8;
/* Create objects */
stream_data = g_malloc0 (len);
base_stream = G_MEMORY_OUTPUT_STREAM (g_memory_output_stream_new (stream_data, len, g_realloc, g_free));
stream = g_data_output_stream_new (G_OUTPUT_STREAM (base_stream));
g_data_output_stream_set_byte_order (stream, G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN);
seekable = G_SEEKABLE (stream);
error = NULL;
g_assert (g_seekable_can_truncate (seekable));
/* Write */
g_assert_cmpint (g_memory_output_stream_get_size (base_stream), ==, len);
g_assert_cmpint (g_memory_output_stream_get_data_size (base_stream), ==, 0);
res = g_data_output_stream_put_uint16 (stream, 0x0123, NULL, &error);
g_assert_no_error (error);
g_assert (res);
res = g_data_output_stream_put_uint16 (stream, 0x4567, NULL, NULL);
g_assert_no_error (error);
g_assert (res);
g_assert_cmpint (g_memory_output_stream_get_size (base_stream), ==, len);
g_assert_cmpint (g_memory_output_stream_get_data_size (base_stream), ==, 4);
stream_data = g_memory_output_stream_get_data (base_stream);
g_assert_cmpint (stream_data[0], ==, 0x01);
g_assert_cmpint (stream_data[1], ==, 0x23);
g_assert_cmpint (stream_data[2], ==, 0x45);
g_assert_cmpint (stream_data[3], ==, 0x67);
/* Truncate at position */
res = g_seekable_truncate (seekable, 4, NULL, &error);
g_assert_no_error (error);
g_assert (res);
g_assert_cmpint (g_memory_output_stream_get_size (base_stream), ==, 4);
g_assert_cmpint (g_memory_output_stream_get_data_size (base_stream), ==, 4);
stream_data = g_memory_output_stream_get_data (base_stream);
g_assert_cmpint (stream_data[0], ==, 0x01);
g_assert_cmpint (stream_data[1], ==, 0x23);
g_assert_cmpint (stream_data[2], ==, 0x45);
g_assert_cmpint (stream_data[3], ==, 0x67);
/* Truncate beyond position */
res = g_seekable_truncate (seekable, 6, NULL, &error);
g_assert_no_error (error);
g_assert (res);
g_assert_cmpint (g_memory_output_stream_get_size (base_stream), ==, 6);
g_assert_cmpint (g_memory_output_stream_get_data_size (base_stream), ==, 6);
stream_data = g_memory_output_stream_get_data (base_stream);
g_assert_cmpint (stream_data[0], ==, 0x01);
g_assert_cmpint (stream_data[1], ==, 0x23);
g_assert_cmpint (stream_data[2], ==, 0x45);
g_assert_cmpint (stream_data[3], ==, 0x67);
/* Truncate before position */
res = g_seekable_truncate (seekable, 2, NULL, &error);
g_assert_no_error (error);
g_assert (res);
g_assert_cmpint (g_memory_output_stream_get_size (base_stream), ==, 2);
g_assert_cmpint (g_memory_output_stream_get_data_size (base_stream), ==, 2);
stream_data = g_memory_output_stream_get_data (base_stream);
g_assert_cmpint (stream_data[0], ==, 0x01);
g_assert_cmpint (stream_data[1], ==, 0x23);
g_object_unref (stream);
g_object_unref (base_stream);
}
int
main (int argc,
char *argv[])
{
g_test_init (&argc, &argv, NULL);
g_test_add_func ("/data-output-stream/basic", test_basic);
g_test_add_func ("/data-output-stream/write-lines-LF", test_read_lines_LF);
g_test_add_func ("/data-output-stream/write-lines-CR", test_read_lines_CR);
g_test_add_func ("/data-output-stream/write-lines-CR-LF", test_read_lines_CR_LF);
g_test_add_func ("/data-output-stream/write-int", test_read_int);
g_test_add_func ("/data-output-stream/seek", test_seek);
g_test_add_func ("/data-output-stream/truncate", test_truncate);
return g_test_run();
}