{"thread":{"id":"5744","subject":"[PATCH] do not discard constness in interp_set_entry value argument","startedAt":"2006-09-28T19:12:55Z","lastAt":"2006-09-28T19:12:55Z","messageCount":1,"participants":["Alex Riesen"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"27920","messageId":"20060928191255.GB4294@steel.home","threadId":"5744","inReplyTo":null,"subject":"[PATCH] do not discard constness in interp_set_entry value argument","fromName":"Alex Riesen","fromEmail":"fork0@t-online.de","sentAt":"2006-09-28T19:12:55Z","receivedAt":"2006-09-28T19:12:55Z","isPatch":true,"sender":{"key":"raa.lkml@gmail.com","avatar":"https://avatars.githubusercontent.com/u/324101?v=4"},"body":"Signed-off-by: Alex Riesen <raa.lkml@gmail.com>\n\n---\n\nActually, both of the struct interp's fields could be made const,\nif not this interp_set_entry. And even then it could just return\nthe old value of ->value casting away its constness. I.e.:\n\nstruct interp\n{\n    const char *name;\n    const char *value;\n};\n\nstatic inline char *interp_set_entry(struct interp *table, int slot, const char *value)\n{\n\tchar *oldval = (char *)table[slot].value;\n\n\ttable[slot].value = newval;\n\treturn oldval;\n}\n\nThe caller can than decide if it should be freed. This leaves\ncompiler with a chance to optimize something.\n\ndiff --git a/interpolate.c b/interpolate.c\nindex 62701d8..5d9d188 100644\n--- a/interpolate.c\n+++ b/interpolate.c\n@@ -8,10 +8,10 @@ #include \"git-compat-util.h\"\n #include \"interpolate.h\"\n \n \n-void interp_set_entry(struct interp *table, int slot, char *value)\n+void interp_set_entry(struct interp *table, int slot, const char *value)\n {\n \tchar *oldval = table[slot].value;\n-\tchar *newval = value;\n+\tchar *newval = NULL;\n \n \tif (oldval)\n \t\tfree(oldval);\ndiff --git a/interpolate.h b/interpolate.h\nindex a55fb8e..190a180 100644\n--- a/interpolate.h\n+++ b/interpolate.h\n@@ -16,7 +16,7 @@ struct interp {\n \tchar *value;\n };\n \n-extern void interp_set_entry(struct interp *table, int slot, char *value);\n+extern void interp_set_entry(struct interp *table, int slot, const char *value);\n extern void interp_clear_table(struct interp *table, int ninterps);\n \n extern int interpolate(char *result, int reslen,\n"}]}