----------------------------------------------------------------------------- Purpose: Input : &src - -----------------------------------------------------------------------------
| 1099 | // Input : &src - |
| 1100 | //----------------------------------------------------------------------------- |
| 1101 | void KeyValues::RecursiveCopyKeyValues(KeyValues& src) |
| 1102 | { |
| 1103 | // garymcthack - need to check this code for possible buffer overruns. |
| 1104 | |
| 1105 | m_iKeyName = src.m_iKeyName; |
| 1106 | m_iKeyNameCaseSensitive1 = src.m_iKeyNameCaseSensitive1; |
| 1107 | m_iKeyNameCaseSensitive2 = src.m_iKeyNameCaseSensitive2; |
| 1108 | |
| 1109 | if (!src.m_pSub) |
| 1110 | { |
| 1111 | m_iDataType = src.m_iDataType; |
| 1112 | char buf[256]; |
| 1113 | switch (src.m_iDataType) |
| 1114 | { |
| 1115 | case TYPE_NONE: |
| 1116 | break; |
| 1117 | case TYPE_STRING: |
| 1118 | if (src.m_sValue) |
| 1119 | { |
| 1120 | size_t len = strlen(src.m_sValue) + 1; |
| 1121 | m_sValue = new char[len]; |
| 1122 | strncpy(m_sValue, src.m_sValue, len); |
| 1123 | } |
| 1124 | break; |
| 1125 | case TYPE_INT: |
| 1126 | { |
| 1127 | m_iValue = src.m_iValue; |
| 1128 | snprintf(buf, sizeof(buf), "%d", m_iValue); |
| 1129 | size_t len = strlen(buf) + 1; |
| 1130 | m_sValue = new char[len]; |
| 1131 | strncpy(m_sValue, buf, len); |
| 1132 | } |
| 1133 | break; |
| 1134 | case TYPE_FLOAT: |
| 1135 | { |
| 1136 | m_flValue = src.m_flValue; |
| 1137 | snprintf(buf, sizeof(buf), "%f", m_flValue); |
| 1138 | size_t len = strlen(buf) + 1; |
| 1139 | m_sValue = new char[len]; |
| 1140 | strncpy(m_sValue, buf, len); |
| 1141 | } |
| 1142 | break; |
| 1143 | case TYPE_PTR: |
| 1144 | { |
| 1145 | m_pValue = src.m_pValue; |
| 1146 | } |
| 1147 | break; |
| 1148 | case TYPE_UINT64: |
| 1149 | { |
| 1150 | m_sValue = new char[sizeof(uint64_t)]; |
| 1151 | memcpy(m_sValue, src.m_sValue, sizeof(uint64_t)); |
| 1152 | } |
| 1153 | break; |
| 1154 | case TYPE_COLOR: |
| 1155 | { |
| 1156 | m_Color[0] = src.m_Color[0]; |
| 1157 | m_Color[1] = src.m_Color[1]; |
| 1158 | m_Color[2] = src.m_Color[2]; |