| --- ccache.c |
| +++ ccache.c |
| @@ -836,6 +836,13 @@ |
| { |
| /* find the real compiler */ |
| find_compiler(argc, argv); |
| + |
| + /* use the real compiler if HOME is not set */ |
| + if (!cache_dir) { |
| + cc_log("Unable to determine home directory\n"); |
| + cc_log("ccache is disabled\n"); |
| + failed(); |
| + } |
| |
| /* we might be disabled */ |
| if (getenv("CCACHE_DISABLE")) { |
| @@ -895,6 +902,13 @@ |
| printf("-V print version number\n"); |
| } |
| |
| +static void check_cache_dir(void) |
| +{ |
| + if (!cache_dir) { |
| + fatal("Unable to determine home directory"); |
| + } |
| +} |
| + |
| /* the main program when not doing a compile */ |
| static int ccache_main(int argc, char *argv[]) |
| { |
| @@ -914,31 +928,37 @@ |
| exit(0); |
| |
| case 's': |
| + check_cache_dir(); |
| stats_summary(); |
| break; |
| |
| case 'c': |
| + check_cache_dir(); |
| cleanup_all(cache_dir); |
| printf("Cleaned cache\n"); |
| break; |
| |
| case 'C': |
| + check_cache_dir(); |
| wipe_all(cache_dir); |
| printf("Cleared cache\n"); |
| break; |
| |
| case 'z': |
| + check_cache_dir(); |
| stats_zero(); |
| printf("Statistics cleared\n"); |
| break; |
| |
| case 'F': |
| + check_cache_dir(); |
| v = atoi(optarg); |
| stats_set_limits(v, -1); |
| printf("Set cache file limit to %u\n", (unsigned)v); |
| break; |
| |
| case 'M': |
| + check_cache_dir(); |
| v = value_units(optarg); |
| stats_set_limits(-1, v); |
| printf("Set cache size limit to %uk\n", (unsigned)v); |
| @@ -983,7 +1003,10 @@ |
| |
| cache_dir = getenv("CCACHE_DIR"); |
| if (!cache_dir) { |
| - x_asprintf(&cache_dir, "%s/.ccache", get_home_directory()); |
| + const char *home_directory = get_home_directory(); |
| + if (home_directory) { |
| + x_asprintf(&cache_dir, "%s/.ccache", home_directory); |
| + } |
| } |
| |
| temp_dir = getenv("CCACHE_TEMPDIR"); |
| @@ -1023,7 +1046,7 @@ |
| } |
| |
| /* make sure the cache dir exists */ |
| - if (create_dir(cache_dir) != 0) { |
| + if (cache_dir && (create_dir(cache_dir) != 0)) { |
| fprintf(stderr,"ccache: failed to create %s (%s)\n", |
| cache_dir, strerror(errno)); |
| exit(1); |
| --- util.c |
| +++ util.c |
| @@ -448,7 +448,7 @@ |
| } |
| } |
| #endif |
| - fatal("Unable to determine home directory"); |
| + cc_log("Unable to determine home directory"); |
| return NULL; |
| } |
| |