ftp.delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2007/05/31/06:48:53

X-Authentication-Warning: delorie.com: mail set sender to djgpp-bounces using -f
Date: Thu, 31 May 2007 12:35:31 +0200
From: Robert Riebisch <Robert DOT Riebisch AT arcor DOT de>
User-Agent: Thunderbird 1.5.0.12 (Windows/20070509)
MIME-Version: 1.0
Newsgroups: comp.os.msdos.djgpp
Subject: Finding a program's base directory
Lines: 45
Message-ID: <465ea4ec$0$23146$9b4e6d93@newsspool1.arcor-online.net>
Organization: Arcor
NNTP-Posting-Date: 31 May 2007 12:35:24 CEST
NNTP-Posting-Host: 2d2db171.newsspool1.arcor-online.net
X-Trace: DXC=eb`?=4\QMO5_A0jCfgHO6>ic==]BZ:af>4Fo<]lROoR1Fl8W>\BH3Y2<2Wifi:>gf9B5lc^0gQ=41?lK5CCSWJM4k;WSL`n5Im2:0;EIU337C5A14d]]KebZ;
X-Complaints-To: usenet-abuse AT arcor DOT de
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp
Reply-To: djgpp AT delorie DOT com

Hi!

I want to find a program's base directory. Program binary is in, e.g.,
`C:\PROGRAMS\FOO\BIN\BAR.EXE'. get_base_dir() is called with argv[0] in
pgm and shall return `C:\PROGRAMS\FOO'.

The following code works for me, but as I'm no C expert, I want you to
have a look at it. Specifically I'm not sure about the `base_path !=
NULL' comparison. Is it necessary or just a waste? Thanks in advance!

***
# ifdef __DJGPP__
#  include <crt0.h>
int _crt0_startup_flags = _CRT0_FLAG_USE_DOS_SLASHES;
#  endif
***

***
static char *get_base_dir(char *pgm)
{
   static char base_path[MAX_PATH_LEN];
   char *p;

   strncpy (base_path, pgm, MAX_PATH_LEN);
   if (base_path != NULL)
     {
	/* drop file name */
	p = strrchr (base_path, '\\');
	if (p != NULL)
	  {
	     *p = '\0';
	     /* drop also 'bin' */
	     p = strrchr (base_path, '\\');
	     if (p != NULL)
	       *p = '\0';
	  }
     }
   return base_path;
}
***

-- 
Robert Riebisch
Bitte NUR in der Newsgroup antworten!
Please reply to the Newsgroup ONLY!

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019