+
+static char * rtrim(char *str)
+{
+ char *ptr;
+ int len;
+
+ len = strlen(str);
+ for (ptr = str + len - 1; ptr >= str && isspace((int)*ptr ); --ptr);
+ ptr[1] = '\0';
+
+ return str;
+}
+
+static char * ltrim(char *str)
+{
+ char *ptr;
+ int len;
+
+ for (ptr = str; *ptr && isspace((int)*ptr); ++ptr);
+
+ len = strlen(ptr);
+ memmove(str, ptr, len + 1);
+
+ return str;
+}
+extern "C" value caml_trim(value s)
+{
+ CAMLparam1(s);
+ CAMLlocal1(res);
+ char * ptr;
+ char * str = String_val(s);
+ ptr = rtrim(str);
+ str = ltrim(ptr);
+ res = caml_copy_string(str);
+ CAMLreturn(res);
+}
+