}
#ifdef WITH_CONF_WRITE
+static FILE *cf_file_write(CONF_SECTION *cs, char const *filename)
+{
+ FILE *fp;
+ char *p;
+ char const *q;
+ char buffer[8192];
+
+ q = filename;
+ if ((q[0] == '.') && (q[1] == '/')) q += 2;
+
+ snprintf(buffer, sizeof(buffer), "%s/%s", main_config->write_dir, q);
+
+ p = strrchr(buffer, '/');
+ *p = '\0';
+ if ((rad_mkdir(buffer, 0700, -1, -1) < 0) &&
+ (errno != EEXIST)) {
+ cf_log_err(cs, "Failed creating directory %s: %s",
+ buffer, strerror(errno));
+ return NULL;
+ }
+
+ /*
+ * And again, because rad_mkdir() butchers the buffer.
+ */
+ snprintf(buffer, sizeof(buffer), "%s/%s", main_config->write_dir, q);
+
+ fp = fopen(buffer, "a");
+ if (!fp) {
+ cf_log_err(cs, "Failed creating file %s: %s",
+ buffer, strerror(errno));
+ return NULL;
+ }
+
+ return fp;
+}
+#endif /* WITH_CONF_WRITE */
+
static char const parse_tabs[] = " ";
static ssize_t cf_string_write(FILE *fp, char const *string, size_t len, FR_TOKEN t)
return 1;
}
-static size_t cf_pair_write(FILE *fp, CONF_PAIR *cp)
+static int cf_pair_write(FILE *fp, CONF_PAIR *cp)
{
if (!cp->value) {
fprintf(fp, "%s\n", cp->attr);
cf_string_write(fp, cp->attr, strlen(cp->attr), cp->lhs_quote);
fprintf(fp, " %s ", fr_int2str(fr_tokens_table, cp->op, "<INVALID>"));
- cf_string_write(fp, cp->orig_value, strlen(cp->orig_value), cp->rhs_quote);
+ cf_string_write(fp, cp->value, strlen(cp->value), cp->rhs_quote);
fprintf(fp, "\n");
return 1; /* FIXME */
}
-static FILE *cf_file_write(CONF_SECTION *cs, char const *filename)
-{
- FILE *fp;
- char *p;
- char const *q;
- char buffer[8192];
-
- q = filename;
- if ((q[0] == '.') && (q[1] == '/')) q += 2;
-
- snprintf(buffer, sizeof(buffer), "%s/%s", main_config->write_dir, q);
-
- p = strrchr(buffer, '/');
- *p = '\0';
- if ((rad_mkdir(buffer, 0700, -1, -1) < 0) &&
- (errno != EEXIST)) {
- cf_log_err(cs, "Failed creating directory %s: %s",
- buffer, strerror(errno));
- return NULL;
- }
-
- /*
- * And again, because rad_mkdir() butchers the buffer.
- */
- snprintf(buffer, sizeof(buffer), "%s/%s", main_config->write_dir, q);
-
- fp = fopen(buffer, "a");
- if (!fp) {
- cf_log_err(cs, "Failed creating file %s: %s",
- buffer, strerror(errno));
- return NULL;
- }
-
- return fp;
-}
-size_t cf_section_write(FILE *in_fp, CONF_SECTION *cs, int depth)
+int cf_section_write(FILE *in_fp, CONF_SECTION *cs, int depth)
{
bool prev = false;
CONF_ITEM *ci;
prev = true;
break;
- case CONF_ITEM_COMMENT:
- rad_assert(fp != NULL);
-
- prev = false;
- fwrite(parse_tabs, depth + 1, 1, fp);
- fprintf(fp, "#%s", ((CONF_COMMENT *)ci)->comment);
- break;
-
- case CONF_ITEM_INCLUDE:
- /*
- * Filename == open the new filename and use that.
- *
- * NULL == close the previous filename
- */
- if (((CONF_INCLUDE *) ci)->filename) {
- CONF_INCLUDE *cc = (CONF_INCLUDE *) ci;
-
- /*
- * Print out
- *
- * $INCLUDE foo.conf
- * $INCLUDE foo/
- *
- * but not the files included from the last one.
- */
- if (fp && (cc->file_type != CONF_INCLUDE_FROMDIR)) {
- fprintf(fp, "$INCLUDE %s\n", ((CONF_INCLUDE *)ci)->filename);
- }
-
- /*
- * If it's a file, we write the
- * file. We ignore the
- * directories. They're just for printing.
- */
- if (cc->file_type != CONF_INCLUDE_DIR) {
- fp = cf_file_write(cs, ((CONF_INCLUDE *) ci)->filename);
- if (!fp) return 0;
-
- fp_max++;
- array[fp_max] = fp;
- }
- } else {
- /*
- * We're done the current file.
- */
- rad_assert(fp != NULL);
- rad_assert(fp_max > 0);
- fclose(fp);
-
- fp_max--;
- fp = array[fp_max];
- }
- break;
-
default:
break;
}
return 1;
}
-#endif /* WITH_CONF_WRITE */