예제 #1
0
파일: pacman.c 프로젝트: dcreager/buzzy
static int
bz_pacman__package__is_needed(void *user_data, bool *is_needed)
{
    struct bz_env  *env = user_data;
    const char  *package_name;
    bool  force = false;

    rip_check(package_name = bz_env_get_string(env, "name", true));
    rie_check(force = bz_env_get_bool(env, "force", true));

    if (force) {
        *is_needed = true;
        clog_info("(%s) Force creation of binary package",
                  package_name);
        return 0;
    } else {
        struct cork_path  *package_file;
        rip_check(package_file = bz_env_get_path
                  (env, "pacman.package_file", true));
        clog_info("(%s) Check whether binary package %s exists",
                  package_name, cork_path_get(package_file));
        rii_check(bz_file_exists(cork_path_get(package_file), is_needed));
        *is_needed = !*is_needed;
        return 0;
    }
}
예제 #2
0
파일: tgdb.cpp 프로젝트: ibuclaw/cgdb
void tgdb_close_logfiles()
{
    clog_info(CLOG_CGDB, "Closing logfile.");
    clog_free(CLOG_CGDB_ID);

    clog_info(CLOG_GDBIO, "Closing logfile.");
    clog_free(CLOG_GDBIO_ID);
}
예제 #3
0
파일: test.c 프로젝트: cliffeh/clog
int main(int argc, char *argv[])
{
  int level = CLOG_DEFAULT;
  const char *lname = "DEFAULT";

  clog_init(stdout, level, CLOG_DEFAULT_TS_FMT);

  if(argc == 2) {
    if(!strcmp("FATAL", argv[1])) { clog_set_level(level = CLOG_FATAL); lname = "FATAL"; }
    if(!strcmp("ERROR", argv[1])) { clog_set_level(level = CLOG_ERROR); lname = "ERROR"; }
    if(!strcmp("WARN", argv[1]))  { clog_set_level(level = CLOG_WARN);  lname = "WARN";  }
    if(!strcmp("INFO", argv[1]))  { clog_set_level(level = CLOG_INFO);  lname = "INFO";  }
    if(!strcmp("DEBUG", argv[1])) { clog_set_level(level = CLOG_DEBUG); lname = "DEBUG"; }
    if(!strcmp("TRACE", argv[1])) { clog_set_level(level = CLOG_TRACE); lname = "TRACE"; }
  }

  fprintf(stdout, "--- %s ---\n", lname);
  clog_fatal("this is %s log",  "fatal");
  clog_error("this is %s log",  "error");
  clog_warn("this is %s log",    "warn");
  clog_info("this is %s log",    "info");
  clog_debug("this is %s log",  "debug");
  clog_trace("this is %s log",  "trace");

  return 0;
}
예제 #4
0
파일: autotools.c 프로젝트: dcreager/buzzy
static int
bz_autotools__stage(void *user_data)
{
    struct bz_env  *env = user_data;
    const char  *package_name;
    struct cork_path  *build_dir;
    struct cork_path  *staging_dir;
    bool  verbose;
    struct cork_env  *exec_env;
    struct cork_exec  *exec;

    rii_check(bz_stage_message(env, "autotools"));

    rip_check(package_name = bz_env_get_string(env, "name", true));
    clog_info("(%s) Stage using autotools", package_name);
    rip_check(build_dir = bz_env_get_path(env, "build_dir", true));
    rip_check(staging_dir = bz_env_get_path(env, "staging_dir", true));
    rie_check(verbose = bz_env_get_bool(env, "verbose", true));

    /* Create the staging path */
    rii_check(bz_create_directory(cork_path_get(staging_dir), 0750));

    /* $ make install */
    exec = cork_exec_new("make");
    cork_exec_add_param(exec, "make");
    cork_exec_add_param(exec, "install");
    cork_exec_set_cwd(exec, cork_path_get(build_dir));
    exec_env = cork_env_clone_current();
    cork_env_add(exec_env, "DESTDIR", cork_path_get(staging_dir));
    cork_exec_set_env(exec, exec_env);
    return bz_subprocess_run_exec(verbose, NULL, exec);
}
예제 #5
0
파일: maltcp_ctx.c 프로젝트: ccsdsmo/malc
int maltcp_del_endpoint(maltcp_poller_data_t *poller_data, mal_endpoint_t *endpoint) {
  clog_info(maltcp_logger, " *** maltcp_del_endpoint: %s\n",  mal_endpoint_get_uri(endpoint));

  int found = -1;
  for (int i=0; i<poller_data->idx; i++) {
    if ((poller_data->endpoints[i] != NULL) &&
        (poller_data->endpoints[i] == mal_endpoint_get_endpoint_data(endpoint))) {
      found = i;
      break;
    }
  }

  if (found == -1) {
    clog_warning(maltcp_logger, " *** maltcp_del_endpoint: Not found\n");
    return -1;
  }

  poller_data->idx -= 1;
  for (int i=found; i<poller_data->idx; i++) {
    poller_data->endpoints[i] = poller_data->endpoints[i+1];
  }
  poller_data->endpoints[poller_data->idx] = NULL;

  clog_debug(maltcp_logger, " *** maltcp_del_endpoint: OK\n");
  return 0;
}
예제 #6
0
파일: tgdb.cpp 프로젝트: ibuclaw/cgdb
int tgdb_process(struct tgdb * tgdb)
{
    const int n = 4096;
    static char buf[n];
    ssize_t size;
    int result = 0;

    // Cleanup those zombies!
    tgdb_handle_sigchld(tgdb);

    // If ^c has been typed at the prompt, clear the queues
    tgdb_handle_control_c(tgdb);

    size = io_read(tgdb->debugger_stdout, buf, n);
    if (size < 0) {
        // Error reading from GDB
        clog_error(CLOG_CGDB, "Error reading from gdb's stdout, closing down");
        result = -1;
        tgdb_add_quit_command(tgdb);
    } else if (size == 0) {
        // Read EOF from GDB
        clog_info(CLOG_GDBIO, "read EOF from GDB, closing down");
        tgdb_add_quit_command(tgdb);
    } else {
        // Read some GDB console output, process it
        result = annotations_parser_io(tgdb->parser, buf, size);
    }

    return result;
}
예제 #7
0
파일: pacman.c 프로젝트: dcreager/buzzy
static int
bz_pacman__install__is_needed(void *user_data, bool *is_needed)
{
    struct bz_env  *env = user_data;
    struct bz_value  *ctx = bz_env_as_value(env);
    const char  *package_name;
    struct bz_version  *package_version;
    bool  force;

    rii_check(bz_install_dependency_string("pacman", ctx));
    rip_check(package_name = bz_env_get_string(env, "name", true));
    rie_check(force = bz_env_get_bool(env, "force", true));

    if (force) {
        *is_needed = true;
        clog_info("(%s) Force installation of package",
                  package_name);
        return 0;
    } else {
        struct bz_version  *installed;

        clog_info("(%s) Check whether pacman package is installed",
                  package_name);
        rip_check(package_version = bz_env_get_version(env, "version", true));
        ee_check(installed = bz_arch_native_version_installed(package_name));

        if (installed == NULL) {
            clog_info("(%s) Package is not installed", package_name);
            *is_needed = true;
            return 0;
        } else {
            *is_needed = (bz_version_cmp(installed, package_version) < 0);
            clog_info("(%s) Installed version %s is %s than %s",
                      package_name,
                      bz_version_to_string(installed),
                      *is_needed? "older": "newer",
                      bz_version_to_string(package_version));
            bz_version_free(installed);
            return 0;
        }
    }

error:
    bz_version_free(package_version);
    return -1;
}
예제 #8
0
파일: maltcp_ctx.c 프로젝트: ccsdsmo/malc
maltcp_endpoint_data_t* maltcp_get_endpoint(maltcp_poller_data_t *poller_data, zsock_t *socket) {
  clog_info(maltcp_logger, " *** mal_routing_get_endpoint: \n");

  for (int i=0; i<poller_data->idx; i++) {
    if (poller_data->endpoints[i]->socket == socket) {
      clog_debug(maltcp_logger, " *** mal_routing_get_endpoint: OK\n");
      return poller_data->endpoints[i];
    }
  }
  return NULL;
}
예제 #9
0
파일: maltcp_ctx.c 프로젝트: ccsdsmo/malc
int maltcp_add_endpoint(maltcp_poller_data_t *poller_data, mal_endpoint_t *endpoint) {
  clog_info(maltcp_logger, " *** maltcp_add_endpoint: %s\n", mal_endpoint_get_uri(endpoint));

  if (poller_data->idx < poller_data->max) {
    // Includes the structure in the table
    poller_data->endpoints[poller_data->idx++] =
        (maltcp_endpoint_data_t *) mal_endpoint_get_endpoint_data(endpoint);
    return 0;
  } else {
    clog_error(maltcp_logger, "Error :: Cannot add more than %d endpoints\n", poller_data->max);
    return -1;
  }
}
예제 #10
0
파일: pacman.c 프로젝트: dcreager/buzzy
static int
bz_pacman__uninstall__is_needed(void *user_data, bool *is_needed)
{
    struct bz_env  *env = user_data;
    struct bz_value  *ctx = bz_env_as_value(env);
    const char  *package_name;
    struct bz_version  *installed;
    rii_check(bz_install_dependency_string("pacman", ctx));
    rip_check(package_name = bz_env_get_string(env, "name", true));
    clog_info("(%s) Check whether pacman package is installed",
              package_name);
    rie_check(installed = bz_arch_native_version_installed(package_name));
    if (installed == NULL) {
        clog_info("(%s) Package is not installed", package_name);
        *is_needed = false;
    } else {
        clog_info("(%s) Version %s is installed",
                  package_name, bz_version_to_string(installed));
        *is_needed = true;
        bz_version_free(installed);
    }
    return 0;
}
예제 #11
0
파일: pacman.c 프로젝트: dcreager/buzzy
static int
bz_pacman__uninstall(void *user_data)
{
    struct bz_env  *env = user_data;
    const char  *package_name;

    rii_check(bz_uninstall_message(env, "pacman"));

    rip_check(package_name = bz_env_get_string(env, "name", true));
    clog_info("(%s) Uninstall using pacman", package_name);
    return bz_subprocess_run
        (false, NULL,
         "sudo", "pacman", "-R", "--noconfirm", package_name,
         NULL);
}
예제 #12
0
파일: pacman.c 프로젝트: dcreager/buzzy
static int
bz_pacman__install(void *user_data)
{
    struct bz_env  *env = user_data;
    const char  *package_name;
    struct cork_path  *package_file;

    rii_check(bz_install_message(env, "pacman"));

    rip_check(package_name = bz_env_get_string(env, "name", true));
    rip_check(package_file = bz_env_get_path(env, "pacman.package_file", true));
    clog_info("(%s) Install %s using pacman",
              package_name, cork_path_get(package_file));
    return bz_subprocess_run
        (false, NULL,
         "sudo", "pacman", "-U", "--noconfirm", cork_path_get(package_file),
         NULL);
}
예제 #13
0
파일: autotools.c 프로젝트: dcreager/buzzy
static int
bz_autotools__test(void *user_data)
{
    struct bz_env  *env = user_data;
    const char  *package_name;
    struct cork_path  *build_dir;
    bool  verbose;
    struct cork_exec  *exec;

    rii_check(bz_test_message(env, "autotools"));

    /* $ make check */
    rip_check(package_name = bz_env_get_string(env, "name", true));
    clog_info("(%s) Test using autotools", package_name);
    rip_check(build_dir = bz_env_get_path(env, "build_dir", true));
    rie_check(verbose = bz_env_get_bool(env, "verbose", true));
    exec = cork_exec_new("make");
    cork_exec_add_param(exec, "make");
    cork_exec_add_param(exec, "check");
    cork_exec_set_cwd(exec, cork_path_get(build_dir));
    return bz_subprocess_run_exec(verbose, NULL, exec);
}
예제 #14
0
파일: autotools.c 프로젝트: dcreager/buzzy
static int
bz_autotools__build(void *user_data)
{
    struct bz_env  *env = user_data;
    struct bz_value  *ctx = bz_env_as_value(env);
    const char  *package_name;
    struct cork_path  *build_dir;
    struct cork_path  *source_dir;
    struct cork_path  *configure;
    struct bz_value  *configure_args;
    const char  *pkgconfig_path;
    bool  exists;
    bool  verbose;
    struct cork_exec  *exec;
    struct cork_env  *exec_env;
    struct cork_buffer  buf = CORK_BUFFER_INIT();

    rii_check(bz_install_dependency_string("autoconf", ctx));
    rii_check(bz_install_dependency_string("automake", ctx));
    rii_check(bz_build_message(env, "autotools"));

    rip_check(package_name = bz_env_get_string(env, "name", true));
    rip_check(build_dir = bz_env_get_path(env, "build_dir", true));
    rip_check(source_dir = bz_env_get_path(env, "source_dir", true));
    rip_check(configure =
              bz_env_get_path(env, "autotools.configure.configure", true));
    rie_check(pkgconfig_path = bz_env_get_string(env, "pkgconfig.path", false));
    rie_check(verbose = bz_env_get_bool(env, "verbose", true));

    /* Create the build path */
    rii_check(bz_create_directory(cork_path_get(build_dir), 0750));

    clog_info("(%s) Configure using autotools", package_name);

    /* $ autoreconf -i */
    rii_check(bz_file_exists(cork_path_get(configure), &exists));
    if (!exists) {
        exec = cork_exec_new("autoreconf");
        cork_exec_add_param(exec, "autoreconf");
        cork_exec_add_param(exec, "-i");
        cork_exec_set_cwd(exec, cork_path_get(source_dir));
        ei_check(bz_subprocess_run_exec(verbose, NULL, exec));
    }

#define add_dir(buzzy_name, param_name) \
    do { \
        struct cork_path  *value; \
        ep_check(value = bz_env_get_path(env, buzzy_name, true)); \
        cork_buffer_printf(&buf, "--" param_name "=%s", cork_path_get(value)); \
        cork_exec_add_param(exec, buf.buf); \
    } while (0)

    /* $ ./configure ... */
    exec = cork_exec_new(cork_path_get(configure));
    exec_env = cork_env_clone_current();
    cork_exec_set_env(exec, exec_env);
    cork_exec_add_param(exec, cork_path_get(configure));
    add_dir("prefix", "prefix");
    add_dir("exec_prefix", "exec-prefix");
    add_dir("bin_dir", "bindir");
    add_dir("sbin_dir", "sbindir");
    add_dir("lib_dir", "libdir");
    add_dir("libexec_dir", "libexecdir");
    add_dir("share_dir", "datadir");
    add_dir("man_dir", "mandir");

    /* Add custom configure arguments, if given. */
    configure_args = bz_env_get_value(env, "autotools.configure.args");
    if (configure_args != NULL) {
        struct bz_configure_add_arg  state = { exec, env };

        switch (bz_value_kind(configure_args)) {
            case BZ_VALUE_SCALAR:
                ei_check(bz_configure_add_arg(&state, configure_args));
                break;

            case BZ_VALUE_ARRAY:
                ei_check(bz_array_value_map
                         (configure_args, &state, bz_configure_add_arg));
                break;

            case BZ_VALUE_MAP:
                bz_bad_config("autotools.configure.args cannot be a map");
                goto error;

            default:
                cork_unreachable();
        }
    }

    cork_exec_set_cwd(exec, cork_path_get(build_dir));
    if (pkgconfig_path != NULL) {
        cork_env_add(exec_env, "PKG_CONFIG_PATH", pkgconfig_path);
    }
    ei_check(bz_subprocess_run_exec(verbose, NULL, exec));

    /* $ make */
    clog_info("(%s) Build using autotools", package_name);
    exec = cork_exec_new("make");
    cork_exec_add_param(exec, "make");
    cork_exec_set_cwd(exec, cork_path_get(build_dir));
    ei_check(bz_subprocess_run_exec(verbose, NULL, exec));

    cork_buffer_done(&buf);
    return 0;

error:
    cork_buffer_done(&buf);
    return -1;
}
예제 #15
0
파일: maltcp_ctx.c 프로젝트: ccsdsmo/malc
// Must be compliant with MAL virtual function: void *self
int maltcp_ctx_send_message(void *self, mal_endpoint_t *mal_endpoint, mal_message_t *mal_message) {
  maltcp_ctx_t *maltcp_ctx = (maltcp_ctx_t *) self;

  if (clog_is_loggable(maltcp_logger, CLOG_INFO_LEVEL)) {
    clog_info(maltcp_logger, "maltcp_ctx_send_message:\n");
    mal_message_print(mal_message);
    clog_info(maltcp_logger, "\n");
  }

  int rc = 0;

  mal_uri_t *uri_to = mal_message_get_uri_to(mal_message);
  clog_debug(maltcp_logger, "maltcp_ctx_send_message: uri_to=%s\n", uri_to);

  char *peer_uri = maltcp_get_base_uri(uri_to);
  clog_debug(maltcp_logger, "maltcp_ctx_send_message: peer_uri=%s\n", peer_uri);

  maltcp_ctx_connection_t *cnx_ptr = maltcp_ctx_socket_connect(maltcp_ctx, peer_uri);
  if (cnx_ptr == NULL) {
    clog_error(maltcp_logger, "maltcp_ctx_send_message: cannot create connection for %s.\n", peer_uri);
    free(peer_uri);
    return -1;
  }
  free(peer_uri);

  // Note: We could use virtual allocation and initialization functions from encoder
  // rather than malbinary interface.
  malbinary_cursor_t cursor;
  malbinary_cursor_reset(&cursor);

  // TODO: In a first time we should separate the header and body size in order to send them
  // in separate frames. In a second time we should cut the message in multiples frames.

  // maltcp_add_message_encoding_length should not add body_length to encoding length
  // bytes should content uniquely the header
  // maltcp_encode_message should not copy the body to the bytes array
  // we should creates and send 2 frames

  // 'maltcp' encoding format of the MAL header
  rc = maltcp_add_message_encoding_length(maltcp_ctx->maltcp_header, mal_message, maltcp_ctx->encoder, &cursor);
  if (rc < 0)
    return rc;

  clog_debug(maltcp_logger, "maltcp_ctx: encoding_length=%d\n", malbinary_cursor_get_length(&cursor));

  // Note: We could use virtual allocation and initialization functions from encoder
  // rather than malbinary interface.
  malbinary_cursor_init(&cursor,
      (char *) malloc(malbinary_cursor_get_length(&cursor)),
      malbinary_cursor_get_length(&cursor),
      0);

  clog_debug(maltcp_logger, "maltcp_ctx: mal_message_encode_malbinary\n");

  // 'maltcp' encoding format of the MAL header
  rc = maltcp_encode_message(maltcp_ctx->maltcp_header, mal_message, maltcp_ctx->encoder, &cursor);
  if (rc < 0)
    return rc;
  assert(cursor.body_length == cursor.body_offset);

  clog_debug(maltcp_logger, "maltcp_ctx: message is encoded: %d bytes\n", malbinary_cursor_get_offset(&cursor));

  // send the message
  if (maltcp_ctx_socket_send(cnx_ptr, &cursor) < 0)
    return -1;

  return 0;
}
예제 #16
0
파일: pacman.c 프로젝트: dcreager/buzzy
static int
bz_pacman__package(void *user_data)
{
    struct bz_env  *env = user_data;
    struct bz_value  *ctx = bz_env_as_value(env);
    struct cork_path  *staging_dir;
    struct cork_path  *binary_package_dir;
    struct cork_path  *package_build_dir;
    struct cork_path  *pkgbuild;
    struct cork_path  *package_file;
    const char  *package_name;
    const char  *version;
    const char  *pkgrel;
    const char  *pkgext;
    const char  *architecture;
    const char  *license;
    bool  verbose;

    struct cork_env  *exec_env;
    struct cork_exec  *exec;
    struct cork_buffer  buf = CORK_BUFFER_INIT();
    bool  staging_exists;

    rii_check(bz_install_dependency_string("pacman", ctx));
    rii_check(bz_package_message(env, "pacman"));

    rip_check(package_name = bz_env_get_string(env, "name", true));
    clog_info("(%s) Package using pacman", package_name);

    rip_check(staging_dir = bz_env_get_path(env, "staging_dir", true));
    rip_check(binary_package_dir =
              bz_env_get_path(env, "binary_package_dir", true));
    rip_check(package_build_dir =
              bz_env_get_path(env, "package_build_dir", true));
    rip_check(pkgbuild = bz_env_get_path(env, "pacman.pkgbuild", true));
    rip_check(package_file = bz_env_get_path(env, "pacman.package_file", true));
    rip_check(version = bz_env_get_string(env, "pacman.version", true));
    rip_check(pkgrel = bz_env_get_string(env, "pacman.pkgrel", true));
    rip_check(pkgext = bz_env_get_string(env, "pacman.pkgext", true));
    rip_check(architecture = bz_env_get_string(env, "pacman.arch", true));
    rip_check(license = bz_env_get_string(env, "license", true));
    rie_check(verbose = bz_env_get_bool(env, "verbose", true));

    rii_check(bz_file_exists(cork_path_get(staging_dir), &staging_exists));
    if (CORK_UNLIKELY(!staging_exists)) {
        cork_error_set_printf
            (ENOENT, "Staging directory %s does not exist",
             cork_path_get(staging_dir));
        return -1;
    }

    /* NOTE: pacman runs ldconfig automatically, so unlike the other packagers,
     * we do NOT need to add an ldconfig call to the post-install and
     * post-remove scripts. */

    /* Create the temporary directory and the packaging destination */
    rii_check(bz_create_directory(cork_path_get(package_build_dir), 0750));
    rii_check(bz_create_directory(cork_path_get(binary_package_dir), 0750));

    /* Create a PKGBUILD file for this package */
    cork_buffer_append_printf(&buf, "pkgname='%s'\n", package_name);
    cork_buffer_append_printf(&buf, "pkgver='%s'\n", version);
    cork_buffer_append_printf(&buf, "pkgrel='%s'\n", pkgrel);
    cork_buffer_append_printf(&buf, "arch=('%s')\n", architecture);
    cork_buffer_append_printf(&buf, "license=('%s')\n", license);
    rii_check(bz_pacman_fill_deps(env, &buf, "depends", "dependencies"));
    cork_buffer_append_printf(&buf,
        "package () {\n"
        "    rm -rf \"${pkgdir}\"\n"
        "    cp -a '%s' \"${pkgdir}\"\n"
        "}\n",
        cork_path_get(staging_dir)
    );

    /* Add pre- and post-install scripts, if necessary. */
    rii_check(bz_pacman_add_install_scripts(env, &buf));

    ei_check(bz_create_file(cork_path_get(pkgbuild), &buf, 0640));
    cork_buffer_done(&buf);

    exec_env = cork_env_clone_current();
    cork_env_add(exec_env, "PKGDEST", cork_path_get(binary_package_dir));
    cork_env_add(exec_env, "PKGEXT", pkgext);
    exec = cork_exec_new_with_params("makepkg", "-sf", NULL);
    cork_exec_set_cwd(exec, cork_path_get(package_build_dir));
    cork_exec_set_env(exec, exec_env);
    clog_info("(%s) Create %s using pacman",
              package_name, cork_path_get(package_file));
    return bz_subprocess_run_exec(verbose, NULL, exec);

error:
    cork_buffer_done(&buf);
    return -1;
}