{
TCHAR szMsg[RC_STRING_MAX_SIZE];
LPTSTR tmp;
- LONG lNewPosHigh;
+ LONG lNewPosHigh = 0;
#ifdef _DEBUG
DebugPrintf (_T("cmd_goto (\'%s\', \'%s\'\n"), cmd, param);
/* terminate label at first space char */
tmp = param+1;
- while (!_istcntrl (*tmp) && !_istspace (*tmp) && (*tmp != _T(':')))
- tmp++;
+ while (!_istcntrl (*tmp) && !_istspace (*tmp) && (*tmp != _T(':')))
+ tmp++;
*(tmp) = _T('\0');
/* set file pointer to the beginning of the batch file */
lNewPosHigh = 0;
- /* jump to end of the file */
- if ( _tcsicmp( param, _T(":eof"))==0)
- {
- SetFilePointer (bc->hBatchFile, 0, &lNewPosHigh, FILE_END);
- return 0;
- }
+ /* jump to end of the file */
+ if ( _tcsicmp( param, _T(":eof"))==0)
+ {
+ /* when lCallPosition != 0 we have to return to the caller */
+ if (bc->lCallPosition == 0)
+ SetFilePointer (bc->hBatchFile, 0, &lNewPosHigh, FILE_END);
+ else
+ {
+ SetFilePointer (bc->hBatchFile, (LONG)bc->lCallPosition, &bc->lCallPositionHigh, FILE_BEGIN);
+ bc->lCallPosition = 0;
+ bc->lCallPositionHigh = 0;
+ }
+ return 0;
+ }
- /* jump to begin of the file */
- SetFilePointer (bc->hBatchFile, 0, &lNewPosHigh, FILE_BEGIN);
+ /* jump to begin of the file */
+ SetFilePointer (bc->hBatchFile, 0, &lNewPosHigh, FILE_BEGIN);
while (FileGetString (bc->hBatchFile, textline, sizeof(textline) / sizeof(textline[0])))
{
- int pos;
- int size;
+ int pos;
+ int size;
/* Strip out any trailing spaces or control chars */
tmp = textline + _tcslen (textline) - 1;
-
- while (_istcntrl (*tmp) || _istspace (*tmp) || (*tmp == _T(':')))
+ while (_istcntrl (*tmp) || _istspace (*tmp) || (*tmp == _T(':')))
tmp--;
*(tmp + 1) = _T('\0');
tmp = textline;
while (_istspace (*tmp))
tmp++;
-
- /* All space after leading space terminate the string */
- size = _tcslen(tmp) -1;
- pos=0;
- while (tmp+pos < tmp+size)
- {
- if (_istspace(tmp[pos]))
- tmp[pos]=_T('\0');
- pos++;
- }
+
+ /* All space after leading space terminate the string */
+ size = _tcslen(tmp) -1;
+ pos=0;
+ while (tmp+pos < tmp+size)
+ {
+ if (_istspace(tmp[pos]))
+ tmp[pos]=_T('\0');
+ pos++;
+ }
/* use whole label name */
- if ((*tmp == _T(':')) && (_tcsicmp (++tmp, param) == 0))
+ if ((*tmp == _T(':')) && ((_tcsicmp (++tmp, param) == 0) || (_tcsicmp (tmp, ++param) == 0)))
return 0;
+
}
LoadString(CMD_ModuleHandle, STRING_GOTO_ERROR2, szMsg, RC_STRING_MAX_SIZE);