X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Ffile-name.c;h=2e8dd76239922edce1d9e2fa49ef6a76df7fecd5;hb=4ec88a3abb859304f42a5905231704b2ecfaf711;hp=acf27c3ce882e67a7e549354d026d547c602fa31;hpb=44326932c8227c64a87f7a92ef16ce83c2fba2d4;p=pspp diff --git a/src/data/file-name.c b/src/data/file-name.c index acf27c3ce8..2e8dd76239 100644 --- a/src/data/file-name.c +++ b/src/data/file-name.c @@ -1,5 +1,5 @@ /* PSPP - computes sample statistics. - Copyright (C) 1997-9, 2000, 2006 Free Software Foundation, Inc. + Copyright (C) 1997-9, 2000, 2006, 2007 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 @@ -18,21 +18,20 @@ #include -#include "file-name.h" +#include #include #include #include #include -#include "canonicalize.h" #include "intprops.h" #include "minmax.h" -#include "settings.h" +#include "dirname.h" #include #include -#include +#include #include #include #include @@ -42,6 +41,11 @@ #include #include + +#if defined _WIN32 || defined __WIN32__ +#define WIN32_LEAN_AND_MEAN /* avoid including junk */ +#include +#endif /* Initialization. */ @@ -128,7 +132,7 @@ fn_search_path (const char *base_name, const char *path_) /* Construct file name. */ ds_clear (&file); ds_put_substring (&file, dir); - if (!ds_is_empty (&file) && ds_last (&file) != '/') + if (!ds_is_empty (&file) && !ISSLASH (ds_last (&file))) ds_put_char (&file, '/'); ds_put_cstr (&file, base_name); @@ -153,25 +157,7 @@ fn_search_path (const char *base_name, const char *path_) char * fn_dir_name (const char *file_name) { - const char *p; - char *s; - size_t len; - - len = strlen (file_name); - if (len == 1 && file_name[0] == '/') - p = file_name + 1; - else if (len && file_name[len - 1] == '/') - p = buf_find_reverse (file_name, len - 1, file_name + len - 1, 1); - else - p = strrchr (file_name, '/'); - if (p == NULL) - p = file_name; - - s = xmalloc (p - file_name + 1); - memcpy (s, file_name, p - file_name); - s[p - file_name] = 0; - - return s; + return dir_name (file_name); } /* Returns the extension part of FILE_NAME as a malloc()'d string. @@ -192,7 +178,7 @@ fn_extension (const char *file_name) bool fn_is_absolute (const char *name) { - return name[0] == '/'; + return IS_ABSOLUTE_FILE_NAME (name); } /* Returns true if FILE_NAME is a virtual file that doesn't @@ -334,7 +320,7 @@ fn_close (const char *fn, FILE *f) return fclose (f); } -#ifdef unix +#if !(defined _WIN32 || defined __WIN32__) /* A file's identity. */ struct file_identity { @@ -383,7 +369,7 @@ fn_compare_file_identities (const struct file_identity *a, else return a->inode < b->inode ? -1 : a->inode > b->inode; } -#else /* not unix */ +#else /* Windows */ /* A file's identity. */ struct file_identity { @@ -400,10 +386,13 @@ struct file_identity * fn_get_identity (const char *file_name) { struct file_identity *identity = xmalloc (sizeof *identity); - char *cname = canonicalize_filename_mode (file_name, CAN_MISSING); - if (cname == NULL) - cname = xstrdup (file_name); - identity->normalized_file_name = cname; + char cname[PATH_MAX]; + + if (GetFullPathName (file_name, sizeof cname, cname, NULL)) + identity->normalized_file_name = xstrdup (cname); + else + identity->normalized_file_name = xstrdup (file_name); + return identity; } @@ -423,6 +412,6 @@ int fn_compare_file_identities (const struct file_identity *a, const struct file_identity *b) { - return strcmp (a->normalized_file_name, b->normalized_file_name); + return strcasecmp (a->normalized_file_name, b->normalized_file_name); } -#endif /* not unix */ +#endif /* Windows */