Re: ithreads doesn't like usedl=n
[p5sagit/p5-mst-13.2.git] / NetWare / NWUtil.c
index 9cc5b5c..5174fe3 100644 (file)
@@ -735,6 +735,7 @@ char* fnMy_MkTemp(char* templatestr)
 
        char termchar = '\0';
        char letter = 'a';
+       char letter1 = 'a';
 
 
        if (templatestr && (pXs = strstr(templatestr, (char *)"XXXXXX")))
@@ -753,6 +754,19 @@ char* fnMy_MkTemp(char* templatestr)
                else
                        pPid = numbuf;
 
+/**
+               Backtick operation uses temp files that are stored under NWDEFPERLTEMP
+               directory. They are temporarily used and then cleaned up after usage.
+               In cases where multiple backtick operations are used that call some
+               complex scripts, new temp files will be created before the old ones are
+               deleted. So, we need to have a provision to create many temp files.
+               Hence the below logic. It is found that provision for 26 files may
+               not be enough in some cases.
+
+               This below logic allows 26 files (like, pla00015.tmp through plz00015.tmp)
+               plus 6x26=676 (like, plaa0015.tmp through plzz0015.tmp)
+**/
+
                letter = 'a';
                do
                {
@@ -765,6 +779,23 @@ char* fnMy_MkTemp(char* templatestr)
                        letter++;
                } while (letter <= 'z');
 
+               letter1 = 'a';
+               do
+               {
+                       letter = 'a';
+                       do
+                       {
+                               sprintf(pXs, (char *)"%c%c%04.5s", letter1, letter, pPid);
+                               pXs[6] = termchar;
+                               if (access(templatestr, 0) != 0)        // File does not exist
+                               {
+                                       return templatestr;
+                               }
+                               letter++;
+                       } while (letter <= 'z');
+                       letter1++;
+               } while (letter1 <= 'z');
+
                errno = ENOENT;
                return NULL;
        }