Patrick Steinhardt <ps@xxxxxx> writes: >> > - if (git_config_string((char **) &f->pattern, k, v) < 0) >> > + f->pattern = NULL; >> > + FREE_AND_NULL(f->pattern_owned); >> > + if (git_config_string(&f->pattern_owned, k, v) < 0) >> > return -1; >> > + f->pattern = f->pattern_owned; >> > f->cflags = cflags; >> > return 0; >> > } > > Yup. We have a bunch of statically defined userdiff drivers, all of > which use string constants as patterns. We thus cannot reliably free > those and instead have to track the allocated strings in a separate > variable. In other words, this is the usual "foo is the variable to be used, and it may point at foo_to_free, when the value is an allocated string" pattern. I doubt .pattern_to_free is a better name even in the name of consistency---foo_to_free is certainly much better than foo_owned as a name for a temporary variable in a small scope, but a structure member is a much longer validity and I am OK if we decide to adopt the convention to call a structure member .foo_owned when it is used in this manner. Thanks.