/*
* 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 <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#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;
}
syntax highlighted by Code2HTML, v. 0.9.1