const char * utils_get_ifcfg_name (const char *file, gboolean only_ifcfg) { const char *name; g_return_val_if_fail (file != NULL, NULL); name = strrchr (file, '/'); if (!name) name = file; else name++; if (!*name) return NULL; #define MATCH_TAG_AND_RETURN(name, TAG) \ G_STMT_START { \ if (strncmp (name, TAG, STRLEN (TAG)) == 0) { \ name += STRLEN (TAG); \ if (name[0] == '\0') \ return NULL; \ else \ return name; \ } \ } G_STMT_END MATCH_TAG_AND_RETURN (name, IFCFG_TAG); if (!only_ifcfg) { MATCH_TAG_AND_RETURN (name, KEYS_TAG); MATCH_TAG_AND_RETURN (name, ROUTE_TAG); MATCH_TAG_AND_RETURN (name, ROUTE6_TAG); } return NULL; }
const char * utils_get_ifcfg_name (const char *file, gboolean only_ifcfg) { const char *name; g_return_val_if_fail (file != NULL, NULL); name = strrchr (file, '/'); if (!name) name = file; else name++; if (!*name) return NULL; #define MATCH_TAG_AND_RETURN(name, TAG) \ G_STMT_START { \ if (strncmp (name, TAG, NM_STRLEN (TAG)) == 0) { \ name += NM_STRLEN (TAG); \ if (name[0] == '\0') \ return NULL; \ else \ return name; \ } \ } G_STMT_END /* Do not detect alias files and return 'eth0:0' instead of 'eth0'. * Unfortunately, we cannot be sure that our files don't contain colons, * so we cannot reject files with colons. * * Instead, you must not call utils_get_ifcfg_name() with an alias file * or files that are ignored. */ MATCH_TAG_AND_RETURN (name, IFCFG_TAG); if (!only_ifcfg) { MATCH_TAG_AND_RETURN (name, KEYS_TAG); MATCH_TAG_AND_RETURN (name, ROUTE_TAG); MATCH_TAG_AND_RETURN (name, ROUTE6_TAG); } return NULL; }