home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 October
/
usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso
/
unix
/
volume17
/
e2
/
part01
/
find_hist.c
< prev
next >
Wrap
C/C++ Source or Header
|
1989-02-08
|
2KB
|
83 lines
#include "e.h"
/*
* find_hist()
*
* Find out where the history file is hiding. If E_HIST (currently this is
* "VIHIST") is defined, then use that. Otherwise use a default ($HOME/.e
* at the moment.)
*
* If E_HIST starts with a '/' then take it as an absolute path, otherwise
* take it relative to the home directory.
*
* Set up the name of the temporary file to be in the same directory as the
* history. This ensures 1) that we can write there and 2) that we can use
* rename(2) when we want to make it the new history. (I'd just use /tmp but
* that stops me from using rename).
*
*/
void
find_hist()
{
char *efile;
struct passwd *pwd;
uid = (int)getuid();
pwd = getpwuid(uid);
if (!pwd){
e_error("Could not get password file entry for uid %d.", uid);
}
home = pwd->pw_dir;
efile = getenv(E_HIST);
if (!efile){
/*
* E_HIST is not set.
* Use the default location and name for the history file (that
* is name = DEFAULT_HIST in the home directory.)
*
*/
ok_sprintf(ehist, "%s/%s", home, DEFAULT_HIST);
ok_sprintf(tmp_file, "%s/.e_tempXXXXXX", home);
}
else{
/*
* It was set.
*
*/
if (*efile == '/'){
/*
* It's an absolute pathname. Copy it into ehist and tmp_file.
* Zero the last '/' in tmp_file it to get the basename, then
* strcat the .e_tempXXXXXX stuff. The call to rindex() cannot
* fail to find a '/' since by this time we know that the first
* character of efile (and hence ehist and tmp_file) is '/'.
*
*/
strcpy(ehist, efile);
strcpy(tmp_file, efile);
*rindex(tmp_file, '/') = '\0';
strcat(tmp_file, "/.e_tempXXXXXX");
}
else{
/*
* Take it as being relative to the home directory.
*
*/
ok_sprintf(ehist, "%s/%s", home, efile);
ok_sprintf(tmp_file, "%s/.e_tempXXXXXX", home);
}
}
#ifdef Sysv
if (!getcwd(cwd, sizeof(cwd))){
#else
if (getwd(cwd) == (char *)0){
#endif
e_error("Could not get working directory.");
}
return;
}