* Deprecated scm_makfromstr and added scm_mem2string as a replacement.
authorDirk Herrmann <dirk@dirk-herrmanns-seiten.de>
Tue, 26 Jun 2001 10:59:34 +0000 (10:59 +0000)
committerDirk Herrmann <dirk@dirk-herrmanns-seiten.de>
Tue, 26 Jun 2001 10:59:34 +0000 (10:59 +0000)
* Eliminated some potential gc problems.
* Eliminated some signedness problems.
* Minor changes.

25 files changed:
NEWS
RELEASE
doc/ChangeLog
doc/oldfmt.c
libguile/ChangeLog
libguile/filesys.c
libguile/gh_data.c
libguile/load.c
libguile/net_db.c
libguile/numbers.c
libguile/objects.c
libguile/ports.c
libguile/read.c
libguile/simpos.c
libguile/socket.c
libguile/stime.c
libguile/strings.c
libguile/strings.h
libguile/strop.c
libguile/strports.c
libguile/symbols.c
libguile/validate.h
libguile/vports.c
srfi/ChangeLog
srfi/srfi-13.c

diff --git a/NEWS b/NEWS
index 56f595a..5e26e47 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -681,6 +681,10 @@ The old names are still available with status `deprecated'.
   scm_tc_dblc - replaced by scm_tc16_complex.
   scm_list_star - replaced by scm_cons_star.
 
+** Deprecated: scm_makfromstr
+
+Use scm_mem2string instead.
+
 ** Deprecated: scm_make_shared_substring
 
 Explicit shared substrings will disappear from Guile.
diff --git a/RELEASE b/RELEASE
index a26eec9..15fd897 100644 (file)
--- a/RELEASE
+++ b/RELEASE
@@ -68,7 +68,7 @@ After signal handling and threading have been fixed:
     load.c: scm_read_and_eval_x
     smob.c: scm_make_smob_type_mfpe, scm_set_smob_mfpe
     gc.c: scm_remember
-    string.c: scm_makstr
+    string.c: scm_makstr, scm_makfromstr
 - remove deprecated procedures:
     boot-9.scm: eval-in-module, id, -1+, return-it, string-character-length,
       flags
index 8125f73..5e0f084 100644 (file)
@@ -1,3 +1,8 @@
+2001-06-26  Dirk Herrmann  <D.Herrmann@tu-bs.de>
+
+       * oldfmt.c (scm_oldfmt):  Use scm_mem2string instead of
+       scm_makfromstr.
+
 2001-06-25  Neil Jerram  <neil@ossau.uklinux.net>
 
        * gh.texi (GH deprecation): Remove paragraph about portability.
index bfd00fe..19fbffc 100644 (file)
@@ -1,4 +1,4 @@
-/*     Copyright (C) 2000 Free Software Foundation, Inc.
+/* Copyright (C) 2000,2001 Free Software Foundation, Inc.
  * 
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -211,9 +211,8 @@ scm_oldfmt (SCM s)
   int n;
   SCM_ASSERT (SCM_NIMP (s) && SCM_STRINGP (s), s, 1, s_oldfmt);
   n = SCM_LENGTH (s);
-  return scm_return_first (scm_makfromstr (scm_c_oldfmt (SCM_ROCHARS (s), n),
-                                          n,
-                                          0),
+  return scm_return_first (scm_mem2string (scm_c_oldfmt (SCM_ROCHARS (s), n),
+                                          n),
                           s);
 #endif
 }
index d5233dc..ddffe6f 100644 (file)
@@ -1,3 +1,53 @@
+2001-06-26  Dirk Herrmann  <D.Herrmann@tu-bs.de>
+
+       * filesys.c (scm_close), ports.c (scm_close_port,
+       scm_port_closed_p), strop.c (scm_string_null_p):  Use SCM_BOOL
+       instead of SCM_NEGATE_BOOL.
+
+       * filesys.c (scm_stat):  Clean up type dispatch.
+
+       * filesys.c (scm_stat), ports.c (scm_input_port_p,
+       scm_output_port_p):  Get rid of redundant IM type check.
+
+       * filesys.c (scm_readdir, scm_getcwd, scm_readlink), gh_data.c
+       (gh_str2scm), load.c (scm_primitive_load, scm_internal_parse_path,
+       scm_search_path), net_db.c (scm_gethost, scm_getnet, scm_getproto,
+       scm_return_entry), numbers.c (scm_number_to_string), objects.c
+       (scm_make_subclass_object), ports.c (scm_port_mode), read.c
+       (scm_lreadr), simpos.c (scm_getenv), socket.c (scm_inet_ntoa,
+       scm_addr_vector), stime.c (scm_strftime), strings.c
+       (scm_makfromstrs, scm_makfrom0str, scm_substring), strings.h
+       (SCM_STRING_COERCE_0TERMINATION_X), strop.c (string_copy,
+       scm_string_split), strports.c (scm_strport_to_string), symbols.c
+       (scm_symbol_to_string), vports.c (sf_write):  Use scm_mem2string
+       instead of scm_makfromstr.
+
+       * net_db.c (scm_sethost, scm_setnet, scm_setproto, scm_setserv),
+       ports.c (scm_close_all_ports_except), read.c (scm_lreadr,
+       scm_read_hash_extend), stime.c (scm_strftime), strings.c
+       (scm_string_append, scm_string), strings.h (SCM_STRINGP,
+       SCM_STRING_COERCE_0TERMINATION_X, SCM_RWSTRINGP), strop.c
+       (string_capitalize_x):  Prefer explicit type check over SCM_N?IMP,
+       !SCM_<pred> over SCM_N<pred>.
+
+       * strings.[ch] (scm_makfromstr):  Deprecated.
+
+       (scm_mem2string):  New function, replaces scm_makfromstr.
+
+       * strings.c (scm_substring), strop.c (string_copy,
+       scm_string_split), strports.c (scm_strport_to_string), symbols.c
+       (scm_symbol_to_string):  Fix gc problem.
+
+       * strings.h (STRINGSH, SCM_STRINGS_H): Rename <foo>H to
+       SCM_<foo>_H.
+
+       * validate.h (SCM_VALIDATE_SUBSTRING_SPEC_COPY):  Eliminate
+       warning about comparing signed and unsigned values.  This fix is
+       not optimal, since it won't work reliably if sizeof (c_start) >
+       sizeof (size_t) or sizeof (c_end) > sizeof (size_t).  A better
+       solution is to define this macro as an inline function, thus
+       allowing to specifiy the types of c_start and c_end.
+
 2001-06-25  Dirk Herrmann  <D.Herrmann@tu-bs.de>
 
        * debug.h (SCM_DEBUGOBJ_FRAME):  Deliver result as a
index 9133432..1d4afd3 100644 (file)
@@ -333,7 +333,7 @@ SCM_DEFINE (scm_close, "close", 1, 0, 0,
      not an error.  */
   if (rv < 0 && errno != EBADF)
     SCM_SYSERROR;
-  return SCM_NEGATE_BOOL(rv < 0);
+  return SCM_BOOL (rv >= 0);
 }
 #undef FUNC_NAME
 
@@ -529,23 +529,22 @@ SCM_DEFINE (scm_stat, "stat", 1, 0, 0,
   struct stat stat_temp;
 
   if (SCM_INUMP (object))
-    SCM_SYSCALL (rv = fstat (SCM_INUM (object), &stat_temp));
+    {
+      SCM_SYSCALL (rv = fstat (SCM_INUM (object), &stat_temp));
+    }
+  else if (SCM_STRINGP (object))
+    {
+      SCM_STRING_COERCE_0TERMINATION_X (object);
+      SCM_SYSCALL (rv = stat (SCM_STRING_CHARS (object), &stat_temp));
+    }
   else
     {
-      SCM_VALIDATE_NIM (1,object);
-      if (SCM_STRINGP (object))
-       {
-         SCM_STRING_COERCE_0TERMINATION_X (object);
-         SCM_SYSCALL (rv = stat (SCM_STRING_CHARS (object), &stat_temp));
-       }
-      else
-       {
-         object = SCM_COERCE_OUTPORT (object);
-          SCM_VALIDATE_OPFPORT(1,object);
-         fdes = SCM_FPORT_FDES (object);
-         SCM_SYSCALL (rv = fstat (fdes, &stat_temp));
-       }
+      object = SCM_COERCE_OUTPORT (object);
+      SCM_VALIDATE_OPFPORT (1, object);
+      fdes = SCM_FPORT_FDES (object);
+      SCM_SYSCALL (rv = fstat (fdes, &stat_temp));
     }
+
   if (rv == -1)
     {
       int en = errno;
@@ -735,7 +734,7 @@ SCM_DEFINE (scm_readdir, "readdir", 1, 0, 0,
   if (errno != 0)
     SCM_SYSERROR;
 
-  return (rdent ? scm_makfromstr (rdent->d_name, NAMLEN (rdent), 0)
+  return (rdent ? scm_mem2string (rdent->d_name, NAMLEN (rdent))
          : SCM_EOF_VAL);
 }
 #undef FUNC_NAME
@@ -845,7 +844,7 @@ SCM_DEFINE (scm_getcwd, "getcwd", 0, 0, 0,
     }
   if (rv == 0)
     SCM_SYSERROR;
-  result = scm_makfromstr (wd, strlen (wd), 0);
+  result = scm_mem2string (wd, strlen (wd));
   scm_must_free (wd);
   return result;
 }
@@ -1272,7 +1271,7 @@ SCM_DEFINE (scm_readlink, "readlink", 1, 0, 0,
     }
   if (rv == -1)
     SCM_SYSERROR;
-  result = scm_makfromstr (buf, rv, 0);
+  result = scm_mem2string (buf, rv);
   scm_must_free (buf);
   return result;
 }
index 3843a07..f55b87e 100644 (file)
@@ -81,7 +81,7 @@ gh_char2scm (char c)
 SCM 
 gh_str2scm (const char *s, size_t len)
 {
-  return scm_makfromstr (s, len, 0);
+  return scm_mem2string (s, len);
 }
 SCM 
 gh_str02scm (const char *s)
index 73eb2b9..3f6fff0 100644 (file)
@@ -123,8 +123,7 @@ SCM_DEFINE (scm_primitive_load, "primitive-load", 1, 0, 0,
 
   { /* scope */
     SCM port, save_port;
-    port = scm_open_file (filename,
-                         scm_makfromstr ("r", (size_t) sizeof (char), 0));
+    port = scm_open_file (filename, scm_mem2string ("r", sizeof (char)));
     save_port = port;
     scm_internal_dynamic_wind (swap_port,
                               load,
@@ -205,7 +204,7 @@ scm_internal_parse_path (char *path, SCM tail)
        /* Scan back to the beginning of the current element.  */
        do scan--;
        while (scan >= path && *scan != ':');
-       tail = scm_cons (scm_makfromstr (scan + 1, elt_end - (scan + 1), 0),
+       tail = scm_cons (scm_mem2string (scan + 1, elt_end - (scan + 1)),
                         tail);
        elt_end = scan;
       } while (scan >= path);
@@ -389,7 +388,7 @@ SCM_DEFINE (scm_search_path, "search-path", 2, 1, 0,
            if (stat (buf, &mode) == 0
                && ! (mode.st_mode & S_IFDIR))
              {
-               result = scm_makfromstr (buf, len + ext_len, 0);
+               result = scm_mem2string (buf, len + ext_len);
                goto end;
              }
          }
index 4f5e64e..66e327a 100644 (file)
@@ -184,8 +184,7 @@ SCM_DEFINE (scm_gethost, "gethost", 0, 1, 0,
   if (!entry)
     scm_resolv_error (FUNC_NAME, host);
   
-  ve[0] = scm_makfromstr (entry->h_name, 
-                         (size_t) strlen (entry->h_name), 0);
+  ve[0] = scm_mem2string (entry->h_name, strlen (entry->h_name));
   ve[1] = scm_makfromstrs (-1, entry->h_aliases);
   ve[2] = SCM_MAKINUM (entry->h_addrtype + 0L);
   ve[3] = SCM_MAKINUM (entry->h_length + 0L);
@@ -257,7 +256,7 @@ SCM_DEFINE (scm_getnet, "getnet", 0, 1, 0,
     }
   if (!entry)
     SCM_SYSERROR_MSG ("no such network ~A", SCM_LIST1 (net), errno);
-  ve[0] = scm_makfromstr (entry->n_name, (size_t) strlen (entry->n_name), 0);
+  ve[0] = scm_mem2string (entry->n_name, strlen (entry->n_name));
   ve[1] = scm_makfromstrs (-1, entry->n_aliases);
   ve[2] = SCM_MAKINUM (entry->n_addrtype + 0L);
   ve[3] = scm_ulong2num (entry->n_net + 0L);
@@ -307,7 +306,7 @@ SCM_DEFINE (scm_getproto, "getproto", 0, 1, 0,
     }
   if (!entry)
     SCM_SYSERROR_MSG ("no such protocol ~A", SCM_LIST1 (protocol), errno);
-  ve[0] = scm_makfromstr (entry->p_name, (size_t) strlen (entry->p_name), 0);
+  ve[0] = scm_mem2string (entry->p_name, strlen (entry->p_name));
   ve[1] = scm_makfromstrs (-1, entry->p_aliases);
   ve[2] = SCM_MAKINUM (entry->p_proto + 0L);
   return ans;
@@ -323,10 +322,10 @@ scm_return_entry (struct servent *entry)
 
   ans = scm_c_make_vector (4, SCM_UNSPECIFIED);
   ve = SCM_VELTS (ans);
-  ve[0] = scm_makfromstr (entry->s_name, (size_t) strlen (entry->s_name), 0);
+  ve[0] = scm_mem2string (entry->s_name, strlen (entry->s_name));
   ve[1] = scm_makfromstrs (-1, entry->s_aliases);
   ve[2] = SCM_MAKINUM (ntohs (entry->s_port) + 0L);
-  ve[3] = scm_makfromstr (entry->s_proto, (size_t) strlen (entry->s_proto), 0);
+  ve[3] = scm_mem2string (entry->s_proto, strlen (entry->s_proto));
   return ans;
 }
 
@@ -386,7 +385,7 @@ SCM_DEFINE (scm_sethost, "sethost", 0, 1, 0,
   if (SCM_UNBNDP (stayopen))
     endhostent ();
   else
-    sethostent (SCM_NFALSEP (stayopen));
+    sethostent (!SCM_FALSEP (stayopen));
   return SCM_UNSPECIFIED;
 }
 #undef FUNC_NAME
@@ -402,7 +401,7 @@ SCM_DEFINE (scm_setnet, "setnet", 0, 1, 0,
   if (SCM_UNBNDP (stayopen))
     endnetent ();
   else
-    setnetent (SCM_NFALSEP (stayopen));
+    setnetent (!SCM_FALSEP (stayopen));
   return SCM_UNSPECIFIED;
 }
 #undef FUNC_NAME
@@ -418,7 +417,7 @@ SCM_DEFINE (scm_setproto, "setproto", 0, 1, 0,
   if (SCM_UNBNDP (stayopen))
     endprotoent ();
   else
-    setprotoent (SCM_NFALSEP (stayopen));
+    setprotoent (!SCM_FALSEP (stayopen));
   return SCM_UNSPECIFIED;
 }
 #undef FUNC_NAME
@@ -434,7 +433,7 @@ SCM_DEFINE (scm_setserv, "setserv", 0, 1, 0,
   if (SCM_UNBNDP (stayopen))
     endservent ();
   else
-    setservent (SCM_NFALSEP (stayopen));
+    setservent (!SCM_FALSEP (stayopen));
   return SCM_UNSPECIFIED;
 }
 #undef FUNC_NAME
index b1e139d..2c7ebf4 100644 (file)
@@ -2188,12 +2188,12 @@ SCM_DEFINE (scm_number_to_string, "number->string", 1, 1, 0,
   if (SCM_INUMP (n)) {
     char num_buf [SCM_INTBUFLEN];
     size_t length = scm_iint2str (SCM_INUM (n), base, num_buf);
-    return scm_makfromstr (num_buf, length, 0);
+    return scm_mem2string (num_buf, length);
   } else if (SCM_BIGP (n)) {
     return big2str (n, (unsigned int) base);
   } else if (SCM_INEXACTP (n)) {
     char num_buf [FLOBUFLEN];
-    return scm_makfromstr (num_buf, iflo2str (n, num_buf), 0);
+    return scm_mem2string (num_buf, iflo2str (n, num_buf));
   } else {
     SCM_WRONG_TYPE_ARG (1, n);
   }
index 66401e1..07a46e7 100644 (file)
@@ -491,7 +491,7 @@ SCM_DEFINE (scm_make_subclass_object, "make-subclass-object", 2, 0, 0,
   SCM_VALIDATE_STRING (2,layout);
   pl = SCM_PACK (SCM_STRUCT_DATA (class) [scm_vtable_index_layout]);
   /* Convert symbol->string */
-  pl = scm_makfromstr (SCM_SYMBOL_CHARS (pl), SCM_SYMBOL_LENGTH (pl), 0);
+  pl = scm_mem2string (SCM_SYMBOL_CHARS (pl), SCM_SYMBOL_LENGTH (pl));
   return scm_i_make_class_object (SCM_STRUCT_VTABLE (class),
                                  scm_string_append (SCM_LIST2 (pl, layout)),
                                  SCM_CLASS_FLAGS (class));
index 56c0b37..49902d7 100644 (file)
@@ -627,7 +627,7 @@ SCM_DEFINE (scm_port_mode, "port-mode", 1, 0, 0,
     strcpy (modes, "w");
   if (SCM_CELL_WORD_0 (port) & SCM_BUF0)
     strcat (modes, "0");
-  return scm_makfromstr (modes, strlen (modes), 0);
+  return scm_mem2string (modes, strlen (modes));
 }
 #undef FUNC_NAME
 
@@ -664,7 +664,7 @@ SCM_DEFINE (scm_close_port, "close-port", 1, 0, 0,
     rv = 0;
   scm_remove_from_port_table (port);
   SCM_CLR_PORT_OPEN_FLAG (port);
-  return SCM_NEGATE_BOOL (rv < 0);
+  return SCM_BOOL (rv >= 0);
 }
 #undef FUNC_NAME
 
@@ -760,7 +760,7 @@ SCM_DEFINE (scm_close_all_ports_except, "close-all-ports-except", 0, 0, 1,
       int found = 0;
       SCM ports_ptr = ports;
 
-      while (SCM_NNULLP (ports_ptr))
+      while (!SCM_NULLP (ports_ptr))
        {
          SCM port = SCM_COERCE_OUTPORT (SCM_CAR (ports_ptr));
          if (i == 0)
@@ -791,9 +791,7 @@ SCM_DEFINE (scm_input_port_p, "input-port?", 1, 0, 0,
            "@code{port?}.")
 #define FUNC_NAME s_scm_input_port_p
 {
-  if (SCM_IMP (x))
-    return SCM_BOOL_F;
-  return SCM_BOOL(SCM_INPUT_PORT_P (x));
+  return SCM_BOOL (SCM_INPUT_PORT_P (x));
 }
 #undef FUNC_NAME
 
@@ -804,11 +802,8 @@ SCM_DEFINE (scm_output_port_p, "output-port?", 1, 0, 0,
            "@code{port?}.")
 #define FUNC_NAME s_scm_output_port_p
 {
-  if (SCM_IMP (x))
-    return SCM_BOOL_F;
-  if (SCM_PORT_WITH_PS_P (x))
-    x = SCM_PORT_WITH_PS_PORT (x);
-  return SCM_BOOL(SCM_OUTPUT_PORT_P (x));
+  SCM_COERCE_OUTPORT (x);
+  return SCM_BOOL (SCM_OUTPUT_PORT_P (x));
 }
 #undef FUNC_NAME
 
@@ -830,7 +825,7 @@ SCM_DEFINE (scm_port_closed_p, "port-closed?", 1, 0, 0,
 #define FUNC_NAME s_scm_port_closed_p
 {
   SCM_VALIDATE_PORT (1,port);
-  return SCM_NEGATE_BOOL(SCM_OPPORTP (port));
+  return SCM_BOOL (!SCM_OPPORTP (port));
 }
 #undef FUNC_NAME
 
index 5af8436..4dd745d 100644 (file)
@@ -380,7 +380,7 @@ tryagain_no_flush_ws:
        case '*':
          j = scm_read_token (c, tok_buf, port, 0);
          p = scm_istr2bve (SCM_STRING_CHARS (*tok_buf) + 1, (long) (j - 1));
-         if (SCM_NFALSEP (p))
+         if (!SCM_FALSEP (p))
            return p;
          else
            goto unkshrp;
@@ -398,7 +398,7 @@ tryagain_no_flush_ws:
          if (c >= '0' && c < '8')
            {
              p = scm_istr2int (SCM_STRING_CHARS (*tok_buf), (long) j, 8);
-             if (SCM_NFALSEP (p))
+             if (!SCM_FALSEP (p))
                return SCM_MAKE_CHAR (SCM_INUM (p));
            }
          for (c = 0; c < scm_n_charnames; c++)
@@ -418,7 +418,7 @@ tryagain_no_flush_ws:
          {
            SCM sharp = scm_get_hash_procedure (c);
 
-           if (SCM_NIMP (sharp))
+           if (!SCM_FALSEP (sharp))
              {
                int line = SCM_LINUM (port);
                int column = SCM_COL (port) - 2;
@@ -484,11 +484,7 @@ tryagain_no_flush_ws:
       if (j == 0)
        return scm_nullstr;
       SCM_STRING_CHARS (*tok_buf)[j] = 0;
-      {
-       SCM str;
-       str = scm_makfromstr (SCM_STRING_CHARS (*tok_buf), j, 0);
-       return str;
-      }
+      return scm_mem2string (SCM_STRING_CHARS (*tok_buf), j);
 
     case'0':case '1':case '2':case '3':case '4':
     case '5':case '6':case '7':case '8':case '9':
@@ -498,7 +494,7 @@ tryagain_no_flush_ws:
     num:
       j = scm_read_token (c, tok_buf, port, 0);
       p = scm_istring2number (SCM_STRING_CHARS (*tok_buf), (long) j, 10L);
-      if (SCM_NFALSEP (p))
+      if (!SCM_FALSEP (p))
        return p;
       if (c == '#')
        {
@@ -749,9 +745,10 @@ SCM_DEFINE (scm_read_hash_extend, "read-hash-extend", 2, 0, 0,
   SCM this;
   SCM prev;
 
-  SCM_VALIDATE_CHAR (1,chr);
-  SCM_ASSERT (SCM_FALSEP (proc) || SCM_NIMP(proc), proc, SCM_ARG2,
-             FUNC_NAME);
+  SCM_VALIDATE_CHAR (1, chr);
+  SCM_ASSERT (SCM_FALSEP (proc)
+             || SCM_EQ_P (scm_procedure_p (proc), SCM_BOOL_T),
+             proc, SCM_ARG2, FUNC_NAME);
 
   /* Check if chr is already in the alist.  */
   this = *scm_read_hash_procedures;
@@ -761,7 +758,7 @@ SCM_DEFINE (scm_read_hash_extend, "read-hash-extend", 2, 0, 0,
       if (SCM_NULLP (this))
        {
          /* not found, so add it to the beginning.  */
-         if (SCM_NFALSEP (proc))
+         if (!SCM_FALSEP (proc))
            {
              *scm_read_hash_procedures = 
                scm_cons (scm_cons (chr, proc), *scm_read_hash_procedures);
index cfc1c9e..882088b 100644 (file)
@@ -1,4 +1,4 @@
-/*     Copyright (C) 1995,1996,1997,1998, 2000, 2001 Free Software Foundation, Inc.
+/* Copyright (C) 1995,1996,1997,1998,2000,2001 Free Software Foundation, Inc.
  * 
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -110,7 +110,7 @@ SCM_DEFINE (scm_getenv, "getenv", 1, 0, 0,
   SCM_VALIDATE_STRING (1, nam);
   SCM_STRING_COERCE_0TERMINATION_X (nam);
   val = getenv (SCM_STRING_CHARS (nam));
-  return (val) ? scm_makfromstr(val, (size_t)strlen(val), 0) : SCM_BOOL_F;
+  return val ? scm_mem2string (val, strlen (val)) : SCM_BOOL_F;
 }
 #undef FUNC_NAME
 
index 685d932..1eacf9f 100644 (file)
@@ -191,7 +191,7 @@ SCM_DEFINE (scm_inet_ntoa, "inet-ntoa", 1, 0, 0,
   SCM answer;
   addr.s_addr = htonl (SCM_NUM2ULONG (1, inetid));
   s = inet_ntoa (addr);
-  answer = scm_makfromstr (s, strlen (s), 0);
+  answer = scm_mem2string (s, strlen (s));
   return answer;
 }
 #undef FUNC_NAME
@@ -960,8 +960,7 @@ scm_addr_vector (const struct sockaddr *address, const char *proc)
        result = scm_c_make_vector (2, SCM_UNSPECIFIED);
        ve = SCM_VELTS (result);
        ve[0] = scm_ulong2num ((unsigned long) fam);
-       ve[1] = scm_makfromstr (nad->sun_path,
-                               (size_t) strlen (nad->sun_path), 0);
+       ve[1] = scm_mem2string (nad->sun_path, strlen (nad->sun_path));
       }
       break;
 #endif
index f99656d..5db51a5 100644 (file)
@@ -607,7 +607,7 @@ SCM_DEFINE (scm_strftime, "strftime", 2, 0, 0,
     SCM *velts = SCM_VELTS (stime);
     int have_zone = 0;
 
-    if (SCM_NFALSEP (velts[10]) && *SCM_STRING_CHARS (velts[10]) != 0)
+    if (!SCM_FALSEP (velts[10]) && *SCM_STRING_CHARS (velts[10]) != 0)
       {
        /* it's not required that the TZ setting be correct, just that
           it has the right name.  so try something like TZ=EST0.
@@ -647,7 +647,7 @@ SCM_DEFINE (scm_strftime, "strftime", 2, 0, 0,
 #endif
     }
 
-  result = scm_makfromstr (tbuf+1, len-1, 0);
+  result = scm_mem2string (tbuf + 1, len - 1);
   scm_must_free (tbuf);
   scm_must_free(myfmt);
   return result;
index a60c03a..b37309b 100644 (file)
@@ -105,7 +105,7 @@ SCM_DEFINE (scm_string, "string", 0, 0, 1,
   {
     unsigned char *data = SCM_STRING_UCHARS (result);
 
-    while (SCM_NNULLP (chrs))
+    while (!SCM_NULLP (chrs))
       {
        SCM elt = SCM_CAR (chrs);
 
@@ -153,7 +153,7 @@ scm_makfromstrs (int argc, char **argv)
   if (0 > i)
     for (i = 0; argv[i]; i++);
   while (i--)
-    lst = scm_cons (scm_makfromstr (argv[i], (size_t) strlen (argv[i]), 0), lst);
+    lst = scm_cons (scm_mem2string (argv[i], strlen (argv[i])), lst);
   return lst;
 }
 
@@ -191,8 +191,21 @@ scm_take0str (char *s)
   return scm_take_str (s, strlen (s));
 }
 
+#if (SCM_DEBUG_DEPRECATED == 0)
+
 SCM 
 scm_makfromstr (const char *src, size_t len, int dummy SCM_UNUSED)
+{
+  scm_c_issue_deprecation_warning ("`scm_makfromstr' is deprecated. "
+                                  "Use `scm_mem2string' instead.");
+
+  return scm_mem2string (src, len);
+}
+
+#endif
+
+SCM 
+scm_mem2string (const char *src, size_t len)
 {
   SCM s = scm_allocate_string (len);
   char *dst = SCM_STRING_CHARS (s);
@@ -206,7 +219,7 @@ SCM
 scm_makfrom0str (const char *src)
 {
   if (!src) return SCM_BOOL_F;
-  return scm_makfromstr (src, (size_t) strlen (src), 0);
+  return scm_mem2string (src, strlen (src));
 }
 
 
@@ -332,6 +345,7 @@ SCM_DEFINE (scm_substring, "substring", 2, 1, 0,
 {
   long int from;
   long int to;
+  SCM substr;
 
   SCM_VALIDATE_STRING (1, str);
   SCM_VALIDATE_INUM (2, start);
@@ -342,7 +356,9 @@ SCM_DEFINE (scm_substring, "substring", 2, 1, 0,
   to = SCM_INUM (end);
   SCM_ASSERT_RANGE (3, end, from <= to && to <= SCM_STRING_LENGTH (str));
 
-  return scm_makfromstr (&SCM_STRING_CHARS (str)[from], (size_t) (to - from), 0);
+  substr = scm_mem2string (&SCM_STRING_CHARS (str)[from], to - from);
+  scm_remember_upto_here_1 (str);
+  return substr;
 }
 #undef FUNC_NAME
 
@@ -366,7 +382,7 @@ SCM_DEFINE (scm_string_append, "string-append", 0, 0, 1,
   }
   res = scm_allocate_string (i);
   data = SCM_STRING_UCHARS (res);
-  for (l = args;SCM_NIMP (l);l = SCM_CDR (l)) {
+  for (l = args; !SCM_NULLP (l);l = SCM_CDR (l)) {
     s = SCM_CAR (l);
     for (i = 0;i<SCM_STRING_LENGTH (s);i++) *data++ = SCM_STRING_UCHARS (s)[i];
   }
index fb44bea..d6495e6 100644 (file)
@@ -1,8 +1,8 @@
 /* classes: h_files */
 
-#ifndef STRINGSH
-#define STRINGSH
-/*     Copyright (C) 1995,1996,1997,1998, 2000 Free Software Foundation, Inc.
+#ifndef SCM_STRINGS_H
+#define SCM_STRINGS_H
+/* Copyright (C) 1995,1996,1997,1998,2000,2001 Free Software Foundation, Inc.
  * 
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -51,7 +51,7 @@
 
 \f
 
-#define SCM_STRINGP(x) (SCM_NIMP (x) && (SCM_TYP7S (x) == scm_tc7_string))
+#define SCM_STRINGP(x) (!SCM_IMP (x) && (SCM_TYP7S (x) == scm_tc7_string))
 #if (SCM_DEBUG_DEPRECATED == 1)
 #define SCM_STRING_UCHARS(x) ((unsigned char *) (SCM_CELL_WORD_1 (x)))
 #define SCM_STRING_CHARS(x) ((char *) (SCM_CELL_WORD_1 (x)))
@@ -62,8 +62,8 @@
 #define SCM_SET_STRING_LENGTH(s, l) (SCM_SET_CELL_WORD_0 ((s), ((l) << 8) + scm_tc7_string))
 
 #define SCM_STRING_COERCE_0TERMINATION_X(x) \
-  { if (SCM_NIMP (x) && (SCM_TYP7 (x) == scm_tc7_substring)) \
-      x = scm_makfromstr (SCM_STRING_CHARS (x), SCM_STRING_LENGTH (x), 0); }
+  { if (!SCM_IMP (x) && (SCM_TYP7 (x) == scm_tc7_substring)) \
+      x = scm_mem2string (SCM_STRING_CHARS (x), SCM_STRING_LENGTH (x)); }
 
 \f
 
@@ -73,7 +73,7 @@ extern SCM scm_string (SCM chrs);
 extern SCM scm_makfromstrs (int argc, char **argv);
 extern SCM scm_take_str (char *s, size_t len);
 extern SCM scm_take0str (char *s);
-extern SCM scm_makfromstr (const char *src, size_t len, int);
+extern SCM scm_mem2string (const char *src, size_t len);
 extern SCM scm_makfrom0str (const char *src);
 extern SCM scm_makfrom0str_opt (const char *src);
 extern SCM scm_allocate_string (size_t len);
@@ -90,7 +90,7 @@ extern void scm_init_strings (void);
 #if (SCM_DEBUG_DEPRECATED == 0)
 
 #define SCM_SLOPPY_STRINGP(x) (SCM_STRINGP(x))
-#define SCM_RWSTRINGP(x) (SCM_NIMP (x) && (SCM_TYP7 (x) == scm_tc7_string))
+#define SCM_RWSTRINGP(x) (!SCM_IMP (x) && (SCM_TYP7 (x) == scm_tc7_string))
 #define SCM_STRING_UCHARS(x) \
   ((SCM_TYP7 (x) == scm_tc7_substring) \
      ? (unsigned char *) SCM_CELL_WORD_1 (SCM_CDDR (x)) + SCM_INUM (SCM_CADR (x)) \
@@ -101,10 +101,11 @@ extern void scm_init_strings (void);
      : (char *) SCM_CELL_WORD_1 (x))
 extern SCM scm_make_shared_substring (SCM str, SCM frm, SCM to);
 extern SCM scm_makstr (size_t len, int);
+extern SCM scm_makfromstr (const char *src, size_t len, int);
 
 #endif  /* SCM_DEBUG_DEPRECATED == 0 */
 
-#endif  /* STRINGSH */
+#endif  /* SCM_STRINGS_H */
 
 /*
   Local Variables:
index a6c05d6..9e637bf 100644 (file)
@@ -1,6 +1,6 @@
 /* classes: src_files */
 
-/*     Copyright (C) 1994, 1996, 1997, 1999, 2000, 2001 Free Software Foundation, Inc.
+/* Copyright (C) 1994,1996,1997,1999,2000,2001 Free Software Foundation, Inc.
 
 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
@@ -324,7 +324,7 @@ SCM_DEFINE (scm_string_null_p, "string-null?", 1, 0, 0,
 #define FUNC_NAME s_scm_string_null_p
 {
   SCM_VALIDATE_STRING (1,str);
-  return SCM_NEGATE_BOOL (SCM_STRING_LENGTH (str));
+  return SCM_BOOL (SCM_STRING_LENGTH (str) == 0);
 }
 #undef FUNC_NAME
 
@@ -353,7 +353,11 @@ SCM_DEFINE (scm_string_to_list, "string->list", 1, 0, 0,
 static SCM
 string_copy (SCM str)
 {
-  return scm_makfromstr (SCM_STRING_CHARS (str), SCM_STRING_LENGTH (str), 0);
+  const char* chars = SCM_STRING_CHARS (str);
+  size_t length = SCM_STRING_LENGTH (str);
+  SCM new_string = scm_mem2string (chars, length);
+  scm_remember_upto_here_1 (str);
+  return new_string;
 }
 
 
@@ -487,7 +491,7 @@ string_capitalize_x (SCM str)
   len = SCM_STRING_LENGTH(str);
   sz = SCM_STRING_CHARS (str);
   for(i=0; i<len;  i++) {
-    if(SCM_NFALSEP(scm_char_alphabetic_p(SCM_MAKE_CHAR(sz[i])))) {
+    if (!SCM_FALSEP (scm_char_alphabetic_p (SCM_MAKE_CHAR (sz[i])))) {
       if(!in_word) {
         sz[i] = scm_upcase(sz[i]);
         in_word = 1;
@@ -574,10 +578,11 @@ SCM_DEFINE (scm_string_split, "string-split", 2, 0, 0,
        idx--;
       if (idx >= 0)
        {
-         res = scm_cons (scm_makfromstr (p + idx, last_idx - idx, 0), res);
+         res = scm_cons (scm_mem2string (p + idx, last_idx - idx), res);
          idx--;
        }
     }
+  scm_remember_upto_here_1 (str);
   return res;
 }
 #undef FUNC_NAME
index ef4a158..2ce941b 100644 (file)
@@ -305,10 +305,14 @@ scm_mkstrport (SCM pos, SCM str, long modes, const char *caller)
 SCM scm_strport_to_string (SCM port)
 {
   scm_t_port *pt = SCM_PTAB_ENTRY (port);
+  SCM str;
 
   if (pt->rw_active == SCM_PORT_WRITE)
     st_flush (port);
-  return scm_makfromstr ((char *) pt->read_buf, pt->read_buf_size, 0);
+
+  str = scm_mem2string ((char *) pt->read_buf, pt->read_buf_size);
+  scm_remember_upto_here_1 (port);
+  return str;
 }
 
 SCM_DEFINE (scm_object_to_string, "object->string", 1, 1, 0,
index 448c9d8..7ce74a2 100644 (file)
@@ -185,8 +185,11 @@ SCM_DEFINE (scm_symbol_to_string, "symbol->string", 1, 0, 0,
            "@end lisp")
 #define FUNC_NAME s_scm_symbol_to_string
 {
+  SCM str;
   SCM_VALIDATE_SYMBOL (1, s);
-  return scm_makfromstr (SCM_SYMBOL_CHARS (s), SCM_SYMBOL_LENGTH (s), 0);
+  str = scm_mem2string (SCM_SYMBOL_CHARS (s), SCM_SYMBOL_LENGTH (s));
+  scm_remember_upto_here_1 (s);
+  return str;
 }
 #undef FUNC_NAME
 
index 5f15213..51a9708 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: validate.h,v 1.33 2001-05-26 20:51:22 cmm Exp $ */
+/* $Id: validate.h,v 1.34 2001-06-26 10:59:34 dirk Exp $ */
 /* Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
  *
  * This program is free software; you can redistribute it and/or modify
     SCM_VALIDATE_INUM_DEF_COPY (pos_start, start, 0, c_start);\
     SCM_VALIDATE_INUM_DEF_COPY (pos_end, end, SCM_STRING_LENGTH (str), c_end);\
     SCM_ASSERT_RANGE (pos_start, start,\
-                      0 <= c_start && c_start <= SCM_STRING_LENGTH (str));\
+                      0 <= c_start \
+                      && (size_t) c_start <= SCM_STRING_LENGTH (str));\
     SCM_ASSERT_RANGE (pos_end, end,\
-                     c_start <= c_end && c_end <= SCM_STRING_LENGTH (str));\
+                     c_start <= c_end \
+                      && (size_t) c_end <= SCM_STRING_LENGTH (str));\
   } while (0)
 
 #define SCM_VALIDATE_REAL(pos, z) SCM_MAKE_VALIDATE (pos, z, REALP)
index 9d7fbe4..33ae235 100644 (file)
@@ -1,4 +1,4 @@
-/*     Copyright (C) 1995,1996,1998,1999, 2000, 2001 Free Software Foundation, Inc.
+/* Copyright (C) 1995,1996,1998,1999,2000,2001 Free Software Foundation, Inc.
  * 
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -101,7 +101,7 @@ sf_write (SCM port, const void *data, size_t size)
   SCM p = SCM_PACK (SCM_STREAM (port));
 
   scm_apply (SCM_VELTS (p)[1], 
-            scm_cons (scm_makfromstr ((char *) data, size, 0), SCM_EOL),
+            scm_cons (scm_mem2string ((char *) data, size), SCM_EOL),
             SCM_EOL);
 }
 
index 77d97f8..05c1c19 100644 (file)
@@ -1,3 +1,13 @@
+2001-06-26  Dirk Herrmann  <D.Herrmann@tu-bs.de>
+
+       * srfi-13.c (scm_string_copyS, scm_string_take, scm_string_drop,
+       scm_string_take_right, scm_string_drop_right, scm_string_trim,
+       scm_string_trim_right, scm_string_trim_both, scm_string_tokenize):
+       Use scm_mem2string instead of scm_makfromstr.
+
+       (scm_reverse_list_to_string, string_titlecase_x):  Prefer
+       !SCM_<pred> over SCM_N<pred>.
+
 2001-06-25  Marius Vollmer  <mvo@zagadka.ping.de>
 
        * srfi-8.scm: Use `re-export-syntax' to correctly re-export
index 88584ca..af34b03 100644 (file)
@@ -1,6 +1,6 @@
 /* srfi-13.c --- SRFI-13 procedures for Guile
  *
- *     Copyright (C) 2001 Free Software Foundation, Inc.
+ * Copyright (C) 2001 Free Software Foundation, Inc.
  * 
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as
@@ -189,7 +189,7 @@ SCM_DEFINE (scm_reverse_list_to_string, "reverse-list->string", 1, 0, 0,
   {
     unsigned char *data = SCM_STRING_UCHARS (result) + i;
 
-    while (SCM_NNULLP (chrs))
+    while (!SCM_NULLP (chrs))
       {
        SCM elt = SCM_CAR (chrs);
 
@@ -379,7 +379,7 @@ SCM_DEFINE (scm_string_copyS, "string-copy", 1, 2, 0,
   SCM_VALIDATE_SUBSTRING_SPEC_COPY (1, str, cstr,
                                    2, start, cstart,
                                    3, end, cend);
-  return scm_makfromstr (cstr + cstart, cend - cstart, 0);
+  return scm_mem2string (cstr + cstart, cend - cstart);
   
 }
 #undef FUNC_NAME
@@ -450,7 +450,7 @@ SCM_DEFINE (scm_string_take, "string-take", 2, 0, 0,
   SCM_VALIDATE_INUM_COPY (2, n, cn);
   SCM_ASSERT_RANGE (2, n, cn >= 0 && cn <= SCM_STRING_LENGTH (s));
   
-  return scm_makfromstr (cstr, cn, 0);
+  return scm_mem2string (cstr, cn);
 }
 #undef FUNC_NAME
 
@@ -467,7 +467,7 @@ SCM_DEFINE (scm_string_drop, "string-drop", 2, 0, 0,
   SCM_VALIDATE_INUM_COPY (2, n, cn);
   SCM_ASSERT_RANGE (2, n, cn >= 0 && cn <= SCM_STRING_LENGTH (s));
   
-  return scm_makfromstr (cstr + cn, SCM_STRING_LENGTH (s) - cn, 0);
+  return scm_mem2string (cstr + cn, SCM_STRING_LENGTH (s) - cn);
 }
 #undef FUNC_NAME
 
@@ -484,7 +484,7 @@ SCM_DEFINE (scm_string_take_right, "string-take-right", 2, 0, 0,
   SCM_VALIDATE_INUM_COPY (2, n, cn);
   SCM_ASSERT_RANGE (2, n, cn >= 0 && cn <= SCM_STRING_LENGTH (s));
   
-  return scm_makfromstr (cstr + SCM_STRING_LENGTH (s) - cn, cn, 0);
+  return scm_mem2string (cstr + SCM_STRING_LENGTH (s) - cn, cn);
 }
 #undef FUNC_NAME
 
@@ -501,7 +501,7 @@ SCM_DEFINE (scm_string_drop_right, "string-drop-right", 2, 0, 0,
   SCM_VALIDATE_INUM_COPY (2, n, cn);
   SCM_ASSERT_RANGE (2, n, cn >= 0 && cn <= SCM_STRING_LENGTH (s));
   
-  return scm_makfromstr (cstr, SCM_STRING_LENGTH (s) - cn, 0);
+  return scm_mem2string (cstr, SCM_STRING_LENGTH (s) - cn);
 }
 #undef FUNC_NAME
 
@@ -657,7 +657,7 @@ SCM_DEFINE (scm_string_trim, "string-trim", 1, 3, 0,
          cstart++;
        }
     }
-  return scm_makfromstr (cstr + cstart, cend - cstart, 0);
+  return scm_mem2string (cstr + cstart, cend - cstart);
 }
 #undef FUNC_NAME
 
@@ -733,7 +733,7 @@ SCM_DEFINE (scm_string_trim_right, "string-trim-right", 1, 3, 0,
          cend--;
        }
     }
-  return scm_makfromstr (cstr + cstart, cend - cstart, 0);
+  return scm_mem2string (cstr + cstart, cend - cstart);
 }
 #undef FUNC_NAME
 
@@ -837,7 +837,7 @@ SCM_DEFINE (scm_string_trim_both, "string-trim-both", 1, 3, 0,
          cend--;
        }
     }
-  return scm_makfromstr (cstr + cstart, cend - cstart, 0);
+  return scm_mem2string (cstr + cstart, cend - cstart);
 }
 #undef FUNC_NAME
 
@@ -2121,7 +2121,7 @@ string_titlecase_x (SCM str, int start, int end)
   sz = SCM_STRING_CHARS (str);
   for(i = start; i < end;  i++)
     {
-      if(SCM_NFALSEP(scm_char_alphabetic_p(SCM_MAKE_CHAR(sz[i]))))
+      if (!SCM_FALSEP (scm_char_alphabetic_p (SCM_MAKE_CHAR (sz[i]))))
        {
          if (!in_word)
            {
@@ -2826,8 +2826,7 @@ SCM_DEFINE (scm_string_tokenize, "string-tokenize", 1, 3, 0,
                break;
              cend--;
            }
-         result = scm_cons (scm_makfromstr (cstr + cend, idx - cend,
-                                            0), result);
+         result = scm_cons (scm_mem2string (cstr + cend, idx - cend), result);
        }
     }
   else if (SCM_CHARSETP (token_char))
@@ -2851,8 +2850,7 @@ SCM_DEFINE (scm_string_tokenize, "string-tokenize", 1, 3, 0,
                break;
              cend--;
            }
-         result = scm_cons (scm_makfromstr (cstr + cend, idx - cend,
-                                            0), result);
+         result = scm_cons (scm_mem2string (cstr + cend, idx - cend), result);
        }
     }
   else
@@ -2880,8 +2878,7 @@ SCM_DEFINE (scm_string_tokenize, "string-tokenize", 1, 3, 0,
                break;
              cend--;
            }
-         result = scm_cons (scm_makfromstr (cstr + cend, idx - cend,
-                                            0), result);
+         result = scm_cons (scm_mem2string (cstr + cend, idx - cend), result);
        }
     }
   return result;