aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--nx-X11/lib/src/AuDispose.c10
-rw-r--r--nx-X11/lib/src/AuFileName.c50
-rw-r--r--nx-X11/lib/src/AuGetBest.c22
-rw-r--r--nx-X11/lib/src/AuRead.c25
4 files changed, 56 insertions, 51 deletions
diff --git a/nx-X11/lib/src/AuDispose.c b/nx-X11/lib/src/AuDispose.c
index bb890201d..215401ae9 100644
--- a/nx-X11/lib/src/AuDispose.c
+++ b/nx-X11/lib/src/AuDispose.c
@@ -1,4 +1,3 @@
-
/*
Copyright 1988, 1998 The Open Group
@@ -32,13 +31,12 @@ in this Software without prior written authorization from The Open Group.
#include <stdlib.h>
void
-XauDisposeAuth (auth)
-Xauth *auth;
+XauDisposeAuth (Xauth *auth)
{
if (auth) {
- if (auth->address) (void) free (auth->address);
- if (auth->number) (void) free (auth->number);
- if (auth->name) (void) free (auth->name);
+ free (auth->address);
+ free (auth->number);
+ free (auth->name);
if (auth->data) {
(void) bzero (auth->data, auth->data_length);
(void) free (auth->data);
diff --git a/nx-X11/lib/src/AuFileName.c b/nx-X11/lib/src/AuFileName.c
index 6c4fb7dc3..3c6aa8bfd 100644
--- a/nx-X11/lib/src/AuFileName.c
+++ b/nx-X11/lib/src/AuFileName.c
@@ -1,4 +1,3 @@
-
/*
Copyright 1988, 1998 The Open Group
@@ -30,44 +29,61 @@ in this Software without prior written authorization from The Open Group.
#endif
#include <nx-X11/Xauth.h>
#include <nx-X11/Xos.h>
+#include <assert.h>
#include <stdlib.h>
+static char *buf = NULL;
+
+static void
+free_filename_buffer(void)
+{
+ free(buf);
+ buf = NULL;
+}
+
char *
-XauFileName ()
+XauFileName (void)
{
- char *slashDotXauthority = "/.Xauthority";
+ const char *slashDotXauthority = "/.Xauthority";
char *name;
- static char *buf;
- static int bsize;
+ static size_t bsize;
+ static int atexit_registered = 0;
#ifdef WIN32
char dir[128];
#endif
- int size;
+ size_t size;
if ((name = getenv ("XAUTHORITY")))
return name;
name = getenv ("HOME");
if (!name) {
#ifdef WIN32
- (void) strcpy (dir, "/users/");
if ((name = getenv("USERNAME"))) {
- (void) strcat (dir, name);
+ snprintf(dir, sizeof(dir), "/users/%s", name);
name = dir;
}
if (!name)
#endif
- return 0;
+ return NULL;
}
size = strlen (name) + strlen(&slashDotXauthority[1]) + 2;
- if (size > bsize) {
- if (buf)
- free (buf);
- buf = malloc ((unsigned) size);
- if (!buf)
- return 0;
+ if ((size > bsize) || (buf == NULL)) {
+ free (buf);
+ assert(size > 0);
+ buf = malloc (size);
+ if (!buf) {
+ bsize = 0;
+ return NULL;
+ }
+
+ if (!atexit_registered) {
+ atexit(free_filename_buffer);
+ atexit_registered = 1;
+ }
+
bsize = size;
}
- strcpy (buf, name);
- strcat (buf, slashDotXauthority + (name[1] == '\0' ? 1 : 0));
+ snprintf (buf, bsize, "%s%s", name,
+ slashDotXauthority + (name[0] == '/' && name[1] == '\0' ? 1 : 0));
return buf;
}
diff --git a/nx-X11/lib/src/AuGetBest.c b/nx-X11/lib/src/AuGetBest.c
index 2518805cc..3e0231b13 100644
--- a/nx-X11/lib/src/AuGetBest.c
+++ b/nx-X11/lib/src/AuGetBest.c
@@ -1,4 +1,3 @@
-
/*
Copyright 1988, 1998 The Open Group
@@ -34,14 +33,7 @@ in this Software without prior written authorization from The Open Group.
#include <nx-X11/Xthreads.h>
#endif
-static int
-binaryEqual (_Xconst char *a, _Xconst char *b, int len)
-{
- while (len--)
- if (*a++ != *b++)
- return 0;
- return 1;
-}
+#define binaryEqual(a, b, len) (memcmp(a, b, len) == 0)
Xauth *
XauGetBestAuthByAddr (
@@ -72,14 +64,14 @@ XauGetBestAuthByAddr (
auth_name = XauFileName ();
if (!auth_name)
- return 0;
+ return NULL;
if (access (auth_name, R_OK) != 0) /* checks REAL id */
- return 0;
+ return NULL;
auth_file = fopen (auth_name, "rb");
if (!auth_file)
- return 0;
+ return NULL;
- best = 0;
+ best = NULL;
best_type = types_length;
for (;;) {
entry = XauReadAuth (auth_file);
@@ -101,11 +93,11 @@ XauGetBestAuthByAddr (
if ((family == FamilyWild || entry->family == FamilyWild ||
(entry->family == family &&
((address_length == entry->address_length &&
- binaryEqual (entry->address, address, (int)address_length))
+ binaryEqual (entry->address, address, address_length))
))) &&
(number_length == 0 || entry->number_length == 0 ||
(number_length == entry->number_length &&
- binaryEqual (entry->number, number, (int)number_length))))
+ binaryEqual (entry->number, number, number_length))))
{
if (best_type == 0)
{
diff --git a/nx-X11/lib/src/AuRead.c b/nx-X11/lib/src/AuRead.c
index 993aa24b9..2e21cf0a5 100644
--- a/nx-X11/lib/src/AuRead.c
+++ b/nx-X11/lib/src/AuRead.c
@@ -46,7 +46,7 @@ read_short (unsigned short *shortp, FILE *file)
*/
for (;;) {
- if (fread ((char *) file_short, (int) sizeof (file_short), 1, file) != 1) {
+ if (fread ((char *) file_short, sizeof (file_short), 1, file) != 1) {
if (errno == EINTR && ferror (file)) {
perror ("Reading from auth file");
clearerr (file);
@@ -57,7 +57,7 @@ read_short (unsigned short *shortp, FILE *file)
break;
}
#else
- if (fread ((char *) file_short, (int) sizeof (file_short), 1, file) != 1)
+ if (fread ((char *) file_short, sizeof (file_short), 1, file) != 1)
return 0;
#endif
*shortp = file_short[0] * 256 + file_short[1];
@@ -73,7 +73,7 @@ read_counted_string (unsigned short *countp, char **stringp, FILE *file)
if (read_short (&len, file) == 0)
return 0;
if (len == 0) {
- data = 0;
+ data = NULL;
} else {
data = malloc ((unsigned) len);
if (!data)
@@ -81,7 +81,7 @@ read_counted_string (unsigned short *countp, char **stringp, FILE *file)
#ifdef NX_TRANS_SOCKET
for (;;)
{
- if (fread (data, (int) sizeof (char), (int) len, file) != len)
+ if (fread (data, sizeof (char), len, file) != len)
{
if (errno == EINTR && ferror (file))
{
@@ -96,7 +96,7 @@ read_counted_string (unsigned short *countp, char **stringp, FILE *file)
break;
}
#else
- if (fread (data, (int) sizeof (char), (int) len, file) != len) {
+ if (fread (data, sizeof (char), len, file) != len) {
bzero (data, len);
free (data);
return 0;
@@ -109,30 +109,29 @@ read_counted_string (unsigned short *countp, char **stringp, FILE *file)
}
Xauth *
-XauReadAuth (auth_file)
-FILE *auth_file;
+XauReadAuth (FILE *auth_file)
{
Xauth local;
Xauth *ret;
if (read_short (&local.family, auth_file) == 0)
- return 0;
+ return NULL;
if (read_counted_string (&local.address_length, &local.address, auth_file) == 0)
- return 0;
+ return NULL;
if (read_counted_string (&local.number_length, &local.number, auth_file) == 0) {
free (local.address);
- return 0;
+ return NULL;
}
if (read_counted_string (&local.name_length, &local.name, auth_file) == 0) {
free (local.address);
free (local.number);
- return 0;
+ return NULL;
}
if (read_counted_string (&local.data_length, &local.data, auth_file) == 0) {
free (local.address);
free (local.number);
free (local.name);
- return 0;
+ return NULL;
}
ret = (Xauth *) malloc (sizeof (Xauth));
if (!ret) {
@@ -143,7 +142,7 @@ FILE *auth_file;
bzero (local.data, local.data_length);
free (local.data);
}
- return 0;
+ return NULL;
}
*ret = local;
return ret;