if (name)
{
unlink (name);
- free (name);
+ Safe_free (name);
}
return 0;
}
/* if allocation required check is needed
then check if the symbol really requires
allocation only for local variables */
- if (!sym->allocreq) continue;
if (arFlag && !IS_AGGREGATE (sym->type) &&
!(sym->_isparm && !IS_REGPARM (sym->etype)) &&
!sym->allocreq && sym->level)
continue;
+ /* for bitvar locals and parameters */
+ if (!arFlag && !sym->allocreq && sym->level
+ && !SPEC_ABSA (sym->etype)) {
+ continue;
+ }
+
/* if global variable & not static or extern
and addPublics allowed then add it to the public set */
if ((sym->level == 0 ||
}
#endif
+/** Creates a temporary file name a'la tmpnam which avoids the bugs
+ in cygwin wrt c:\tmp.
+ Scans, in order: TMP, TEMP, TMPDIR, else uses tmpfile().
+*/
+char *
+tempfilename (void)
+{
+#if !defined(_MSC_VER)
+ const char *tmpdir = NULL;
+ if (getenv ("TMP"))
+ tmpdir = getenv ("TMP");
+ else if (getenv ("TEMP"))
+ tmpdir = getenv ("TEMP");
+ else if (getenv ("TMPDIR"))
+ tmpdir = getenv ("TMPDIR");
+ if (tmpdir)
+ {
+ char *name = tempnam (tmpdir, "sdcc");
+ if (name)
+ {
+ return name;
+ }
+ }
+#endif
+ return tmpnam (NULL);
+}
+
/** Creates a temporary file a'la tmpfile which avoids the bugs
in cygwin wrt c:\tmp.
Scans, in order: TMP, TEMP, TMPDIR, else uses tmpfile().
tmpdir = getenv ("TMPDIR");
if (tmpdir)
{
- char *name = tempnam (tmpdir, "sdcc");
+ char *name = Safe_strdup( tempnam (tmpdir, "sdcc"));
if (name)
{
FILE *fp = fopen (name, "w+b");