Beispiel #1
0
int ckl_script_init(ckl_script_t *s, ckl_conf_t *conf)
{
  int rv;

  rv = ckl_tmp_file(&s->path, &s->fd);
  if (rv < 0) {
    ckl_error_out("failed to create script temp file");
    return rv;
  }

  const char *sh = getenv("SHELL");

  if (!sh) {
    sh = "/bin/sh";
  }

  s->shell = strdup(sh);

  return 0;
}
Beispiel #2
0
Datei: ckl.c Projekt: Kami/ckl
static int do_send_msg(ckl_conf_t *conf, const char *usermsg)
{
  int rv;
  const char *editor;
  ckl_msg_t *msg = calloc(1, sizeof(ckl_msg_t));
  ckl_transport_t *transport = calloc(1, sizeof(ckl_transport_t));
  ckl_script_t *script = calloc(1, sizeof(ckl_script_t));

  rv = ckl_msg_init(msg);
  if (rv < 0) {
    ckl_error_out("msg_init failed.");
    return rv;
  }

  if (usermsg == NULL) {
    rv = ckl_editor_find(&editor);
    if (rv < 0) {
      fprintf(stderr, "Warning: no EDITOR found, using `vi`\n");
      editor = "vi";
    }

    char *path;
    FILE *fd;

    rv = ckl_tmp_file(&path, &fd);
    if (rv < 0) {
      ckl_error_out("Failed to setup tempfile for editting.");
      return rv;
    }

    rv = ckl_editor_fill_file(conf, msg, fd);
    if (rv < 0) {
      ckl_error_out("Failed to prefile file");
      return rv;
    }

    rv = ckl_editor_edit(editor, path);
    if (rv < 0) {
      ckl_error_out("editor broke?");
      return rv;
    }

    rv = ckl_editor_read_file(msg, path);
    if (rv < 0) {
      ckl_error_out("Failed to read editted file");
      return rv;
    }

    fclose(fd);
    unlink(path);
  }
  else {
    msg->msg = strdup(usermsg);
  }

  if (msg->msg == NULL) {
    ckl_error_out("no message specified");
  }

  if (conf->script_mode) {
    rv = ckl_script_init(script, conf);
    if (rv < 0) {
      ckl_error_out("script_init failed.");
      return rv;
    }

    rv = ckl_script_record(script, msg);
    if (rv < 0) {
      ckl_error_out("script_record failed.");
      return rv;
    }
  }

  rv = ckl_transport_init(transport, conf);
  if (rv < 0) {
    ckl_error_out("transport_init failed.");
    return rv;
  }

  rv = ckl_transport_msg_send(transport, conf, msg);
  if (rv < 0) {
    ckl_error_out("msg_send failed.");
    return rv;
  }

  ckl_transport_free(transport);
  ckl_msg_free(msg);
  ckl_script_free(script);

  return 0;
}