}
/* Map OCaml flags to C flags. */
-static int flag_map[] = {
+static const int flag_map[] = {
/* AugSaveBackup */ AUG_SAVE_BACKUP,
/* AugSaveNewFile */ AUG_SAVE_NEWFILE,
/* AugTypeCheck */ AUG_TYPE_CHECK,
ocaml_augeas_create (value rootv, value loadpathv, value flagsv)
{
CAMLparam1 (rootv);
- char *root = String_val (rootv);
- char *loadpath;
+ const char *root = String_val (rootv);
+ const char *loadpath;
int flags = 0, i;
augeas_t t;
CAMLparam2 (tv, pathv);
CAMLlocal2 (optv, v);
augeas_t t = Augeas_t_val (tv);
- char *path = String_val (pathv);
+ const char *path = String_val (pathv);
const char *val;
int r;
r = aug_get (t, path, &val);
- if (r == 1) { /* Return Some val */
+ if (r == 1 && val) { /* Return Some val */
v = caml_copy_string (val);
optv = caml_alloc (1, 0);
Field (optv, 0) = v;
- } else if (r == 0) /* Return None */
+ } else if (r == 0 || !val) /* Return None */
optv = Val_int (0);
else if (r == -1) /* Error or multiple matches */
raise_error (t, "Augeas.get");
CAMLparam2 (tv, pathv);
CAMLlocal1 (v);
augeas_t t = Augeas_t_val (tv);
- char *path = String_val (pathv);
+ const char *path = String_val (pathv);
int r;
r = aug_get (t, path, NULL);
{
CAMLparam4 (tv, beforev, pathv, labelv);
augeas_t t = Augeas_t_val (tv);
- char *path = String_val (pathv);
- char *label = String_val (labelv);
+ const char *path = String_val (pathv);
+ const char *label = String_val (labelv);
int before;
before = beforev == Val_int (0) ? 0 : Int_val (Field (beforev, 0));
{
CAMLparam2 (tv, pathv);
augeas_t t = Augeas_t_val (tv);
- char *path = String_val (pathv);
+ const char *path = String_val (pathv);
int r;
r = aug_rm (t, path);
CAMLparam2 (tv, pathv);
CAMLlocal3 (rv, v, cons);
augeas_t t = Augeas_t_val (tv);
- char *path = String_val (pathv);
+ const char *path = String_val (pathv);
char **matches;
int r, i;
{
CAMLparam2 (tv, pathv);
augeas_t t = Augeas_t_val (tv);
- char *path = String_val (pathv);
+ const char *path = String_val (pathv);
int r;
r = aug_match (t, path, NULL);
CAMLreturn (Val_unit);
}
+
+/* val set : t -> -> path -> value option -> unit */
+CAMLprim value
+ocaml_augeas_set (value tv, value pathv, value valuev)
+{
+ CAMLparam3 (tv, pathv, valuev);
+ augeas_t t = Augeas_t_val (tv);
+ const char *path = String_val (pathv);
+ const char *val;
+
+ val =
+ valuev == Val_int (0)
+ ? NULL
+ : String_val (Field (valuev, 0));
+
+ if (aug_set (t, path, val) == -1)
+ raise_error (t, "Augeas.set");
+
+ CAMLreturn (Val_unit);
+}
+
+/* val transform : t -> string -> string -> transform_mode -> unit */
+CAMLprim value
+ocaml_augeas_transform (value tv, value lensv, value filev, value modev)
+{
+ CAMLparam4 (tv, lensv, filev, modev);
+ augeas_t t = Augeas_t_val (tv);
+ const char *lens = String_val (lensv);
+ const char *file = String_val (filev);
+ const int excl = Int_val (modev) == 1 ? 1 : 0;
+
+ if (aug_transform (t, lens, file, excl) == -1)
+ raise_error (t, "Augeas.transform");
+
+ CAMLreturn (Val_unit);
+}