/* * Copyright (c) 1999 * Steven G. Kargl. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * This software is provided by Steven G. Kargl and contributors ``as is'' and * any express or implied warranties, including, but not limited to, the implied * warranties of merchantability and fitness for a particular purpose are * disclaimed. In no event shall Steven G. Kargl or contributors be liable for * any direct, indirect, incidental, special, exemplary, or consequential * damages (including, but not limited to, procurement of substitute goods or * services; loss of use, data, or profits; or business interruption) however * caused and on any theory of liability, whether in contract, strict liability, * or tort (including negligence or otherwise) arising in any way out of the * use of this software, even if advised of the possibility of such damage. */ #include #include #include #include #include "proto.h" char *gettmpdir(void) { struct stat sb; char *dir; dir = getenv("TMPDIR"); if (!dir) { /* TMPDIR not set */ dir = mkstring("/var/tmp"); if (stat(dir, &sb) == 0) { /* Check that we have a directory with rwx permission */ if (!(sb.st_mode & (S_IFDIR | S_IRUSR | S_IWUSR | S_IXUSR))) { fputs("f77: gettmpdir: check permissions for ", stderr); fprintf(stderr, "%s\n", dir); exit(1); } } else { free(dir); dir = mkstring("/tmp"); if (stat(dir, &sb) == 0) { /* Check that we have a directory with rwx permission */ if (!(sb.st_mode & (S_IFDIR | S_IRUSR | S_IWUSR | S_IXUSR))) { fputs("f77: gettmpdir: check permissions for ", stderr); fprintf(stderr, "%s\n", dir); exit(1); } } else { free(dir); dir = NULL; } } } else { /* TMPDIR */ if (stat(dir, &sb) == 0) { /* Check that we have a directory with rwx permission */ if (!(sb.st_mode & (S_IFDIR | S_IRUSR | S_IWUSR | S_IXUSR))) { fputs("f77: gettmpdir: check permissions for ", stderr); fprintf(stderr, "%s\n", dir); exit(1); } } else { fprintf(stderr, "f77: gettmpdir: can not stat %s\n", dir); exit(1); } } return dir; }