Ignore:
Timestamp:
Feb 1, 2018, 1:46:52 PM (23 months ago)
Author:
matszpk
Message:

CLRadeonExtender: ROCmMetadata: Fixed String block parsing (treating empty lines and etc).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • CLRadeonExtender/trunk/amdbin/ROCmBinaries.cpp

    r3688 r3689  
    340340            const char* strStart = ptr;
    341341            while (ptr != end && *ptr!='\n') ptr++;
    342             buf.append(strStart, end);
     342            buf.append(strStart, ptr);
    343343           
    344             lineNo++;
     344            if (ptr != end) // if new line
     345            {
     346                lineNo++;
     347                ptr++;
     348            }
     349            else // end of stream
     350                break;
     351           
    345352            const char* lineStart = ptr;
    346353            skipSpacesToLineEnd(ptr, end);
    347             if (size_t(ptr - lineStart) < indent)
     354            bool emptyLines = false;
     355            while (size_t(ptr - lineStart) <= indent)
    348356            {
    349                 if (ptr == end || *ptr=='\n')
     357                if (ptr != end && *ptr=='\n')
    350358                {
    351                     buf.append(newLineFold ? " " : "\n");
     359                    // empty line
     360                    buf.append("\n");
     361                    ptr++;
     362                    lineNo++;
     363                    lineStart = ptr;
     364                    skipSpacesToLineEnd(ptr, end);
     365                    emptyLines = true;
    352366                    continue;
    353367                }
    354368                // if smaller indent
    355                 ptr = lineStart;
    356                 return buf;
     369                if (size_t(ptr - lineStart) < indent)
     370                {
     371                    buf.append("\n"); // always add newline at last line
     372                    ptr = lineStart;
     373                    return buf;
     374                }
     375                else // if this same and not end of line
     376                    break;
    357377            }
     378           
     379            if (!emptyLines || !newLineFold)
     380                // add missing newline after line with text
     381                // only if no emptyLines or no newLineFold
     382                buf.append(newLineFold ? " " : "\n");
     383            // to indent
    358384            ptr = lineStart + indent;
    359             buf.append(newLineFold ? " " : "\n");
    360385        }
    361386        return buf;
     
    365390        // single line string (unquoted)
    366391        const char* strStart = ptr;
    367         while (ptr != end && *ptr!='\n' && *ptr!='#') ptr++;
    368         buf.assign(strStart, ptr);
     392        // automatically trim spaces at ends
     393        const char* strEnd = ptr;
     394        while (ptr != end && *ptr!='\n' && *ptr!='#')
     395        {
     396            if (!isSpace(*ptr))
     397                strEnd = ptr; // to trim at end
     398            ptr++;
     399        }
     400        if (strEnd != end && !isSpace(*strEnd))
     401            strEnd++;
     402       
     403        buf.assign(strStart, strEnd);
    369404    }
    370405   
Note: See TracChangeset for help on using the changeset viewer.