diff -ru3 ../glib.cvs/ChangeLog ./ChangeLog
--- ../glib.cvs/ChangeLog       Sun Nov 01 01:08:16 1998
+++ ./ChangeLog Sun Nov 01 02:05:42 1998
@@ -1,3 +1,18 @@
+1998-11-01 Tor Lillqvist <[email protected]
+
+       * glib.def: Added the new functions.
+
+       * gutils.c:
+       (g_getenv): Better implementation on Win32. No loop necessary.
+       (g_get_any_init): Use P_tmpdir if defined as tmp directory. Don't
+       set home dir always to NULL on Win32.  Don't use tmp directory as
+       last resort home directory, but return NULL if no home
+       directory is known (application must check).
+
+       * makefile.msc: Better touch command, just COPYing a single file
+       sets the timestamp from that file, which isn't what touching should
+       do.
+
Sat Oct 31 05:08:26 1998  Tim Janik  <[email protected]>

       * glib.h: removed old G_ENUM(), G_FLAGS(), G_NV() and G_SV() macros.
diff -ru3 ../glib.cvs/glib.def ./glib.def
--- ../glib.cvs/glib.def        Tue Oct 27 05:44:44 1998
+++ ./glib.def  Sun Nov 01 01:24:52 1998
@@ -204,6 +204,7 @@
       g_scanner_scope_remove_symbol
       g_scanner_set_scope
       g_scanner_stat_mode
+       g_scanner_sync_file_offset
       g_scanner_thaw_symbol_table
       g_scanner_unexp_token
       g_scanner_warn
@@ -245,6 +246,7 @@
       g_strdup_printf
       g_strdup_vprintf
       g_strerror
+       g_strfreev
       g_string_append
       g_string_append_c
       g_string_assign
@@ -265,11 +267,13 @@
       g_string_sprintfa
       g_string_truncate
       g_string_up
+       g_strjoinv
       g_strescape
       g_strndup
       g_strnfill
       g_strreverse
       g_strsignal
+       g_strsplit
       g_strtod
       g_strup
       g_timer_destroy
diff -ru3 ../glib.cvs/gutils.c ./gutils.c
--- ../glib.cvs/gutils.c        Tue Oct 27 08:07:14 1998
+++ ./gutils.c  Sun Nov 01 02:06:04 1998
@@ -328,8 +328,10 @@
  return getenv (variable);
#else
  gchar *v;
-  guint l, k;
-  gchar *p;
+  guint k;
+  static gchar *p = NULL;
+  static gint l;
+  gchar dummy[2];

  g_return_val_if_fail (variable != NULL, NULL);

@@ -342,23 +344,20 @@
   * calling ExpandEnvironmentStrings.
   */

-  v = g_strdup (v);
-  l = 16;
-  do
+  /* First check how much space we need */
+  k = ExpandEnvironmentStrings (v, dummy, 2);
+  /* Then allocate that much, and actualy do the expansion */
+  if (p == NULL)
    {
-      p = g_new (gchar, l);
-
-      k = ExpandEnvironmentStrings (v, p, l);
-      if (k > l)
-       {
-         g_free (p);
-         l *= 2;
-       }
+      p = g_malloc (k);
+      l = k;
    }
-  while (k > l);
-
-  g_free (v);
-
+  else if (k > l)
+    {
+      p = g_realloc (p, k);
+      l = k;
+    }
+  ExpandEnvironmentStrings (v, p, k);
  return p;
#endif
}
@@ -383,13 +382,23 @@
      if (!g_tmp_dir)
       g_tmp_dir = g_strdup (g_getenv ("TEMP"));

+#ifdef P_tmpdir
+      if (!g_tmp_dir)
+       {
+         int k;
+         g_tmp_dir = g_strdup (P_tmpdir);
+         k = strlen (g_tmp_dir);
+         if (g_tmp_dir[k-1] == G_DIR_SEPARATOR)
+           g_tmp_dir[k-1] = '\0';
+       }
+#endif
      if (!g_tmp_dir)
       {
#ifndef NATIVE_WIN32
-         g_tmp_dir = g_strdup (G_DIR_SEPARATOR_S "tmp");
-#else /* !NATIVE_WIN32 */
-         g_tmp_dir = g_strdup (".");
-#endif /* !NATIVE_WIN32 */
+         g_tmp_dir = g_strdup ("/tmp");
+#else /* NATIVE_WIN32 */
+         g_tmp_dir = g_strdup ("C:\\");
+#endif /* NATIVE_WIN32 */
       }

      g_home_dir = g_strdup (g_getenv ("HOME"));
@@ -421,7 +430,6 @@
         }
       else
         g_real_name = g_strdup (g_user_name);
-       g_home_dir = NULL;
      }
#  else /* !NATIVE_WIN32 */
      g_user_name = g_strdup ("somebody");
@@ -430,9 +438,6 @@
#  endif /* !NATIVE_WIN32 */
#endif /* !HAVE_PWD_H */
    }
-
-  if (!g_home_dir)
-    g_home_dir = g_strdup (g_tmp_dir);
}

gchar*
@@ -453,6 +458,12 @@
  return g_real_name;
}

+/* Return the home directory of the user. If there is a HOME
+ * environment variable, its value is returned, otherwise use some
+ * system-dependent way of finding it out. If no home directory can be
+ * deduced, return NULL.
+ */
+
gchar*
g_get_home_dir (void)
{
@@ -462,6 +473,13 @@
  return g_home_dir;
}

+/* Return a directory to be used to store temporary files. This is the
+ * value of the TMPDIR, TMP or TEMP environment variables (they are
+ * checked in that order). If none of those exist, use P_tmpdir from
+ * stdio.h.  If that isn't defined, return "/tmp" on POSIXly systems,
+ * and C:\ on Windows.
+ */
+
gchar*
g_get_tmp_dir (void)
{
@@ -517,7 +535,7 @@
GIOChannel*
g_iochannel_new (gint fd)
{
-  GIOChannel *channel = g_new0 (GIOChannel, 1);
+  GIOChannel *channel = g_new (GIOChannel, 1);

  channel->fd = fd;

diff -ru3 ../glib.cvs/makefile.msc ./makefile.msc
--- ../glib.cvs/makefile.msc    Tue Oct 27 08:07:14 1998
+++ ./makefile.msc      Sun Nov 01 01:30:22 1998
@@ -9,7 +9,7 @@

LDFLAGS = /link /nodefaultlib:libc msvcrt.lib # /debug:full /debugtype:cv
INSTALL = copy
-TOUCH = copy makefile.msc
+TOUCH = copy makefile.msc+nul

GLIB_VER = 1.1