}
#undef FUNC_NAME
+static void
+string_port_truncate (SCM port, scm_t_off length)
+#define FUNC_NAME "string_port_truncate"
+{
+ struct string_port *stream = (void *) SCM_STREAM (port);
+
+ if (0 <= length && stream->pos <= length && length <= stream->len)
+ stream->len = length;
+ else
+ scm_out_of_range (FUNC_NAME, scm_from_off_t_or_off64_t (length));
+}
+#undef FUNC_NAME
\f
/* The initial size in bytes of a string port's buffer. */
string_port_read,
string_port_write);
scm_set_port_seek (ptob, string_port_seek);
+ scm_set_port_truncate (ptob, string_port_truncate);
return ptob;
}
(pass-if "output check"
(string=? text result)))
+ (pass-if-exception "truncating input string fails"
+ exception:wrong-type-arg
+ (call-with-input-string "hej"
+ (lambda (p)
+ (truncate-file p 0))))
+
+ (pass-if-equal "truncating output string" "hej"
+ (call-with-output-string
+ (lambda (p)
+ (truncate-file p 0)
+ (display "hej" p))))
+
+ (pass-if-exception "truncating output string before position"
+ exception:out-of-range
+ (call-with-output-string
+ (lambda (p)
+ (display "hej" p)
+ (truncate-file p 0))))
+
+ (pass-if-equal "truncating output string at position" "hej"
+ (call-with-output-string
+ (lambda (p)
+ (display "hej" p)
+ (truncate-file p 3))))
+
+ (pass-if-equal "truncating output string after seek" ""
+ (call-with-output-string
+ (lambda (p)
+ (display "hej" p)
+ (seek p 0 SEEK_SET)
+ (truncate-file p 0))))
+
+ (pass-if-equal "truncating output string after seek to end" "hej"
+ (call-with-output-string
+ (lambda (p)
+ (display "hej" p)
+ (seek p 0 SEEK_SET)
+ (truncate-file p 3))))
+
(pass-if "%default-port-encoding is ignored"
(let ((str "ĉu bone?"))
;; Latin-1 cannot represent ‘ĉ’.