# endif
}
-# ifndef NOLCL
-
# ifdef WIN32
extern /*@external@*/ int _flushall (void) /*@modifies fileSystem@*/ ;
# endif
res = system (cstring_toCharsSafe (cmd));
return res;
}
-# endif
# ifndef unlink
/* This should be defined by unistd.h */
osd_setWorkingDirectory ();
}
+void osd_destroyMod (void)
+{
+ cstring_free (osd_cwd);
+ osd_cwd = cstring_undefined;
+}
+
cstring osd_absolutePath (cstring cwd, cstring filename)
{
# if defined (UNIX) || defined (OS2)
cstring osd_outputPath (cstring filename)
{
+ /*@i2534 fix this junky code once and for all! */
# if defined (UNIX) || defined (OS2)
char *rel_buffer;
char *rel_buf_p;
/*@access cstring@*/
path_p = filename;
- rel_buf_p = rel_buffer = (char *) dmalloc (filename_len);
+ rel_buffer = (char *) dmalloc (filename_len);
+ rel_buf_p = rel_buffer;
*rel_buf_p = '\0';
llassert (cwd_p != NULL);
if ((*cwd_p == '\0') && (*path_p == '\0' || osd_isConnectChar (*path_p))) /* whole pwd matched */
{
if (*path_p == '\0') /* input *is* the current path! */
- return cstring_makeLiteral (".");
+ {
+ cstring_free (rel_buffer);
+ return cstring_makeLiteral (".");
+ }
else
{
/*@i324 ! splint didn't report an errors for: return ++path_p; */
- return cstring_fromCharsNew (++path_p);
+ cstring_free (rel_buffer);
+ return cstring_fromCharsNew (path_p + 1);
}
}
else
{
+
+ /* drl 2002-10/14 I had to put this code back*/
+ /* the case that needs it is when splint is given an absolute path name of a file outside of the current directory and the subdirectories below the current directory. e.g. cd /home/; splint /tmp/prog.c
+ */
+
/* evans 2002-02-05 This is horrible code, which I've removed. I couldn't find any
** test cases that need it, so I hope I'm not breaking anything.
*/
+ /*#if 0*/
-# if 0
if (*path_p != '\0')
{
--cwd_p;
--path_p;
- while (!osd_isConnectChar (*cwd_p)) /* backup to last slash */
+
+ while (cwd_p >= osd_cwd && !osd_isConnectChar (*cwd_p)) /* backup to last slash */
{
--cwd_p;
--path_p;
Reject it if longer than the input. */
if (unmatched_slash_count * 3 + strlen (path_p) >= filename_len)
{
+ cstring_free (rel_buffer);
+ /* fprintf (stderr, "Returning filename: %s [%p]\n", filename); */
return cstring_copy (filename);
}
-# endif
-
+
+ /*drl 10-14-2002 end previously removed code */
+ /*#endif*/
/* For each of them, put a `../' at the beginning of the short name. */
while (unmatched_slash_count-- > 0)
{
}
/* Then tack on the unmatched part of the desired file's name. */
+
do
{
if (rel_buffer + filename_len <= rel_buf_p)
} /*@-usereleased@*/
while ((*rel_buf_p++ = *path_p++) != '\0') ;
+
/*@=usereleased@*/ /*@i523! shouldn't need these */
--rel_buf_p;
if (osd_isConnectChar (*(rel_buf_p-1)))
*--rel_buf_p = '\0';
+ /* fprintf (stderr, "Returning buffer: %s [%p]\n", rel_buffer, rel_buffer); */
return rel_buffer;
}
/*@noaccess cstring@*/