ftp.nice.ch/pub/next/unix/editor/e2.N.bs.tar.gz#/e2.N.bs/find_hist.c

This is find_hist.c in view mode; [Download] [Up]

#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;
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.