mirror of
https://git.freebsd.org/ports.git
synced 2025-07-18 17:59:20 -04:00
Split the patch in the "context diff" format added pack in r130923 which
no longer applies by modern FreeBSD patch(1). Patch was applied on the FreeBSD 8.4 and new patches generated with ``make makepatch''. Repocopy was waived since three-way split would make the diff unnecessarily noisy and there's not much history to preserve anyways as the patch had not been modified since its inception. While here, unbreak the build against modern compilers (Clang 11, GCC 10) by forcing the `-fcommon' mode. Reported by: pkg-fallout
This commit is contained in:
parent
143cf44704
commit
262b2a3ac1
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=547244
5 changed files with 203 additions and 228 deletions
|
@ -28,7 +28,7 @@ post-patch:
|
|||
${WRKSRC}/Makefile.in
|
||||
@${REINPLACE_CMD} -e 's,=gcc,=@CC@,' \
|
||||
${WRKSRC}/lib/Makefile.in
|
||||
@${REINPLACE_CMD} -e 's,-O2 -g,@CFLAGS@, ; \
|
||||
@${REINPLACE_CMD} -e 's,-O2 -g,@CFLAGS@ -fcommon, ; \
|
||||
s, $${BINDIR}, $${DESTDIR}$${BINDIR},' \
|
||||
${WRKSRC}/src/Makefile.in
|
||||
@${REINPLACE_CMD} -E 's,^([[:blank:]]+)\([^\)]+\) ,\1,' \
|
||||
|
|
|
@ -1,227 +0,0 @@
|
|||
diff -rc /services/build/usr/ports/net/yptransitd/work/yptransitd-0.5/src/modules/ldap/cache.c ./src/modules/ldap/cache.c
|
||||
*** /services/build/usr/ports/net/yptransitd/work/yptransitd-0.5/src/modules/ldap/cache.c Tue Oct 9 10:34:51 2001
|
||||
--- ./src/modules/ldap/cache.c Wed May 5 01:51:16 2004
|
||||
***************
|
||||
*** 278,285 ****
|
||||
} else
|
||||
if(!strcasecmp(attr, "userpassword"))
|
||||
{
|
||||
! pwinfo->userpassword = fix_password(values);
|
||||
! pwinfo->size += strlen(pwinfo->userpassword);
|
||||
} else
|
||||
if(!strcasecmp(attr, "uidnumber"))
|
||||
{
|
||||
--- 278,285 ----
|
||||
} else
|
||||
if(!strcasecmp(attr, "userpassword"))
|
||||
{
|
||||
! pwinfo->userpassword = safe_strdup("*");
|
||||
! pwinfo->size += strlen("*");
|
||||
} else
|
||||
if(!strcasecmp(attr, "uidnumber"))
|
||||
{
|
||||
***************
|
||||
*** 322,327 ****
|
||||
--- 322,394 ----
|
||||
return (rval);
|
||||
}
|
||||
|
||||
+ int assemble_master_passwd(valdat *val, LDAPMessage *user, struct pwinfo *pwinfo)
|
||||
+ {
|
||||
+ ypstat rval;
|
||||
+ char *attr;
|
||||
+ BerElement *ber = NULL;
|
||||
+
|
||||
+ rval = YP_YPERR;
|
||||
+ fill_pwinfo(pwinfo);
|
||||
+
|
||||
+ for (attr = ldap_first_attribute (ldaprefs.ldap, user, &ber); attr; attr = ldap_next_attribute (ldaprefs.ldap, user, ber))
|
||||
+ {
|
||||
+ char **values;
|
||||
+
|
||||
+ values = ldap_get_values (ldaprefs.ldap, user, attr);
|
||||
+ if (values)
|
||||
+ {
|
||||
+ if(!strcasecmp(attr, "uid"))
|
||||
+ {
|
||||
+ pwinfo->uid = safe_strdup(values[0]);
|
||||
+ pwinfo->size += strlen(values[0]);
|
||||
+ } else
|
||||
+ if(!strcasecmp(attr, "userpassword"))
|
||||
+ {
|
||||
+ pwinfo->userpassword = fix_password(values);
|
||||
+ pwinfo->size += strlen(pwinfo->userpassword);
|
||||
+ } else
|
||||
+ if(!strcasecmp(attr, "uidnumber"))
|
||||
+ {
|
||||
+ pwinfo->uidnumber = safe_strdup(values[0]);
|
||||
+ pwinfo->size += strlen(values[0]);
|
||||
+ } else
|
||||
+ if(!strcasecmp(attr, "gidnumber"))
|
||||
+ {
|
||||
+ pwinfo->gidnumber = safe_strdup(values[0]);
|
||||
+ pwinfo->size += strlen(values[0]);
|
||||
+ } else
|
||||
+ if(!strcasecmp(attr, "gecos"))
|
||||
+ {
|
||||
+ pwinfo->gecos = safe_strdup(values[0]);
|
||||
+ pwinfo->size += strlen(values[0]);
|
||||
+ } else
|
||||
+ if(!strcasecmp(attr, "homedirectory"))
|
||||
+ {
|
||||
+ pwinfo->homedirectory = safe_strdup(values[0]);
|
||||
+ pwinfo->size += strlen(values[0]);
|
||||
+ } else
|
||||
+ if(!strcasecmp(attr, "loginshell"))
|
||||
+ {
|
||||
+ pwinfo->loginshell = safe_strdup(values[0]);
|
||||
+ pwinfo->size += strlen(values[0]);
|
||||
+ }
|
||||
+ ldap_value_free(values);
|
||||
+ }
|
||||
+ }
|
||||
+ if (check_pwinfo(pwinfo) == YP_TRUE)
|
||||
+ {
|
||||
+ val->valdat_len = pwinfo->size + MPWLINE_SIZE;
|
||||
+ val->valdat_val = safe_malloc(val->valdat_len + 1);
|
||||
+ sprintf(val->valdat_val, MPWLINE, pwinfo->uid, pwinfo->userpassword, pwinfo->uidnumber, pwinfo->gidnumber, pwinfo->gecos, pwinfo->homedirectory, pwinfo->loginshell);
|
||||
+ rval = YP_TRUE;
|
||||
+ } else {
|
||||
+ rval = YP_NOKEY;
|
||||
+ }
|
||||
+
|
||||
+ return (rval);
|
||||
+ }
|
||||
+
|
||||
int assemble_group(valdat *val, LDAPMessage *group, struct gwinfo *gwinfo)
|
||||
{
|
||||
ypstat rval;
|
||||
***************
|
||||
*** 538,548 ****
|
||||
free(filter);
|
||||
free(base);
|
||||
}
|
||||
else if (!strcmp((char *) mapcache_current->map, "group.byname"))
|
||||
{
|
||||
/* XXX Add preferences for filter and basedn */
|
||||
base = safe_malloc(strlen(ldaprefs.basedn) + strlen("ou=Group,") + 1);
|
||||
sprintf(base, "%s%s", "ou=Group,", ldaprefs.basedn);
|
||||
filter = safe_strdup("(objectClass=posixGroup)");
|
||||
|
||||
if(ldap_search_s(ldaprefs.ldap,
|
||||
--- 605,689 ----
|
||||
free(filter);
|
||||
free(base);
|
||||
}
|
||||
+ else if (!strcmp((char *) mapcache_current->map, "master.passwd.byname"))
|
||||
+ {
|
||||
+ /* XXX Add preferences for filter and basedn */
|
||||
+ base = safe_malloc(strlen(ldaprefs.basedn) + strlen("ou=Staffs,") + 1);
|
||||
+ sprintf(base, "%s%s", "ou=Staffs,", ldaprefs.basedn);
|
||||
+ filter = safe_strdup("(objectClass=posixAccount)");
|
||||
+
|
||||
+ if(ldap_search_s(ldaprefs.ldap,
|
||||
+ base,
|
||||
+ LDAP_SCOPE_ONELEVEL,
|
||||
+ filter,
|
||||
+ user_attributes,
|
||||
+ 0,
|
||||
+ &ldapreturn) != -1)
|
||||
+ {
|
||||
+ for (record = ldap_first_entry(ldaprefs.ldap, ldapreturn); record; record = ldap_next_entry(ldaprefs.ldap, record))
|
||||
+ {
|
||||
+ pwinfo = safe_malloc(sizeof(struct pwinfo));
|
||||
+ rval = assemble_master_passwd(val, record, pwinfo);
|
||||
+ if(rval == YP_TRUE);
|
||||
+ {
|
||||
+ if(check_unique(mapcache_current, pwinfo->uid) == YP_NOKEY)
|
||||
+ {
|
||||
+ mapentry_current = safe_malloc(sizeof(struct mapentry));
|
||||
+ mapentry_current->key = safe_strdup(pwinfo->uid);
|
||||
+ mapentry_current->val = val->valdat_val;
|
||||
+ mapentry_current->next = mapcache_current->mapentry;
|
||||
+ mapcache_current->mapentry = mapentry_current;
|
||||
+ }
|
||||
+ }
|
||||
+ clean_pwinfo(pwinfo);
|
||||
+ }
|
||||
+ }
|
||||
+ ldap_msgfree(ldapreturn);
|
||||
+ free(filter);
|
||||
+ free(base);
|
||||
+ }
|
||||
+ else if (!strcmp((char *) mapcache_current->map, "master.passwd.byuid"))
|
||||
+ {
|
||||
+ /* XXX Add preferences for filter and basedn */
|
||||
+ base = safe_malloc(strlen(ldaprefs.basedn) + strlen("ou=Staffs,") + 1);
|
||||
+ sprintf(base, "%s%s", "ou=Staffs,", ldaprefs.basedn);
|
||||
+ filter = safe_strdup("(objectClass=posixAccount)");
|
||||
+
|
||||
+ if(ldap_search_s(ldaprefs.ldap,
|
||||
+ base,
|
||||
+ LDAP_SCOPE_ONELEVEL,
|
||||
+ filter,
|
||||
+ user_attributes,
|
||||
+ 0,
|
||||
+ &ldapreturn) != -1)
|
||||
+ {
|
||||
+ for (record = ldap_first_entry(ldaprefs.ldap, ldapreturn); record; record = ldap_next_entry(ldaprefs.ldap, record))
|
||||
+ {
|
||||
+ pwinfo = safe_malloc(sizeof(struct pwinfo));
|
||||
+ rval = assemble_master_passwd(val, record, pwinfo);
|
||||
+ if(rval == YP_TRUE);
|
||||
+ {
|
||||
+ if(check_unique(mapcache_current, pwinfo->uidnumber) == YP_NOKEY)
|
||||
+ {
|
||||
+ mapentry_current = safe_malloc(sizeof(struct mapentry));
|
||||
+ mapentry_current->key = safe_strdup(pwinfo->uidnumber);
|
||||
+ mapentry_current->val = val->valdat_val;
|
||||
+ mapentry_current->next = mapcache_current->mapentry;
|
||||
+ mapcache_current->mapentry = mapentry_current;
|
||||
+ }
|
||||
+ }
|
||||
+ clean_pwinfo(pwinfo);
|
||||
+ }
|
||||
+ }
|
||||
+ ldap_msgfree(ldapreturn);
|
||||
+ free(filter);
|
||||
+ free(base);
|
||||
+ }
|
||||
else if (!strcmp((char *) mapcache_current->map, "group.byname"))
|
||||
{
|
||||
/* XXX Add preferences for filter and basedn */
|
||||
base = safe_malloc(strlen(ldaprefs.basedn) + strlen("ou=Group,") + 1);
|
||||
sprintf(base, "%s%s", "ou=Group,", ldaprefs.basedn);
|
||||
filter = safe_strdup("(objectClass=posixGroup)");
|
||||
|
||||
if(ldap_search_s(ldaprefs.ldap,
|
||||
diff -rc /services/build/usr/ports/net/yptransitd/work/yptransitd-0.5/src/modules/ldap/ldap.c ./src/modules/ldap/ldap.c
|
||||
*** /services/build/usr/ports/net/yptransitd/work/yptransitd-0.5/src/modules/ldap/ldap.c Wed Oct 3 09:45:29 2001
|
||||
--- ./src/modules/ldap/ldap.c Wed May 5 01:39:20 2004
|
||||
***************
|
||||
*** 60,66 ****
|
||||
--- 60,69 ----
|
||||
#include "cache.h"
|
||||
|
||||
#define CONFIG_FILE CONFDIR "/ldap.conf"
|
||||
+ /*
|
||||
#define MAPS "auto.home auto_home amd.home passwd.byname passwd.byuid group.byname group.bygid"
|
||||
+ */
|
||||
+ #define MAPS "auto.home auto_home amd.home master.passwd.byname master.passwd.byuid passwd.byname passwd.byuid group.byname group.bygid"
|
||||
|
||||
struct ldaprefs ldaprefs;
|
||||
|
||||
diff -rc /services/build/usr/ports/net/yptransitd/work/yptransitd-0.5/src/modules/ldap/ldap.h ./src/modules/ldap/ldap.h
|
||||
*** /services/build/usr/ports/net/yptransitd/work/yptransitd-0.5/src/modules/ldap/ldap.h Wed Oct 3 08:59:53 2001
|
||||
--- ./src/modules/ldap/ldap.h Wed May 5 01:49:57 2004
|
||||
***************
|
||||
*** 42,47 ****
|
||||
--- 42,50 ----
|
||||
#define PWLINE "%s:%s:%s:%s:%s:%s:%s"
|
||||
#define PWLINE_SIZE 6
|
||||
|
||||
+ #define MPWLINE "%s:%s:%s:%s::0:0:%s:%s:%s"
|
||||
+ #define MPWLINE_SIZE 11
|
||||
+
|
||||
#define GWLINE "%s:%s:%s:%s"
|
||||
#define GWLINE_SIZE 3
|
177
net/yptransitd/files/patch-src_modules_ldap_cache.c
Normal file
177
net/yptransitd/files/patch-src_modules_ldap_cache.c
Normal file
|
@ -0,0 +1,177 @@
|
|||
--- src/modules/ldap/cache.c.orig 2001-10-09 02:34:51 UTC
|
||||
+++ src/modules/ldap/cache.c
|
||||
@@ -278,8 +278,8 @@ int assemble_passwd(valdat *val, LDAPMes
|
||||
} else
|
||||
if(!strcasecmp(attr, "userpassword"))
|
||||
{
|
||||
- pwinfo->userpassword = fix_password(values);
|
||||
- pwinfo->size += strlen(pwinfo->userpassword);
|
||||
+ pwinfo->userpassword = safe_strdup("*");
|
||||
+ pwinfo->size += strlen("*");
|
||||
} else
|
||||
if(!strcasecmp(attr, "uidnumber"))
|
||||
{
|
||||
@@ -322,6 +322,73 @@ int assemble_passwd(valdat *val, LDAPMes
|
||||
return (rval);
|
||||
}
|
||||
|
||||
+int assemble_master_passwd(valdat *val, LDAPMessage *user, struct pwinfo *pwinfo)
|
||||
+{
|
||||
+ ypstat rval;
|
||||
+ char *attr;
|
||||
+ BerElement *ber = NULL;
|
||||
+
|
||||
+ rval = YP_YPERR;
|
||||
+ fill_pwinfo(pwinfo);
|
||||
+
|
||||
+ for (attr = ldap_first_attribute (ldaprefs.ldap, user, &ber); attr; attr = ldap_next_attribute (ldaprefs.ldap, user, ber))
|
||||
+ {
|
||||
+ char **values;
|
||||
+
|
||||
+ values = ldap_get_values (ldaprefs.ldap, user, attr);
|
||||
+ if (values)
|
||||
+ {
|
||||
+ if(!strcasecmp(attr, "uid"))
|
||||
+ {
|
||||
+ pwinfo->uid = safe_strdup(values[0]);
|
||||
+ pwinfo->size += strlen(values[0]);
|
||||
+ } else
|
||||
+ if(!strcasecmp(attr, "userpassword"))
|
||||
+ {
|
||||
+ pwinfo->userpassword = fix_password(values);
|
||||
+ pwinfo->size += strlen(pwinfo->userpassword);
|
||||
+ } else
|
||||
+ if(!strcasecmp(attr, "uidnumber"))
|
||||
+ {
|
||||
+ pwinfo->uidnumber = safe_strdup(values[0]);
|
||||
+ pwinfo->size += strlen(values[0]);
|
||||
+ } else
|
||||
+ if(!strcasecmp(attr, "gidnumber"))
|
||||
+ {
|
||||
+ pwinfo->gidnumber = safe_strdup(values[0]);
|
||||
+ pwinfo->size += strlen(values[0]);
|
||||
+ } else
|
||||
+ if(!strcasecmp(attr, "gecos"))
|
||||
+ {
|
||||
+ pwinfo->gecos = safe_strdup(values[0]);
|
||||
+ pwinfo->size += strlen(values[0]);
|
||||
+ } else
|
||||
+ if(!strcasecmp(attr, "homedirectory"))
|
||||
+ {
|
||||
+ pwinfo->homedirectory = safe_strdup(values[0]);
|
||||
+ pwinfo->size += strlen(values[0]);
|
||||
+ } else
|
||||
+ if(!strcasecmp(attr, "loginshell"))
|
||||
+ {
|
||||
+ pwinfo->loginshell = safe_strdup(values[0]);
|
||||
+ pwinfo->size += strlen(values[0]);
|
||||
+ }
|
||||
+ ldap_value_free(values);
|
||||
+ }
|
||||
+ }
|
||||
+ if (check_pwinfo(pwinfo) == YP_TRUE)
|
||||
+ {
|
||||
+ val->valdat_len = pwinfo->size + MPWLINE_SIZE;
|
||||
+ val->valdat_val = safe_malloc(val->valdat_len + 1);
|
||||
+ sprintf(val->valdat_val, MPWLINE, pwinfo->uid, pwinfo->userpassword, pwinfo->uidnumber, pwinfo->gidnumber, pwinfo->gecos, pwinfo->homedirectory, pwinfo->loginshell);
|
||||
+ rval = YP_TRUE;
|
||||
+ } else {
|
||||
+ rval = YP_NOKEY;
|
||||
+ }
|
||||
+
|
||||
+ return (rval);
|
||||
+}
|
||||
+
|
||||
int assemble_group(valdat *val, LDAPMessage *group, struct gwinfo *gwinfo)
|
||||
{
|
||||
ypstat rval;
|
||||
@@ -452,7 +519,7 @@ struct mapcache *create_cache (ypmaplist
|
||||
valdat *val;
|
||||
int rval;
|
||||
|
||||
- (void *) mapcache_current = (void *) mapcache_head = (void *) ldapreturn = (void *) record = NULL;
|
||||
+ mapcache_current = mapcache_head = ldapreturn = record = NULL;
|
||||
val = safe_malloc(sizeof(valdat));
|
||||
|
||||
for(maplist_current = maps; maplist_current; maplist_current = maplist_current->next)
|
||||
@@ -538,6 +605,80 @@ struct mapcache *create_cache (ypmaplist
|
||||
free(filter);
|
||||
free(base);
|
||||
}
|
||||
+ else if (!strcmp((char *) mapcache_current->map, "master.passwd.byname"))
|
||||
+ {
|
||||
+ /* XXX Add preferences for filter and basedn */
|
||||
+ base = safe_malloc(strlen(ldaprefs.basedn) + strlen("ou=Staffs,") + 1);
|
||||
+ sprintf(base, "%s%s", "ou=Staffs,", ldaprefs.basedn);
|
||||
+ filter = safe_strdup("(objectClass=posixAccount)");
|
||||
+
|
||||
+ if(ldap_search_s(ldaprefs.ldap,
|
||||
+ base,
|
||||
+ LDAP_SCOPE_ONELEVEL,
|
||||
+ filter,
|
||||
+ user_attributes,
|
||||
+ 0,
|
||||
+ &ldapreturn) != -1)
|
||||
+ {
|
||||
+ for (record = ldap_first_entry(ldaprefs.ldap, ldapreturn); record; record = ldap_next_entry(ldaprefs.ldap, record))
|
||||
+ {
|
||||
+ pwinfo = safe_malloc(sizeof(struct pwinfo));
|
||||
+ rval = assemble_master_passwd(val, record, pwinfo);
|
||||
+ if(rval == YP_TRUE);
|
||||
+ {
|
||||
+ if(check_unique(mapcache_current, pwinfo->uid) == YP_NOKEY)
|
||||
+ {
|
||||
+ mapentry_current = safe_malloc(sizeof(struct mapentry));
|
||||
+ mapentry_current->key = safe_strdup(pwinfo->uid);
|
||||
+ mapentry_current->val = val->valdat_val;
|
||||
+ mapentry_current->next = mapcache_current->mapentry;
|
||||
+ mapcache_current->mapentry = mapentry_current;
|
||||
+ }
|
||||
+ }
|
||||
+ clean_pwinfo(pwinfo);
|
||||
+ }
|
||||
+ }
|
||||
+ ldap_msgfree(ldapreturn);
|
||||
+ free(filter);
|
||||
+ free(base);
|
||||
+ }
|
||||
+ else if (!strcmp((char *) mapcache_current->map, "master.passwd.byuid"))
|
||||
+ {
|
||||
+ /* XXX Add preferences for filter and basedn */
|
||||
+ base = safe_malloc(strlen(ldaprefs.basedn) + strlen("ou=Staffs,") + 1);
|
||||
+ sprintf(base, "%s%s", "ou=Staffs,", ldaprefs.basedn);
|
||||
+ filter = safe_strdup("(objectClass=posixAccount)");
|
||||
+
|
||||
+ if(ldap_search_s(ldaprefs.ldap,
|
||||
+ base,
|
||||
+ LDAP_SCOPE_ONELEVEL,
|
||||
+ filter,
|
||||
+ user_attributes,
|
||||
+ 0,
|
||||
+ &ldapreturn) != -1)
|
||||
+ {
|
||||
+ for (record = ldap_first_entry(ldaprefs.ldap, ldapreturn); record; record = ldap_next_entry(ldaprefs.ldap, record))
|
||||
+ {
|
||||
+ pwinfo = safe_malloc(sizeof(struct pwinfo));
|
||||
+ rval = assemble_master_passwd(val, record, pwinfo);
|
||||
+ if(rval == YP_TRUE);
|
||||
+ {
|
||||
+ if(check_unique(mapcache_current, pwinfo->uidnumber) == YP_NOKEY)
|
||||
+ {
|
||||
+ mapentry_current = safe_malloc(sizeof(struct mapentry));
|
||||
+ mapentry_current->key = safe_strdup(pwinfo->uidnumber);
|
||||
+ mapentry_current->val = val->valdat_val;
|
||||
+ mapentry_current->next = mapcache_current->mapentry;
|
||||
+ mapcache_current->mapentry = mapentry_current;
|
||||
+ }
|
||||
+ }
|
||||
+ clean_pwinfo(pwinfo);
|
||||
+ }
|
||||
+ }
|
||||
+ ldap_msgfree(ldapreturn);
|
||||
+ free(filter);
|
||||
+ free(base);
|
||||
+ }
|
||||
else if (!strcmp((char *) mapcache_current->map, "group.byname"))
|
||||
{
|
||||
/* XXX Add preferences for filter and basedn */
|
13
net/yptransitd/files/patch-src_modules_ldap_ldap.c
Normal file
13
net/yptransitd/files/patch-src_modules_ldap_ldap.c
Normal file
|
@ -0,0 +1,13 @@
|
|||
--- src/modules/ldap/ldap.c.orig 2001-10-03 01:45:29 UTC
|
||||
+++ src/modules/ldap/ldap.c
|
||||
@@ -60,7 +60,10 @@
|
||||
#include "cache.h"
|
||||
|
||||
#define CONFIG_FILE CONFDIR "/ldap.conf"
|
||||
+/*
|
||||
#define MAPS "auto.home auto_home amd.home passwd.byname passwd.byuid group.byname group.bygid"
|
||||
+*/
|
||||
+#define MAPS "auto.home auto_home amd.home master.passwd.byname master.passwd.byuid passwd.byname passwd.byuid group.byname group.bygid"
|
||||
|
||||
struct ldaprefs ldaprefs;
|
||||
|
12
net/yptransitd/files/patch-src_modules_ldap_ldap.h
Normal file
12
net/yptransitd/files/patch-src_modules_ldap_ldap.h
Normal file
|
@ -0,0 +1,12 @@
|
|||
--- src/modules/ldap/ldap.h.orig 2001-10-03 00:59:53 UTC
|
||||
+++ src/modules/ldap/ldap.h
|
||||
@@ -42,6 +42,9 @@
|
||||
#define PWLINE "%s:%s:%s:%s:%s:%s:%s"
|
||||
#define PWLINE_SIZE 6
|
||||
|
||||
+#define MPWLINE "%s:%s:%s:%s::0:0:%s:%s:%s"
|
||||
+#define MPWLINE_SIZE 11
|
||||
+
|
||||
#define GWLINE "%s:%s:%s:%s"
|
||||
#define GWLINE_SIZE 3
|
||||
|
Loading…
Add table
Reference in a new issue