* \brief Save setting parameter * \param setting * \param value * \return RIG_OK or error * * \sa rig_setting_load() */
| 1093 | * \sa rig_setting_load() |
| 1094 | */ |
| 1095 | HAMLIB_EXPORT(int) rig_settings_save(const char *setting, void *value, |
| 1096 | settings_value_t valuetype) |
| 1097 | { |
| 1098 | FILE *fp; |
| 1099 | FILE *fptmp; |
| 1100 | char path[4096]; |
| 1101 | char buf[4096]; |
| 1102 | const char *cvalue = (char *)value; |
| 1103 | const int *ivalue = (int *)value; |
| 1104 | int n = 0; |
| 1105 | const long *lvalue = (long *) value; |
| 1106 | const float *fvalue = (float *) value; |
| 1107 | const double *dvalue = (double *) value; |
| 1108 | const char *vformat = "Unknown format??"; |
| 1109 | char template[64]; |
| 1110 | |
| 1111 | rig_settings_get_path(path, sizeof(path)); |
| 1112 | fp = fopen(path, "r"); |
| 1113 | |
| 1114 | if (fp == NULL) |
| 1115 | { |
| 1116 | rig_debug(RIG_DEBUG_WARN, "%s: %s not found\n", __func__, path); |
| 1117 | return -RIG_EIO; |
| 1118 | } |
| 1119 | |
| 1120 | strcpy(template, "hamlib_settings_XXXXXX"); |
| 1121 | |
| 1122 | switch (valuetype) |
| 1123 | { |
| 1124 | case e_CHAR: cvalue = (char *)value; vformat = "%s=%s\n"; break; |
| 1125 | |
| 1126 | case e_INT: ivalue = (int *)value; vformat = "%s=%d\n"; break; |
| 1127 | |
| 1128 | case e_LONG: lvalue = (long *)value; vformat = "%s=%l\n"; break; |
| 1129 | |
| 1130 | case e_FLOAT: fvalue = (float *)value; vformat = "%s=%f\n"; break; |
| 1131 | |
| 1132 | case e_DOUBLE: dvalue = (double *)value; vformat = "%s=%f\n"; break; |
| 1133 | |
| 1134 | default: |
| 1135 | rig_debug(RIG_DEBUG_ERR, "%s: Unknown valuetype=%d\n", __func__, valuetype); |
| 1136 | } |
| 1137 | |
| 1138 | if (fp == NULL) |
| 1139 | { |
| 1140 | // first time for this file |
| 1141 | fp = fopen(settings_file, "w"); |
| 1142 | |
| 1143 | switch (valuetype) |
| 1144 | { |
| 1145 | case e_CHAR: fprintf(fp, vformat, setting, cvalue); break; |
| 1146 | |
| 1147 | case e_INT: fprintf(fp, vformat, setting, *ivalue); break; |
| 1148 | |
| 1149 | case e_LONG: fprintf(fp, vformat, setting, *lvalue); break; |
| 1150 | |
| 1151 | case e_FLOAT: fprintf(fp, vformat, setting, *fvalue); break; |
| 1152 |
no test coverage detected