X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Ffile-name.c;h=601afd5579e04a2ffff00193166989aedcd8e3b5;hb=2764b3157e26955a31af5f4aa7d14e27098ddf19;hp=14afd60e53be5f86e01963d6f0a9aa08927e5de3;hpb=2fb98b792ed39c7b39dbd6325e933c612c277000;p=pspp-builds.git diff --git a/src/data/file-name.c b/src/data/file-name.c index 14afd60e..601afd55 100644 --- a/src/data/file-name.c +++ b/src/data/file-name.c @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 1997-9, 2000, 2006, 2007 Free Software Foundation, Inc. + Copyright (C) 1997-9, 2000, 2006, 2007, 2009 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -138,6 +138,7 @@ fn_search_path (const char *base_name, const char *path_) if (!ds_is_empty (&file) && !ISSLASH (ds_last (&file))) ds_put_char (&file, '/'); ds_put_cstr (&file, base_name); + ds_relocate (&file); /* Check whether file exists. */ if (fn_exists (ds_cstr (&file))) @@ -447,37 +448,51 @@ fn_compare_file_identities (const struct file_identity *a, unsigned int fn_hash_identity (const struct file_identity *identity) { - unsigned int hash = identity->device ^ identity->inode; + unsigned int hash = hash_int (identity->device, identity->inode); if (identity->name != NULL) - hash ^= hsh_hash_string (identity->name); + hash = hash_string (identity->name, hash); return hash; } - - -#ifdef WINDOWS32 +#ifdef WIN32 /* Apparently windoze users like to see output dumped into their home directory, not the current directory (!) */ const char * default_output_path (void) { - static const char *home_dir = NULL; + static char *path = NULL; - /* Windows NT defines HOMEDRIVE and HOMEPATH. But give preference - to HOME, because the user can change HOME. */ - if (home_dir == NULL) + if ( path == NULL) { - const char *home_drive = getenv ("HOMEDRIVE"); - const char *home_path = getenv ("HOMEPATH"); + /* Windows NT defines HOMEDRIVE and HOMEPATH. But give preference + to HOME, because the user can change HOME. */ - if (home_drive != NULL && home_path != NULL) - home_dir = xasprintf ("%s%s%c", - home_drive, home_path, DIRECTORY_SEPARATOR); - else - home_dir = "c:/users/default/"; /* poor default */ + const char *home_dir = getenv ("HOME"); + int i; + + if (home_dir == NULL) + { + const char *home_drive = getenv ("HOMEDRIVE"); + const char *home_path = getenv ("HOMEPATH"); + + + if (home_drive != NULL && home_path != NULL) + home_dir = xasprintf ("%s%s", + home_drive, home_path); + } + + if (home_dir == NULL) + home_dir = "c:/users/default"; /* poor default */ + + path = xasprintf ("%s%c", home_dir, '/'); + + + for(i = 0; i < strlen (path); i++) + if (path[i] == '\\') path[i] = '/'; } - return home_dir; + + return path; } #else