mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-04-05 07:08:06 -04:00
usb: gadget: Constify struct configfs_item_operations and configfs_group_operations
'struct configfs_item_operations' and 'configfs_group_operations' are not modified in these drivers. Constifying these structures moves some data to a read-only section, so increases overall security, especially when the structure holds some function pointers. On a x86_64, with allmodconfig, as an example: Before: ====== text data bss dec hex filename 65061 20968 256 86285 1510d drivers/usb/gadget/configfs.o After: ===== text data bss dec hex filename 66181 19848 256 86285 1510d drivers/usb/gadget/configfs.o Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr> Link: https://patch.msgid.link/49cec1cb84425f854de80b6d69b53a5a3cda8189.1766164523.git.christophe.jaillet@wanadoo.fr Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
dd1fbe324a
commit
e715bc42e3
@@ -409,7 +409,7 @@ static void gadget_info_attr_release(struct config_item *item)
|
||||
kfree(gi);
|
||||
}
|
||||
|
||||
static struct configfs_item_operations gadget_root_item_ops = {
|
||||
static const struct configfs_item_operations gadget_root_item_ops = {
|
||||
.release = gadget_info_attr_release,
|
||||
};
|
||||
|
||||
@@ -514,7 +514,7 @@ static void config_usb_cfg_unlink(
|
||||
WARN(1, "Unable to locate function to unbind\n");
|
||||
}
|
||||
|
||||
static struct configfs_item_operations gadget_config_item_ops = {
|
||||
static const struct configfs_item_operations gadget_config_item_ops = {
|
||||
.release = gadget_config_attr_release,
|
||||
.allow_link = config_usb_cfg_link,
|
||||
.drop_link = config_usb_cfg_unlink,
|
||||
@@ -663,7 +663,7 @@ static void function_drop(
|
||||
config_item_put(item);
|
||||
}
|
||||
|
||||
static struct configfs_group_operations functions_ops = {
|
||||
static const struct configfs_group_operations functions_ops = {
|
||||
.make_group = &function_make,
|
||||
.drop_item = &function_drop,
|
||||
};
|
||||
@@ -766,7 +766,7 @@ static void config_desc_drop(
|
||||
config_item_put(item);
|
||||
}
|
||||
|
||||
static struct configfs_group_operations config_desc_ops = {
|
||||
static const struct configfs_group_operations config_desc_ops = {
|
||||
.make_group = &config_desc_make,
|
||||
.drop_item = &config_desc_drop,
|
||||
};
|
||||
@@ -799,7 +799,7 @@ static void gadget_language_attr_release(struct config_item *item)
|
||||
kfree(gs);
|
||||
}
|
||||
|
||||
static struct configfs_item_operations gadget_language_langid_item_ops = {
|
||||
static const struct configfs_item_operations gadget_language_langid_item_ops = {
|
||||
.release = gadget_language_attr_release,
|
||||
};
|
||||
|
||||
@@ -852,7 +852,7 @@ static void gadget_string_release(struct config_item *item)
|
||||
kfree(string);
|
||||
}
|
||||
|
||||
static struct configfs_item_operations gadget_string_item_ops = {
|
||||
static const struct configfs_item_operations gadget_string_item_ops = {
|
||||
.release = gadget_string_release,
|
||||
};
|
||||
|
||||
@@ -901,7 +901,7 @@ static void gadget_language_string_drop(struct config_group *group,
|
||||
string->usb_string.id = i++;
|
||||
}
|
||||
|
||||
static struct configfs_group_operations gadget_language_langid_group_ops = {
|
||||
static const struct configfs_group_operations gadget_language_langid_group_ops = {
|
||||
.make_item = gadget_language_string_make,
|
||||
.drop_item = gadget_language_string_drop,
|
||||
};
|
||||
@@ -960,7 +960,7 @@ static void gadget_language_drop(struct config_group *group,
|
||||
config_item_put(item);
|
||||
}
|
||||
|
||||
static struct configfs_group_operations gadget_language_group_ops = {
|
||||
static const struct configfs_group_operations gadget_language_group_ops = {
|
||||
.make_group = &gadget_language_make,
|
||||
.drop_item = &gadget_language_drop,
|
||||
};
|
||||
@@ -1266,7 +1266,7 @@ static void os_desc_unlink(struct config_item *os_desc_ci,
|
||||
mutex_unlock(&gi->lock);
|
||||
}
|
||||
|
||||
static struct configfs_item_operations os_desc_ops = {
|
||||
static const struct configfs_item_operations os_desc_ops = {
|
||||
.allow_link = os_desc_link,
|
||||
.drop_link = os_desc_unlink,
|
||||
};
|
||||
@@ -1391,7 +1391,7 @@ static void usb_os_desc_ext_prop_release(struct config_item *item)
|
||||
kfree(ext_prop); /* frees a whole chunk */
|
||||
}
|
||||
|
||||
static struct configfs_item_operations ext_prop_ops = {
|
||||
static const struct configfs_item_operations ext_prop_ops = {
|
||||
.release = usb_os_desc_ext_prop_release,
|
||||
};
|
||||
|
||||
@@ -1456,7 +1456,7 @@ static void ext_prop_drop(struct config_group *group, struct config_item *item)
|
||||
config_item_put(item);
|
||||
}
|
||||
|
||||
static struct configfs_group_operations interf_grp_ops = {
|
||||
static const struct configfs_group_operations interf_grp_ops = {
|
||||
.make_item = &ext_prop_make,
|
||||
.drop_item = &ext_prop_drop,
|
||||
};
|
||||
@@ -2061,7 +2061,7 @@ static void gadgets_drop(struct config_group *group, struct config_item *item)
|
||||
config_item_put(item);
|
||||
}
|
||||
|
||||
static struct configfs_group_operations gadgets_ops = {
|
||||
static const struct configfs_group_operations gadgets_ops = {
|
||||
.make_group = &gadgets_make,
|
||||
.drop_item = &gadgets_drop,
|
||||
};
|
||||
|
||||
@@ -793,7 +793,7 @@ static void acm_attr_release(struct config_item *item)
|
||||
usb_put_function_instance(&opts->func_inst);
|
||||
}
|
||||
|
||||
static struct configfs_item_operations acm_item_ops = {
|
||||
static const struct configfs_item_operations acm_item_ops = {
|
||||
.release = acm_attr_release,
|
||||
};
|
||||
|
||||
|
||||
@@ -4004,7 +4004,7 @@ static void ffs_attr_release(struct config_item *item)
|
||||
usb_put_function_instance(&opts->func_inst);
|
||||
}
|
||||
|
||||
static struct configfs_item_operations ffs_item_ops = {
|
||||
static const struct configfs_item_operations ffs_item_ops = {
|
||||
.release = ffs_attr_release,
|
||||
};
|
||||
|
||||
|
||||
@@ -1328,7 +1328,7 @@ static void hid_attr_release(struct config_item *item)
|
||||
usb_put_function_instance(&opts->func_inst);
|
||||
}
|
||||
|
||||
static struct configfs_item_operations hidg_item_ops = {
|
||||
static const struct configfs_item_operations hidg_item_ops = {
|
||||
.release = hid_attr_release,
|
||||
};
|
||||
|
||||
|
||||
@@ -464,7 +464,7 @@ static void lb_attr_release(struct config_item *item)
|
||||
usb_put_function_instance(&lb_opts->func_inst);
|
||||
}
|
||||
|
||||
static struct configfs_item_operations lb_item_ops = {
|
||||
static const struct configfs_item_operations lb_item_ops = {
|
||||
.release = lb_attr_release,
|
||||
};
|
||||
|
||||
|
||||
@@ -3153,7 +3153,7 @@ static void fsg_lun_attr_release(struct config_item *item)
|
||||
kfree(lun_opts);
|
||||
}
|
||||
|
||||
static struct configfs_item_operations fsg_lun_item_ops = {
|
||||
static const struct configfs_item_operations fsg_lun_item_ops = {
|
||||
.release = fsg_lun_attr_release,
|
||||
};
|
||||
|
||||
@@ -3369,7 +3369,7 @@ static void fsg_attr_release(struct config_item *item)
|
||||
usb_put_function_instance(&opts->func_inst);
|
||||
}
|
||||
|
||||
static struct configfs_item_operations fsg_item_ops = {
|
||||
static const struct configfs_item_operations fsg_item_ops = {
|
||||
.release = fsg_attr_release,
|
||||
};
|
||||
|
||||
@@ -3462,7 +3462,7 @@ static struct configfs_attribute *fsg_attrs[] = {
|
||||
NULL,
|
||||
};
|
||||
|
||||
static struct configfs_group_operations fsg_group_ops = {
|
||||
static const struct configfs_group_operations fsg_group_ops = {
|
||||
.make_group = fsg_lun_make,
|
||||
.drop_item = fsg_lun_drop,
|
||||
};
|
||||
|
||||
@@ -1091,7 +1091,7 @@ static void midi_attr_release(struct config_item *item)
|
||||
usb_put_function_instance(&opts->func_inst);
|
||||
}
|
||||
|
||||
static struct configfs_item_operations midi_item_ops = {
|
||||
static const struct configfs_item_operations midi_item_ops = {
|
||||
.release = midi_attr_release,
|
||||
};
|
||||
|
||||
|
||||
@@ -2316,7 +2316,7 @@ static void f_midi2_block_opts_release(struct config_item *item)
|
||||
kfree(opts);
|
||||
}
|
||||
|
||||
static struct configfs_item_operations f_midi2_block_item_ops = {
|
||||
static const struct configfs_item_operations f_midi2_block_item_ops = {
|
||||
.release = f_midi2_block_opts_release,
|
||||
};
|
||||
|
||||
@@ -2479,11 +2479,11 @@ static void f_midi2_ep_opts_release(struct config_item *item)
|
||||
kfree(opts);
|
||||
}
|
||||
|
||||
static struct configfs_item_operations f_midi2_ep_item_ops = {
|
||||
static const struct configfs_item_operations f_midi2_ep_item_ops = {
|
||||
.release = f_midi2_ep_opts_release,
|
||||
};
|
||||
|
||||
static struct configfs_group_operations f_midi2_ep_group_ops = {
|
||||
static const struct configfs_group_operations f_midi2_ep_group_ops = {
|
||||
.make_group = f_midi2_opts_block_make,
|
||||
.drop_item = f_midi2_opts_block_drop,
|
||||
};
|
||||
@@ -2618,11 +2618,11 @@ static void f_midi2_opts_release(struct config_item *item)
|
||||
usb_put_function_instance(&opts->func_inst);
|
||||
}
|
||||
|
||||
static struct configfs_item_operations f_midi2_item_ops = {
|
||||
static const struct configfs_item_operations f_midi2_item_ops = {
|
||||
.release = f_midi2_opts_release,
|
||||
};
|
||||
|
||||
static struct configfs_group_operations f_midi2_group_ops = {
|
||||
static const struct configfs_group_operations f_midi2_group_ops = {
|
||||
.make_group = f_midi2_opts_ep_make,
|
||||
.drop_item = f_midi2_opts_ep_drop,
|
||||
};
|
||||
|
||||
@@ -390,7 +390,7 @@ static void obex_attr_release(struct config_item *item)
|
||||
usb_put_function_instance(&opts->func_inst);
|
||||
}
|
||||
|
||||
static struct configfs_item_operations obex_item_ops = {
|
||||
static const struct configfs_item_operations obex_item_ops = {
|
||||
.release = obex_attr_release,
|
||||
};
|
||||
|
||||
|
||||
@@ -585,7 +585,7 @@ static void phonet_attr_release(struct config_item *item)
|
||||
usb_put_function_instance(&opts->func_inst);
|
||||
}
|
||||
|
||||
static struct configfs_item_operations phonet_item_ops = {
|
||||
static const struct configfs_item_operations phonet_item_ops = {
|
||||
.release = phonet_attr_release,
|
||||
};
|
||||
|
||||
|
||||
@@ -1220,7 +1220,7 @@ static void printer_attr_release(struct config_item *item)
|
||||
usb_put_function_instance(&opts->func_inst);
|
||||
}
|
||||
|
||||
static struct configfs_item_operations printer_item_ops = {
|
||||
static const struct configfs_item_operations printer_item_ops = {
|
||||
.release = printer_attr_release,
|
||||
};
|
||||
|
||||
|
||||
@@ -260,7 +260,7 @@ static void serial_attr_release(struct config_item *item)
|
||||
usb_put_function_instance(&opts->func_inst);
|
||||
}
|
||||
|
||||
static struct configfs_item_operations serial_item_ops = {
|
||||
static const struct configfs_item_operations serial_item_ops = {
|
||||
.release = serial_attr_release,
|
||||
};
|
||||
|
||||
|
||||
@@ -882,7 +882,7 @@ static void ss_attr_release(struct config_item *item)
|
||||
usb_put_function_instance(&ss_opts->func_inst);
|
||||
}
|
||||
|
||||
static struct configfs_item_operations ss_item_ops = {
|
||||
static const struct configfs_item_operations ss_item_ops = {
|
||||
.release = ss_attr_release,
|
||||
};
|
||||
|
||||
|
||||
@@ -2446,7 +2446,7 @@ static void tcm_attr_release(struct config_item *item)
|
||||
usb_put_function_instance(&opts->func_inst);
|
||||
}
|
||||
|
||||
static struct configfs_item_operations tcm_item_ops = {
|
||||
static const struct configfs_item_operations tcm_item_ops = {
|
||||
.release = tcm_attr_release,
|
||||
};
|
||||
|
||||
|
||||
@@ -1512,7 +1512,7 @@ static void f_uac1_attr_release(struct config_item *item)
|
||||
usb_put_function_instance(&opts->func_inst);
|
||||
}
|
||||
|
||||
static struct configfs_item_operations f_uac1_item_ops = {
|
||||
static const struct configfs_item_operations f_uac1_item_ops = {
|
||||
.release = f_uac1_attr_release,
|
||||
};
|
||||
|
||||
|
||||
@@ -812,7 +812,7 @@ static void f_uac1_attr_release(struct config_item *item)
|
||||
usb_put_function_instance(&opts->func_inst);
|
||||
}
|
||||
|
||||
static struct configfs_item_operations f_uac1_item_ops = {
|
||||
static const struct configfs_item_operations f_uac1_item_ops = {
|
||||
.release = f_uac1_attr_release,
|
||||
};
|
||||
|
||||
|
||||
@@ -1874,7 +1874,7 @@ static void f_uac2_attr_release(struct config_item *item)
|
||||
usb_put_function_instance(&opts->func_inst);
|
||||
}
|
||||
|
||||
static struct configfs_item_operations f_uac2_item_ops = {
|
||||
static const struct configfs_item_operations f_uac2_item_ops = {
|
||||
.release = f_uac2_attr_release,
|
||||
};
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
usb_put_function_instance(&opts->func_inst); \
|
||||
} \
|
||||
\
|
||||
static struct configfs_item_operations _f_##_item_ops = { \
|
||||
static const struct configfs_item_operations _f_##_item_ops = { \
|
||||
.release = _f_##_attr_release, \
|
||||
}
|
||||
|
||||
|
||||
@@ -127,7 +127,7 @@ static void uvcg_config_item_release(struct config_item *item)
|
||||
kfree(group);
|
||||
}
|
||||
|
||||
static struct configfs_item_operations uvcg_config_item_ops = {
|
||||
static const struct configfs_item_operations uvcg_config_item_ops = {
|
||||
.release = uvcg_config_item_release,
|
||||
};
|
||||
|
||||
@@ -284,7 +284,7 @@ static struct config_item *uvcg_control_header_make(struct config_group *group,
|
||||
return &h->item;
|
||||
}
|
||||
|
||||
static struct configfs_group_operations uvcg_control_header_grp_ops = {
|
||||
static const struct configfs_group_operations uvcg_control_header_grp_ops = {
|
||||
.make_item = uvcg_control_header_make,
|
||||
};
|
||||
|
||||
@@ -1232,7 +1232,7 @@ static void uvcg_extension_drop_link(struct config_item *src, struct config_item
|
||||
mutex_unlock(su_mutex);
|
||||
}
|
||||
|
||||
static struct configfs_item_operations uvcg_extension_item_ops = {
|
||||
static const struct configfs_item_operations uvcg_extension_item_ops = {
|
||||
.release = uvcg_extension_release,
|
||||
.allow_link = uvcg_extension_allow_link,
|
||||
.drop_link = uvcg_extension_drop_link,
|
||||
@@ -1297,7 +1297,7 @@ static struct config_item *uvcg_extension_make(struct config_group *group, const
|
||||
return &xu->item;
|
||||
}
|
||||
|
||||
static struct configfs_group_operations uvcg_extensions_grp_ops = {
|
||||
static const struct configfs_group_operations uvcg_extensions_grp_ops = {
|
||||
.make_item = uvcg_extension_make,
|
||||
.drop_item = uvcg_extension_drop,
|
||||
};
|
||||
@@ -1413,7 +1413,7 @@ static void uvcg_control_class_drop_link(struct config_item *src,
|
||||
mutex_unlock(su_mutex);
|
||||
}
|
||||
|
||||
static struct configfs_item_operations uvcg_control_class_item_ops = {
|
||||
static const struct configfs_item_operations uvcg_control_class_item_ops = {
|
||||
.release = uvcg_config_item_release,
|
||||
.allow_link = uvcg_control_class_allow_link,
|
||||
.drop_link = uvcg_control_class_drop_link,
|
||||
@@ -1663,7 +1663,7 @@ static void uvcg_format_drop_link(struct config_item *src, struct config_item *t
|
||||
mutex_unlock(su_mutex);
|
||||
}
|
||||
|
||||
static struct configfs_item_operations uvcg_format_item_operations = {
|
||||
static const struct configfs_item_operations uvcg_format_item_operations = {
|
||||
.release = uvcg_config_item_release,
|
||||
.allow_link = uvcg_format_allow_link,
|
||||
.drop_link = uvcg_format_drop_link,
|
||||
@@ -1839,7 +1839,7 @@ static void uvcg_streaming_header_drop_link(struct config_item *src,
|
||||
mutex_unlock(su_mutex);
|
||||
}
|
||||
|
||||
static struct configfs_item_operations uvcg_streaming_header_item_ops = {
|
||||
static const struct configfs_item_operations uvcg_streaming_header_item_ops = {
|
||||
.release = uvcg_config_item_release,
|
||||
.allow_link = uvcg_streaming_header_allow_link,
|
||||
.drop_link = uvcg_streaming_header_drop_link,
|
||||
@@ -1913,7 +1913,7 @@ static struct config_item
|
||||
return &h->item;
|
||||
}
|
||||
|
||||
static struct configfs_group_operations uvcg_streaming_header_grp_ops = {
|
||||
static const struct configfs_group_operations uvcg_streaming_header_grp_ops = {
|
||||
.make_item = uvcg_streaming_header_make,
|
||||
};
|
||||
|
||||
@@ -2260,7 +2260,7 @@ static void uvcg_format_set_indices(struct config_group *fmt)
|
||||
* streaming/uncompressed/<NAME>
|
||||
*/
|
||||
|
||||
static struct configfs_group_operations uvcg_uncompressed_group_ops = {
|
||||
static const struct configfs_group_operations uvcg_uncompressed_group_ops = {
|
||||
.make_item = uvcg_frame_make,
|
||||
.drop_item = uvcg_frame_drop,
|
||||
};
|
||||
@@ -2507,7 +2507,7 @@ static struct config_group *uvcg_uncompressed_make(struct config_group *group,
|
||||
return &h->fmt.group;
|
||||
}
|
||||
|
||||
static struct configfs_group_operations uvcg_uncompressed_grp_ops = {
|
||||
static const struct configfs_group_operations uvcg_uncompressed_grp_ops = {
|
||||
.make_group = uvcg_uncompressed_make,
|
||||
};
|
||||
|
||||
@@ -2524,7 +2524,7 @@ static const struct uvcg_config_group_type uvcg_uncompressed_grp_type = {
|
||||
* streaming/mjpeg/<NAME>
|
||||
*/
|
||||
|
||||
static struct configfs_group_operations uvcg_mjpeg_group_ops = {
|
||||
static const struct configfs_group_operations uvcg_mjpeg_group_ops = {
|
||||
.make_item = uvcg_frame_make,
|
||||
.drop_item = uvcg_frame_drop,
|
||||
};
|
||||
@@ -2697,7 +2697,7 @@ static struct config_group *uvcg_mjpeg_make(struct config_group *group,
|
||||
return &h->fmt.group;
|
||||
}
|
||||
|
||||
static struct configfs_group_operations uvcg_mjpeg_grp_ops = {
|
||||
static const struct configfs_group_operations uvcg_mjpeg_grp_ops = {
|
||||
.make_group = uvcg_mjpeg_make,
|
||||
};
|
||||
|
||||
@@ -2714,7 +2714,7 @@ static const struct uvcg_config_group_type uvcg_mjpeg_grp_type = {
|
||||
* streaming/framebased/<NAME>
|
||||
*/
|
||||
|
||||
static struct configfs_group_operations uvcg_framebased_group_ops = {
|
||||
static const struct configfs_group_operations uvcg_framebased_group_ops = {
|
||||
.make_item = uvcg_frame_make,
|
||||
.drop_item = uvcg_frame_drop,
|
||||
};
|
||||
@@ -2952,7 +2952,7 @@ static struct config_group *uvcg_framebased_make(struct config_group *group,
|
||||
return &h->fmt.group;
|
||||
}
|
||||
|
||||
static struct configfs_group_operations uvcg_framebased_grp_ops = {
|
||||
static const struct configfs_group_operations uvcg_framebased_grp_ops = {
|
||||
.make_group = uvcg_framebased_make,
|
||||
};
|
||||
|
||||
@@ -3055,7 +3055,7 @@ static void uvcg_color_matching_release(struct config_item *item)
|
||||
kfree(color_match);
|
||||
}
|
||||
|
||||
static struct configfs_item_operations uvcg_color_matching_item_ops = {
|
||||
static const struct configfs_item_operations uvcg_color_matching_item_ops = {
|
||||
.release = uvcg_color_matching_release,
|
||||
};
|
||||
|
||||
@@ -3088,7 +3088,7 @@ static struct config_group *uvcg_color_matching_make(struct config_group *group,
|
||||
return &color_match->group;
|
||||
}
|
||||
|
||||
static struct configfs_group_operations uvcg_color_matching_grp_group_ops = {
|
||||
static const struct configfs_group_operations uvcg_color_matching_grp_group_ops = {
|
||||
.make_group = uvcg_color_matching_make,
|
||||
};
|
||||
|
||||
@@ -3529,7 +3529,7 @@ static void uvcg_streaming_class_drop_link(struct config_item *src,
|
||||
mutex_unlock(su_mutex);
|
||||
}
|
||||
|
||||
static struct configfs_item_operations uvcg_streaming_class_item_ops = {
|
||||
static const struct configfs_item_operations uvcg_streaming_class_item_ops = {
|
||||
.release = uvcg_config_item_release,
|
||||
.allow_link = uvcg_streaming_class_allow_link,
|
||||
.drop_link = uvcg_streaming_class_drop_link,
|
||||
@@ -3697,7 +3697,7 @@ static void uvc_func_drop_link(struct config_item *src, struct config_item *tgt)
|
||||
mutex_unlock(&opts->lock);
|
||||
}
|
||||
|
||||
static struct configfs_item_operations uvc_func_item_ops = {
|
||||
static const struct configfs_item_operations uvc_func_item_ops = {
|
||||
.release = uvc_func_item_release,
|
||||
.allow_link = uvc_func_allow_link,
|
||||
.drop_link = uvc_func_drop_link,
|
||||
|
||||
@@ -30,7 +30,7 @@ static ssize_t __struct##_##__name##_show(struct config_item *item, char *page)
|
||||
CONFIGFS_ATTR(struct_name##_, _name)
|
||||
|
||||
#define USB_CONFIG_STRING_RW_OPS(struct_in) \
|
||||
static struct configfs_item_operations struct_in##_langid_item_ops = { \
|
||||
static const struct configfs_item_operations struct_in##_langid_item_ops = { \
|
||||
.release = struct_in##_attr_release, \
|
||||
}; \
|
||||
\
|
||||
@@ -86,7 +86,7 @@ static void struct_in##_strings_drop( \
|
||||
config_item_put(item); \
|
||||
} \
|
||||
\
|
||||
static struct configfs_group_operations struct_in##_strings_ops = { \
|
||||
static const struct configfs_group_operations struct_in##_strings_ops = { \
|
||||
.make_group = &struct_in##_strings_make, \
|
||||
.drop_item = &struct_in##_strings_drop, \
|
||||
}; \
|
||||
|
||||
Reference in New Issue
Block a user