home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 mARCH / PCWK3A99.iso / Linux / DDD331 / DDD-3_1_.000 / DDD-3_1_ / ddd-3.1.1 / ddd / cwd.C < prev    next >
C/C++ Source or Header  |  1998-09-17  |  2KB  |  87 lines

  1. // $Id: cwd.C,v 1.4 1998/09/17 13:09:24 zeller Exp $ -*- C++ -*-
  2. // Get current working directory
  3.  
  4. // Copyright (C) 1998 Technische Universitaet Braunschweig, Germany.
  5. // Written by Andreas Zeller <zeller@ips.cs.tu-bs.de>.
  6. // 
  7. // This file is part of DDD.
  8. // 
  9. // DDD is free software; you can redistribute it and/or
  10. // modify it under the terms of the GNU General Public
  11. // License as published by the Free Software Foundation; either
  12. // version 2 of the License, or (at your option) any later version.
  13. // 
  14. // DDD is distributed in the hope that it will be useful,
  15. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  17. // See the GNU General Public License for more details.
  18. // 
  19. // You should have received a copy of the GNU General Public
  20. // License along with DDD -- see the file COPYING.
  21. // If not, write to the Free Software Foundation, Inc.,
  22. // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  23. // 
  24. // DDD is the data display debugger.
  25. // For details, see the DDD World-Wide-Web page, 
  26. // `http://www.cs.tu-bs.de/softech/ddd/',
  27. // or send a mail to the DDD developers <ddd@ips.cs.tu-bs.de>.
  28.  
  29. char cwd_rcsid[] = 
  30.     "$Id: cwd.C,v 1.4 1998/09/17 13:09:24 zeller Exp $";
  31.  
  32. #ifdef __GNUG__
  33. #pragma implementation
  34. #endif
  35.  
  36. #include "cwd.h"
  37.  
  38. #include <sys/types.h>
  39. #include <sys/stat.h>
  40. #include <unistd.h>
  41. #include <stdio.h>
  42. #include <stdlib.h>
  43.  
  44. #include <limits.h>
  45.  
  46. #ifndef PATH_MAX
  47. #define PATH_MAX 4096
  48. #endif
  49.  
  50. // Return true iff S1 and S2 are identical
  51. bool same_file(const string& s1, const string& s2)
  52. {
  53.     if (s1 == s2)
  54.     return true;
  55.  
  56.     struct stat s1_stat;
  57.     struct stat s2_stat;
  58.  
  59.     if (stat(s1, &s1_stat) == 0 &&
  60.     stat(s2, &s2_stat) == 0 &&
  61.     s1_stat.st_dev == s2_stat.st_dev &&
  62.     s1_stat.st_ino == s2_stat.st_ino)
  63.     return true;
  64.  
  65.     return false;
  66. }
  67.  
  68. // Return current working directory
  69. string cwd()
  70. {
  71.     // Try $PWD
  72.     char *pwd = getenv("PWD");
  73.     if (pwd != 0 && same_file(pwd, "."))
  74.     {
  75.     // $PWD points to the current dirctory
  76.     return pwd;
  77.     }
  78.  
  79.     // Try getcwd()
  80.     char buffer[PATH_MAX];
  81.     if (getcwd(buffer, sizeof(buffer)) == buffer)
  82.         return buffer;
  83.  
  84.     // Everything failed -- return "."
  85.     return ".";
  86. }
  87.