Exemplo n.º 1
0
/* Never fails. */
static int cmdline_get_module_path_via_argv(const char *argv, int overwrite)
{
    char buffer[PATH_MAX];
    int ret;

    if (overwrite) {
        /* Arbitrary order. */
        cmdline_free(g_module_basename);
        cmdline_free(g_module_dirname);
        cmdline_free(g_module_basename);
        g_module_basename = NULL;
        g_module_dirname = NULL;
    }

    if (!g_module_dirname) {
        ret = snprintf(buffer, sizeof(buffer), "%s", argv);
        if (ret >= 0 && (size_t)ret < sizeof(buffer)) {
            g_module_dirname = cmdline_strdup(dirname(buffer));
        }
    }

    if (!g_module_basename) {
        ret = snprintf(buffer, sizeof(buffer), "%s", argv);
        if (ret >= 0 && (size_t)ret < sizeof(buffer)) {
            g_module_basename = cmdline_strdup(basename(buffer));
        }
    }

    return 0;
}
Exemplo n.º 2
0
/* Only dirname is retrieved. */
static int cmdline_get_module_path_via_fd(const char *argv)
{
    char buffer[PATH_MAX];
    char path[128];
    char *ptr;
    int ret;
    int fd;

    if (g_module_dirname) {
        return 0;
    }

    ptr = cmdline_strdup(argv);
    fd = open(dirname(ptr), O_RDONLY | O_NOCTTY);
    cmdline_free(ptr);
    if (fd < 0) {
        return -1;
    }

    ret = snprintf(path, sizeof(path), "/proc/%d/fd/%d", getpid(), fd);
    if (ret < 0 || (size_t)ret >= sizeof(path)) {
        return -1;
    }

    ret = readlink(path, buffer, sizeof(buffer));

    close(fd);
    if (ret <= 0) {
        return -1;
    }

    buffer[ret] = '\0';
    g_module_dirname = cmdline_strdup(buffer);
    return 0;
}
Exemplo n.º 3
0
void cmdline_unset_process_name(void)
{
    size_t len;
    if (!g_saved_program_name) {
        return;
    }

    len = strlen(g_saved_program_name);
    memcpy(g_arg_name, g_saved_program_name, len);
    memset(g_arg_name + len, 0, g_max_length - len);
    cmdline_free(g_saved_program_name);
    g_saved_program_name = NULL;
}
Exemplo n.º 4
0
int main(int argc, char* argv[])
{
  #ifdef SEQ_ALIGN_VERBOSE
  printf("VERBOSE: on\n");
  #endif

  sw_set_default_scoring();
  cmd = cmdline_new(argc, argv, &scoring, SEQ_ALIGN_SW_CMD);

  // Align!
  sw = smith_waterman_new();
  result = alignment_create(256);

  if(cmd->seq1 != NULL)
  {
    // Align seq1 and seq2
    align(cmd->seq1, cmd->seq2, NULL, NULL);
  }

  // Align from files
  size_t i, num_of_file_pairs = cmdline_get_num_of_file_pairs(cmd);
  for(i = 0; i < num_of_file_pairs; i++)
  {
    const char *file1 = cmdline_get_file1(cmd, i);
    const char *file2 = cmdline_get_file2(cmd, i);
    if(file1 != NULL && *file1 == '\0' && file2 == NULL) {
      wait_on_keystroke = 1;
      file1 = "-";
    }
    align_from_file(file1, file2, &align_pair_from_file, !cmd->interactive);
  }

  // Free memory for storing alignment results
  smith_waterman_free(sw);
  alignment_free(result);

  cmdline_free(cmd);

  return EXIT_SUCCESS;
}
Exemplo n.º 5
0
/* Only dirname is retrieved. */
static int cmdline_get_module_path_via_cwd(const char *argv)
{
    char buffer[PATH_MAX];
    char cwd[PATH_MAX];
    char *ptr;
    char *pwd;
    int ret;

    if (g_module_dirname) {
        return 0;
    }

    if (!getcwd(cwd, sizeof(cwd))) {
        return -1;
    }

    pwd = NULL;
    if (*argv != '/') {
        ptr = cmdline_strdup(argv);
        ret = snprintf(buffer, sizeof(buffer), "%s/%s", cwd, dirname(ptr));
        cmdline_free(ptr);

        if (ret < 0 || (size_t)ret >= sizeof(buffer)) {
            return -1;
        }

        pwd = make_clean_path(buffer, 0);
    }

    if (!pwd) {
        return -1;
    }

    g_module_dirname = cmdline_strdup(pwd);
    free(pwd);
    return 0;
}
Exemplo n.º 6
0
void cmdline_shutdown(void)
{
    cmdline_free();

    lib_free(options);
}
Exemplo n.º 7
0
int cmdline_set_process_name(const char *fmt, ...)
{
    int with_prefix;
    int eraser;
    va_list ap;
    size_t max;
    size_t off;

    if (!g_max_length || !g_arg_name) {
        errno = EINVAL;
        return -1;
    }

    if (!fmt) {
        fmt = g_module_arg;
        with_prefix = 0;

    } else if (*fmt == '-') {
        with_prefix = 0;
        ++fmt;

    } else {
        with_prefix = g_prefix_length ? 1 : 0;
    }

    if (with_prefix) {
        if (g_prefix_length <= g_max_length) {
            off = g_prefix_length;
        } else {
            off = g_max_length;
        }

        memcpy(g_arg_name, g_prefix, off);
        max = g_max_length - off;

    } else {
        max = g_max_length;
        off = 0;
    }

    cmdline_free(g_saved_program_name);
    g_saved_program_name = cmdline_strdup(g_arg_name);

    /* g_max_length doesn't include the trailing zero, so add 1 to it. */
    va_start(ap, fmt);
    eraser = vsnprintf(g_arg_name + off, max + 1, fmt, ap);
    va_end(ap);
    if (eraser < 0) {
        return -1;
    }

    /* And we erase all remaining buffer to 0, since some OS might remember the old length. */
    if (max > (size_t)eraser) {
        off += eraser;
    } else {
        off += max;
    }

    memset(g_arg_name + off, 0, g_max_length - off);
    return 0;
}