mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-24 14:36:13 +01:00
glib.h gstrfuncs.c Rename g_strccpy to g_strcompress and g_strecpy to
* glib.h * gstrfuncs.c * tests/strfunc-test.c: Rename g_strccpy to g_strcompress and g_strecpy to g_strescape per Tim Janik's suggestion. Dropped the destination parameter, always g_malloc a new string. Fix bug in g_strcompress, octal digits were gobbled up without limit, should use max three. Sources that use g_strescape must have ifdefs to be compilable both with GLib 1.2 and 1.3.
This commit is contained in:
parent
4877766d0e
commit
1c6c7f7489
13
ChangeLog
13
ChangeLog
@ -1,3 +1,16 @@
|
|||||||
|
1999-08-03 Tor Lillqvist <tml@iki.fi>
|
||||||
|
|
||||||
|
* glib.h
|
||||||
|
* gstrfuncs.c
|
||||||
|
* tests/strfunc-test.c: Rename g_strccpy to g_strcompress and
|
||||||
|
g_strecpy to g_strescape per Tim Janik's suggestion. Dropped the
|
||||||
|
destination parameter, always g_malloc a new string. Fix bug in
|
||||||
|
g_strcompress, octal digits were gobbled up without limit, should
|
||||||
|
use max three.
|
||||||
|
|
||||||
|
Sources that use g_strescape must have ifdefs to be compilable
|
||||||
|
both with GLib 1.2 and 1.3.
|
||||||
|
|
||||||
Sat Jul 31 17:52:03 PDT 1999 Manish Singh <yosh@gimp.org>
|
Sat Jul 31 17:52:03 PDT 1999 Manish Singh <yosh@gimp.org>
|
||||||
|
|
||||||
* glib.h
|
* glib.h
|
||||||
|
@ -1,3 +1,16 @@
|
|||||||
|
1999-08-03 Tor Lillqvist <tml@iki.fi>
|
||||||
|
|
||||||
|
* glib.h
|
||||||
|
* gstrfuncs.c
|
||||||
|
* tests/strfunc-test.c: Rename g_strccpy to g_strcompress and
|
||||||
|
g_strecpy to g_strescape per Tim Janik's suggestion. Dropped the
|
||||||
|
destination parameter, always g_malloc a new string. Fix bug in
|
||||||
|
g_strcompress, octal digits were gobbled up without limit, should
|
||||||
|
use max three.
|
||||||
|
|
||||||
|
Sources that use g_strescape must have ifdefs to be compilable
|
||||||
|
both with GLib 1.2 and 1.3.
|
||||||
|
|
||||||
Sat Jul 31 17:52:03 PDT 1999 Manish Singh <yosh@gimp.org>
|
Sat Jul 31 17:52:03 PDT 1999 Manish Singh <yosh@gimp.org>
|
||||||
|
|
||||||
* glib.h
|
* glib.h
|
||||||
|
@ -1,3 +1,16 @@
|
|||||||
|
1999-08-03 Tor Lillqvist <tml@iki.fi>
|
||||||
|
|
||||||
|
* glib.h
|
||||||
|
* gstrfuncs.c
|
||||||
|
* tests/strfunc-test.c: Rename g_strccpy to g_strcompress and
|
||||||
|
g_strecpy to g_strescape per Tim Janik's suggestion. Dropped the
|
||||||
|
destination parameter, always g_malloc a new string. Fix bug in
|
||||||
|
g_strcompress, octal digits were gobbled up without limit, should
|
||||||
|
use max three.
|
||||||
|
|
||||||
|
Sources that use g_strescape must have ifdefs to be compilable
|
||||||
|
both with GLib 1.2 and 1.3.
|
||||||
|
|
||||||
Sat Jul 31 17:52:03 PDT 1999 Manish Singh <yosh@gimp.org>
|
Sat Jul 31 17:52:03 PDT 1999 Manish Singh <yosh@gimp.org>
|
||||||
|
|
||||||
* glib.h
|
* glib.h
|
||||||
|
@ -1,3 +1,16 @@
|
|||||||
|
1999-08-03 Tor Lillqvist <tml@iki.fi>
|
||||||
|
|
||||||
|
* glib.h
|
||||||
|
* gstrfuncs.c
|
||||||
|
* tests/strfunc-test.c: Rename g_strccpy to g_strcompress and
|
||||||
|
g_strecpy to g_strescape per Tim Janik's suggestion. Dropped the
|
||||||
|
destination parameter, always g_malloc a new string. Fix bug in
|
||||||
|
g_strcompress, octal digits were gobbled up without limit, should
|
||||||
|
use max three.
|
||||||
|
|
||||||
|
Sources that use g_strescape must have ifdefs to be compilable
|
||||||
|
both with GLib 1.2 and 1.3.
|
||||||
|
|
||||||
Sat Jul 31 17:52:03 PDT 1999 Manish Singh <yosh@gimp.org>
|
Sat Jul 31 17:52:03 PDT 1999 Manish Singh <yosh@gimp.org>
|
||||||
|
|
||||||
* glib.h
|
* glib.h
|
||||||
|
@ -1,3 +1,16 @@
|
|||||||
|
1999-08-03 Tor Lillqvist <tml@iki.fi>
|
||||||
|
|
||||||
|
* glib.h
|
||||||
|
* gstrfuncs.c
|
||||||
|
* tests/strfunc-test.c: Rename g_strccpy to g_strcompress and
|
||||||
|
g_strecpy to g_strescape per Tim Janik's suggestion. Dropped the
|
||||||
|
destination parameter, always g_malloc a new string. Fix bug in
|
||||||
|
g_strcompress, octal digits were gobbled up without limit, should
|
||||||
|
use max three.
|
||||||
|
|
||||||
|
Sources that use g_strescape must have ifdefs to be compilable
|
||||||
|
both with GLib 1.2 and 1.3.
|
||||||
|
|
||||||
Sat Jul 31 17:52:03 PDT 1999 Manish Singh <yosh@gimp.org>
|
Sat Jul 31 17:52:03 PDT 1999 Manish Singh <yosh@gimp.org>
|
||||||
|
|
||||||
* glib.h
|
* glib.h
|
||||||
|
@ -1,3 +1,16 @@
|
|||||||
|
1999-08-03 Tor Lillqvist <tml@iki.fi>
|
||||||
|
|
||||||
|
* glib.h
|
||||||
|
* gstrfuncs.c
|
||||||
|
* tests/strfunc-test.c: Rename g_strccpy to g_strcompress and
|
||||||
|
g_strecpy to g_strescape per Tim Janik's suggestion. Dropped the
|
||||||
|
destination parameter, always g_malloc a new string. Fix bug in
|
||||||
|
g_strcompress, octal digits were gobbled up without limit, should
|
||||||
|
use max three.
|
||||||
|
|
||||||
|
Sources that use g_strescape must have ifdefs to be compilable
|
||||||
|
both with GLib 1.2 and 1.3.
|
||||||
|
|
||||||
Sat Jul 31 17:52:03 PDT 1999 Manish Singh <yosh@gimp.org>
|
Sat Jul 31 17:52:03 PDT 1999 Manish Singh <yosh@gimp.org>
|
||||||
|
|
||||||
* glib.h
|
* glib.h
|
||||||
|
@ -1,3 +1,16 @@
|
|||||||
|
1999-08-03 Tor Lillqvist <tml@iki.fi>
|
||||||
|
|
||||||
|
* glib.h
|
||||||
|
* gstrfuncs.c
|
||||||
|
* tests/strfunc-test.c: Rename g_strccpy to g_strcompress and
|
||||||
|
g_strecpy to g_strescape per Tim Janik's suggestion. Dropped the
|
||||||
|
destination parameter, always g_malloc a new string. Fix bug in
|
||||||
|
g_strcompress, octal digits were gobbled up without limit, should
|
||||||
|
use max three.
|
||||||
|
|
||||||
|
Sources that use g_strescape must have ifdefs to be compilable
|
||||||
|
both with GLib 1.2 and 1.3.
|
||||||
|
|
||||||
Sat Jul 31 17:52:03 PDT 1999 Manish Singh <yosh@gimp.org>
|
Sat Jul 31 17:52:03 PDT 1999 Manish Singh <yosh@gimp.org>
|
||||||
|
|
||||||
* glib.h
|
* glib.h
|
||||||
|
@ -1,3 +1,16 @@
|
|||||||
|
1999-08-03 Tor Lillqvist <tml@iki.fi>
|
||||||
|
|
||||||
|
* glib.h
|
||||||
|
* gstrfuncs.c
|
||||||
|
* tests/strfunc-test.c: Rename g_strccpy to g_strcompress and
|
||||||
|
g_strecpy to g_strescape per Tim Janik's suggestion. Dropped the
|
||||||
|
destination parameter, always g_malloc a new string. Fix bug in
|
||||||
|
g_strcompress, octal digits were gobbled up without limit, should
|
||||||
|
use max three.
|
||||||
|
|
||||||
|
Sources that use g_strescape must have ifdefs to be compilable
|
||||||
|
both with GLib 1.2 and 1.3.
|
||||||
|
|
||||||
Sat Jul 31 17:52:03 PDT 1999 Manish Singh <yosh@gimp.org>
|
Sat Jul 31 17:52:03 PDT 1999 Manish Singh <yosh@gimp.org>
|
||||||
|
|
||||||
* glib.h
|
* glib.h
|
||||||
|
3
NEWS
3
NEWS
@ -9,7 +9,8 @@ What's new in GLib 1.3.1:
|
|||||||
* Double ended queue implementation.
|
* Double ended queue implementation.
|
||||||
* GLib macros for printf() formatting, e.g. G_GULONG_FORMAT = "lu"
|
* GLib macros for printf() formatting, e.g. G_GULONG_FORMAT = "lu"
|
||||||
* New thread-safe random number generator Mersenne Twister.
|
* New thread-safe random number generator Mersenne Twister.
|
||||||
|
* g_strcompress() added, g_strescape() had a slight API change, and
|
||||||
|
more tightly defined semantics.
|
||||||
|
|
||||||
Overview of Changes in GLib 1.2.1:
|
Overview of Changes in GLib 1.2.1:
|
||||||
|
|
||||||
|
3
glib.def
3
glib.def
@ -366,14 +366,13 @@ EXPORTS
|
|||||||
g_strcasecmp
|
g_strcasecmp
|
||||||
g_strchomp
|
g_strchomp
|
||||||
g_strchug
|
g_strchug
|
||||||
|
g_strcompress
|
||||||
g_strconcat
|
g_strconcat
|
||||||
g_strccpy
|
|
||||||
g_strdelimit
|
g_strdelimit
|
||||||
g_strdown
|
g_strdown
|
||||||
g_strdup
|
g_strdup
|
||||||
g_strdup_printf
|
g_strdup_printf
|
||||||
g_strdup_vprintf
|
g_strdup_vprintf
|
||||||
g_strecpy
|
|
||||||
g_strerror
|
g_strerror
|
||||||
g_strescape
|
g_strescape
|
||||||
g_strfreev
|
g_strfreev
|
||||||
|
30
glib.h
30
glib.h
@ -1500,7 +1500,7 @@ gchar* g_strchomp (gchar *string);
|
|||||||
#define g_strstrip( string ) g_strchomp (g_strchug (string))
|
#define g_strstrip( string ) g_strchomp (g_strchug (string))
|
||||||
|
|
||||||
/* String utility functions that return a newly allocated string which
|
/* String utility functions that return a newly allocated string which
|
||||||
* ought to be freed from the caller at some point.
|
* ought to be freed with g_free from the caller at some point.
|
||||||
*/
|
*/
|
||||||
gchar* g_strdup (const gchar *str);
|
gchar* g_strdup (const gchar *str);
|
||||||
gchar* g_strdup_printf (const gchar *format,
|
gchar* g_strdup_printf (const gchar *format,
|
||||||
@ -1515,21 +1515,23 @@ gchar* g_strconcat (const gchar *string1,
|
|||||||
...); /* NULL terminated */
|
...); /* NULL terminated */
|
||||||
gchar* g_strjoin (const gchar *separator,
|
gchar* g_strjoin (const gchar *separator,
|
||||||
...); /* NULL terminated */
|
...); /* NULL terminated */
|
||||||
/* Copy a string interpreting C string -style escape sequences.
|
/* Make a copy of a string interpreting C string -style escape
|
||||||
* The recognized sequences are \b \f \n \r \t \\ \" and the octal format.
|
* sequences. Inverse of g_strescape. The recognized sequences are \b
|
||||||
|
* \f \n \r \t \\ \" and the octal format.
|
||||||
*/
|
*/
|
||||||
gchar* g_strccpy (gchar *dest,
|
gchar* g_strcompress (const gchar *source);
|
||||||
const gchar *source);
|
|
||||||
/* Copy a string escaping nonprintable characters like in C strings.
|
|
||||||
* Inverse of g_strccpy. The exceptions parameter if non-NULL points
|
|
||||||
* to a string containing characters that are not escaped.
|
|
||||||
*/
|
|
||||||
gchar* g_strecpy (gchar *dest,
|
|
||||||
const gchar *source,
|
|
||||||
const gchar *exceptions);
|
|
||||||
|
|
||||||
/* deprecated function (used to be a real function) */
|
/* Copy a string escaping nonprintable characters like in C strings.
|
||||||
#define g_strescape(src) g_strecpy (g_new (char, strlen (src)*4+1), (src), NULL)
|
* Inverse of g_strcompress. The exceptions parameter, if non-NULL, points
|
||||||
|
* to a string containing characters that are not to be escaped.
|
||||||
|
*/
|
||||||
|
gchar* g_strescape (const gchar *source,
|
||||||
|
const gchar *exceptions);
|
||||||
|
/* Deprecated API:
|
||||||
|
* gchar* g_strescape (const gchar *source);
|
||||||
|
* Luckily this function wasn't much used.
|
||||||
|
* Add a second NULL parameter in calls for mostly identical semantics.
|
||||||
|
*/
|
||||||
|
|
||||||
gpointer g_memdup (gconstpointer mem,
|
gpointer g_memdup (gconstpointer mem,
|
||||||
guint byte_size);
|
guint byte_size);
|
||||||
|
@ -366,14 +366,13 @@ EXPORTS
|
|||||||
g_strcasecmp
|
g_strcasecmp
|
||||||
g_strchomp
|
g_strchomp
|
||||||
g_strchug
|
g_strchug
|
||||||
|
g_strcompress
|
||||||
g_strconcat
|
g_strconcat
|
||||||
g_strccpy
|
|
||||||
g_strdelimit
|
g_strdelimit
|
||||||
g_strdown
|
g_strdown
|
||||||
g_strdup
|
g_strdup
|
||||||
g_strdup_printf
|
g_strdup_printf
|
||||||
g_strdup_vprintf
|
g_strdup_vprintf
|
||||||
g_strecpy
|
|
||||||
g_strerror
|
g_strerror
|
||||||
g_strescape
|
g_strescape
|
||||||
g_strfreev
|
g_strfreev
|
||||||
|
30
glib/glib.h
30
glib/glib.h
@ -1500,7 +1500,7 @@ gchar* g_strchomp (gchar *string);
|
|||||||
#define g_strstrip( string ) g_strchomp (g_strchug (string))
|
#define g_strstrip( string ) g_strchomp (g_strchug (string))
|
||||||
|
|
||||||
/* String utility functions that return a newly allocated string which
|
/* String utility functions that return a newly allocated string which
|
||||||
* ought to be freed from the caller at some point.
|
* ought to be freed with g_free from the caller at some point.
|
||||||
*/
|
*/
|
||||||
gchar* g_strdup (const gchar *str);
|
gchar* g_strdup (const gchar *str);
|
||||||
gchar* g_strdup_printf (const gchar *format,
|
gchar* g_strdup_printf (const gchar *format,
|
||||||
@ -1515,21 +1515,23 @@ gchar* g_strconcat (const gchar *string1,
|
|||||||
...); /* NULL terminated */
|
...); /* NULL terminated */
|
||||||
gchar* g_strjoin (const gchar *separator,
|
gchar* g_strjoin (const gchar *separator,
|
||||||
...); /* NULL terminated */
|
...); /* NULL terminated */
|
||||||
/* Copy a string interpreting C string -style escape sequences.
|
/* Make a copy of a string interpreting C string -style escape
|
||||||
* The recognized sequences are \b \f \n \r \t \\ \" and the octal format.
|
* sequences. Inverse of g_strescape. The recognized sequences are \b
|
||||||
|
* \f \n \r \t \\ \" and the octal format.
|
||||||
*/
|
*/
|
||||||
gchar* g_strccpy (gchar *dest,
|
gchar* g_strcompress (const gchar *source);
|
||||||
const gchar *source);
|
|
||||||
/* Copy a string escaping nonprintable characters like in C strings.
|
|
||||||
* Inverse of g_strccpy. The exceptions parameter if non-NULL points
|
|
||||||
* to a string containing characters that are not escaped.
|
|
||||||
*/
|
|
||||||
gchar* g_strecpy (gchar *dest,
|
|
||||||
const gchar *source,
|
|
||||||
const gchar *exceptions);
|
|
||||||
|
|
||||||
/* deprecated function (used to be a real function) */
|
/* Copy a string escaping nonprintable characters like in C strings.
|
||||||
#define g_strescape(src) g_strecpy (g_new (char, strlen (src)*4+1), (src), NULL)
|
* Inverse of g_strcompress. The exceptions parameter, if non-NULL, points
|
||||||
|
* to a string containing characters that are not to be escaped.
|
||||||
|
*/
|
||||||
|
gchar* g_strescape (const gchar *source,
|
||||||
|
const gchar *exceptions);
|
||||||
|
/* Deprecated API:
|
||||||
|
* gchar* g_strescape (const gchar *source);
|
||||||
|
* Luckily this function wasn't much used.
|
||||||
|
* Add a second NULL parameter in calls for mostly identical semantics.
|
||||||
|
*/
|
||||||
|
|
||||||
gpointer g_memdup (gconstpointer mem,
|
gpointer g_memdup (gconstpointer mem,
|
||||||
guint byte_size);
|
guint byte_size);
|
||||||
|
@ -1073,14 +1073,12 @@ g_strdelimit (gchar *string,
|
|||||||
}
|
}
|
||||||
|
|
||||||
gchar*
|
gchar*
|
||||||
g_strccpy (gchar *dest,
|
g_strcompress (const gchar *source)
|
||||||
const gchar *source)
|
|
||||||
{
|
{
|
||||||
const gchar *p = source;
|
const gchar *p = source, *octal;
|
||||||
|
gchar *dest = g_malloc (strlen (source) + 1);
|
||||||
gchar *q = dest;
|
gchar *q = dest;
|
||||||
|
|
||||||
g_return_val_if_fail (dest != NULL, NULL);
|
|
||||||
|
|
||||||
while (*p)
|
while (*p)
|
||||||
{
|
{
|
||||||
if (*p == '\\')
|
if (*p == '\\')
|
||||||
@ -1091,7 +1089,8 @@ g_strccpy (gchar *dest,
|
|||||||
case '0': case '1': case '2': case '3': case '4':
|
case '0': case '1': case '2': case '3': case '4':
|
||||||
case '5': case '6': case '7':
|
case '5': case '6': case '7':
|
||||||
*q = 0;
|
*q = 0;
|
||||||
while ((*p >= '0') && (*p <= '7'))
|
octal = p;
|
||||||
|
while ((p < octal + 3) && (*p >= '0') && (*p <= '7'))
|
||||||
{
|
{
|
||||||
*q = (*q * 8) + (*p - '0');
|
*q = (*q * 8) + (*p - '0');
|
||||||
p++;
|
p++;
|
||||||
@ -1128,11 +1127,12 @@ g_strccpy (gchar *dest,
|
|||||||
}
|
}
|
||||||
|
|
||||||
gchar *
|
gchar *
|
||||||
g_strecpy (gchar *dest,
|
g_strescape (const gchar *source,
|
||||||
const gchar *src,
|
const gchar *exceptions)
|
||||||
const gchar *exceptions)
|
|
||||||
{
|
{
|
||||||
const guchar *p = (guchar *) src;
|
const guchar *p = (guchar *) source;
|
||||||
|
/* Each source byte needs maximally four destination chars (\777) */
|
||||||
|
gchar *dest = g_malloc (strlen (source) * 4 + 1);
|
||||||
gchar *q = dest;
|
gchar *q = dest;
|
||||||
guchar excmap[256];
|
guchar excmap[256];
|
||||||
|
|
||||||
|
20
gstrfuncs.c
20
gstrfuncs.c
@ -1073,14 +1073,12 @@ g_strdelimit (gchar *string,
|
|||||||
}
|
}
|
||||||
|
|
||||||
gchar*
|
gchar*
|
||||||
g_strccpy (gchar *dest,
|
g_strcompress (const gchar *source)
|
||||||
const gchar *source)
|
|
||||||
{
|
{
|
||||||
const gchar *p = source;
|
const gchar *p = source, *octal;
|
||||||
|
gchar *dest = g_malloc (strlen (source) + 1);
|
||||||
gchar *q = dest;
|
gchar *q = dest;
|
||||||
|
|
||||||
g_return_val_if_fail (dest != NULL, NULL);
|
|
||||||
|
|
||||||
while (*p)
|
while (*p)
|
||||||
{
|
{
|
||||||
if (*p == '\\')
|
if (*p == '\\')
|
||||||
@ -1091,7 +1089,8 @@ g_strccpy (gchar *dest,
|
|||||||
case '0': case '1': case '2': case '3': case '4':
|
case '0': case '1': case '2': case '3': case '4':
|
||||||
case '5': case '6': case '7':
|
case '5': case '6': case '7':
|
||||||
*q = 0;
|
*q = 0;
|
||||||
while ((*p >= '0') && (*p <= '7'))
|
octal = p;
|
||||||
|
while ((p < octal + 3) && (*p >= '0') && (*p <= '7'))
|
||||||
{
|
{
|
||||||
*q = (*q * 8) + (*p - '0');
|
*q = (*q * 8) + (*p - '0');
|
||||||
p++;
|
p++;
|
||||||
@ -1128,11 +1127,12 @@ g_strccpy (gchar *dest,
|
|||||||
}
|
}
|
||||||
|
|
||||||
gchar *
|
gchar *
|
||||||
g_strecpy (gchar *dest,
|
g_strescape (const gchar *source,
|
||||||
const gchar *src,
|
const gchar *exceptions)
|
||||||
const gchar *exceptions)
|
|
||||||
{
|
{
|
||||||
const guchar *p = (guchar *) src;
|
const guchar *p = (guchar *) source;
|
||||||
|
/* Each source byte needs maximally four destination chars (\777) */
|
||||||
|
gchar *dest = g_malloc (strlen (source) * 4 + 1);
|
||||||
gchar *q = dest;
|
gchar *q = dest;
|
||||||
guchar excmap[256];
|
guchar excmap[256];
|
||||||
|
|
||||||
|
@ -99,15 +99,14 @@ main (int argc,
|
|||||||
g_assert (strcmp(string, "00021 test ") == 0);
|
g_assert (strcmp(string, "00021 test ") == 0);
|
||||||
g_free (string);
|
g_free (string);
|
||||||
|
|
||||||
g_assert (strcmp(g_strccpy(g_malloc(100),
|
g_assert (strcmp
|
||||||
"abc\\\\\\\"\\b\\f\\n\\r\\t\\003\\177\\234\\313"),
|
(g_strcompress("abc\\\\\\\"\\b\\f\\n\\r\\t\\003\\177\\234\\313\\12345z"),
|
||||||
"abc\\\"\b\f\n\r\t\003\177\234\313") == 0);
|
"abc\\\"\b\f\n\r\t\003\177\234\313\12345z") == 0);
|
||||||
g_assert (strcmp(g_strecpy(g_malloc(100),
|
g_assert (strcmp(g_strescape("abc\\\"\b\f\n\r\t\003\177\234\313",
|
||||||
"abc\\\"\b\f\n\r\t\003\177\234\313",
|
NULL),
|
||||||
NULL),
|
|
||||||
"abc\\\\\\\"\\b\\f\\n\\r\\t\\003\\177\\234\\313") == 0);
|
"abc\\\\\\\"\\b\\f\\n\\r\\t\\003\\177\\234\\313") == 0);
|
||||||
g_assert (strcmp(g_strecpy(g_malloc(100),"abc\\\"\b\f\n\r\t\003\177\234\313",
|
g_assert (strcmp(g_strescape("abc\\\"\b\f\n\r\t\003\177\234\313",
|
||||||
"\b\f\001\002\003\004"),
|
"\b\f\001\002\003\004"),
|
||||||
"abc\\\\\\\"\b\f\\n\\r\\t\003\\177\\234\\313") == 0);
|
"abc\\\\\\\"\b\f\\n\\r\\t\003\\177\\234\\313") == 0);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user