コード例 #1
0
int
get_macosx_version (int *major_version_num, int *minor_version_num,
                    int *subminor_version_num)
{
    int exit_status = 1;
    char *tmp_name = tmpnam(NULL);
    if (tmp_name == NULL) {
        perror(global_prog_name);
        goto error_cleanup;
    }
    char *uname_cmd;
    int ret = asprintf(&uname_cmd, "uname -r > %s", tmp_name);
    if (ret == -1 || uname_cmd == NULL) {
        fprintf(stderr, "Could not allocate enough memory for command string: uname -r > %s\n", tmp_name);
        goto error_cleanup;
    }
    ret = system(uname_cmd);
    if (ret != 0) {
        fprintf(stderr, "error in %s: system(\"%s\") returned %d\n",
                global_prog_name, uname_cmd, ret);
        goto error_cleanup;
    }
    FILE *f = fopen(tmp_name, "r");
    if (f == NULL) {
        perror(global_prog_name);
        goto error_cleanup;
    }
    char buf[512];
    if (fgets(buf, sizeof(buf), f) == NULL) {
        perror(global_prog_name);
        goto error_cleanup;
    }
    ret = sscanf(buf, "%d.%d.%d",
                 major_version_num, minor_version_num, subminor_version_num);
    fclose(f);
    cleanup_temp_file(tmp_name);
    if (ret < 2) {
        fprintf(stderr, "%s: Output of 'uname -r' was '%s', from which no major and minor version number could be parsed.\n",
                global_prog_name, buf);
        exit(1);
    }
    return ret;

 error_cleanup:
    if (tmp_name != NULL) {
        cleanup_temp_file(tmp_name);
    }
    exit(exit_status);
}
コード例 #2
0
ファイル: output.c プロジェクト: AaronNGray/winflexbison
/* Delete a closed temporary FILE for diversion DIVNUM.  */
static int
m4_tmpremove (int divnum)
{
  if (divnum == tmp_file1_owner)
    {
      int result = close_stream_temp (tmp_file1);
      if (result)
        return result;
      tmp_file1_owner = 0;
    }
  else if (divnum == tmp_file2_owner)
    {
      int result = close_stream_temp (tmp_file2);
      if (result)
        return result;
      tmp_file2_owner = 0;
    }
  return cleanup_temp_file (output_temp_dir, m4_tmpname (divnum));
}