[AD] constness in ugetx() - patch

[ Thread Index | Date Index | More lists.liballeg.org/allegro-developers Archives ]


OK, attached is a patch, which:

 - changes `ugetx', and the parameter in `register_uformat', to type
    int (*)(char**)

 - adds a new function, `ugetxc', which is of type
    int (*)(AL_CONST char**)

 - updates documentation to reflect change

 - changes various instances of `ugetx' to `ugetxc' in the source, in  
   order to stop compilation warnings.

(NB: ugetxc actually points to the same function, but is a pointer of a
different type, thus circumventing warnings/errors).

Also, I noticed that nobody applied the patch I sent ages ago which
updated the documentation to reflect `const' parameters. Unfortunately,
I no longer have this patch. Is this an important thing to document?

diff -ru allegro/docs/allegro._tx al-const-fix/docs/allegro._tx
--- allegro/docs/allegro._tx	Tue Nov 14 16:19:06 2000
+++ al-const-fix/docs/allegro._tx	Thu Nov 16 19:02:14 2000
@@ -366,12 +366,15 @@
    from the string.
 
 @@int @ugetx(char **s);
+@@int @ugetxc(const char **s);
 @xref ugetc, usetc, uwidth, ucwidth, uisok
    Low level helper function for reading Unicode text data. Given the 
    address of a pointer to a string in the current encoding format, it 
    returns the next character from the string, and advances the pointer to 
    the character after the one just read.
 
+   ugetxc is provided for working with pointer-to-pointer-to-const char data.
+
 @@int @usetc(char *s, int c);
 @xref ugetc, ugetx, uwidth, ucwidth, uisok
    Low level helper function for writing Unicode text data. It writes the 
diff -ru allegro/include/allegro/aintern.h al-const-fix/include/allegro/aintern.h
--- allegro/include/allegro/aintern.h	Wed Sep 27 10:44:34 2000
+++ al-const-fix/include/allegro/aintern.h	Thu Nov 16 19:02:14 2000
@@ -63,7 +63,7 @@
 {
    int id;
    AL_METHOD(int, u_getc, (AL_CONST char *s));
-   AL_METHOD(int, u_getx, (AL_CONST char **s));
+   AL_METHOD(int, u_getx, (char **s));
    AL_METHOD(int, u_setc, (char *s, int c));
    AL_METHOD(int, u_width, (AL_CONST char *s));
    AL_METHOD(int, u_cwidth, (int c));
diff -ru allegro/include/allegro.h al-const-fix/include/allegro.h
--- allegro/include/allegro.h	Sun Oct 29 17:16:30 2000
+++ al-const-fix/include/allegro.h	Thu Nov 16 19:02:14 2000
@@ -202,7 +202,7 @@
 
 AL_FUNC(void, set_uformat, (int type));
 AL_FUNC(int, get_uformat, (void));
-AL_FUNC(void, register_uformat, (int type, AL_METHOD(int, u_getc, (AL_CONST char *s)), AL_METHOD(int, u_getx, (AL_CONST char **s)), AL_METHOD(int, u_setc, (char *s, int c)), AL_METHOD(int, u_width, (AL_CONST char *s)), AL_METHOD(int, u_cwidth, (int c)), AL_METHOD(int, u_isok, (int c)), int u_width_max));
+AL_FUNC(void, register_uformat, (int type, AL_METHOD(int, u_getc, (AL_CONST char *s)), AL_METHOD(int, u_getx, (char **s)), AL_METHOD(int, u_setc, (char *s, int c)), AL_METHOD(int, u_width, (AL_CONST char *s)), AL_METHOD(int, u_cwidth, (int c)), AL_METHOD(int, u_isok, (int c)), int u_width_max));
 AL_FUNC(void, set_ucodepage, (AL_CONST unsigned short *table, AL_CONST unsigned short *extras));
 
 AL_FUNC(int, need_uconvert, (AL_CONST char *s, int type, int newtype));
@@ -219,7 +219,8 @@
 AL_ARRAY(char, empty_string);
 
 AL_FUNCPTR(int, ugetc, (AL_CONST char *s));
-AL_FUNCPTR(int, ugetx, (AL_CONST char **s));
+AL_FUNCPTR(int, ugetx, (char **s));
+AL_FUNCPTR(int, ugetxc, (AL_CONST char **s));
 AL_FUNCPTR(int, usetc, (char *s, int c));
 AL_FUNCPTR(int, uwidth, (AL_CONST char *s));
 AL_FUNCPTR(int, ucwidth, (int c));
diff -ru allegro/src/config.c al-const-fix/src/config.c
--- allegro/src/config.c	Sat Aug  5 23:43:40 2000
+++ al-const-fix/src/config.c	Thu Nov 16 18:49:04 2000
@@ -1144,7 +1144,7 @@
    s = umsg;
    pos = 0;
 
-   while ((c = ugetx(&s)) != 0) {
+   while ((c = ugetxc(&s)) != 0) {
       if ((uisspace(c)) || (c == '=') || (c == '#'))
 	 pos += usetc(name+pos, '_');
       else
diff -ru allegro/src/datafile.c al-const-fix/src/datafile.c
--- allegro/src/datafile.c	Wed Nov 15 06:59:26 2000
+++ al-const-fix/src/datafile.c	Thu Nov 16 18:51:40 2000
@@ -1553,7 +1553,7 @@
    /* split up the object name */
    pos = 0;
 
-   while ((c = ugetx(&objectname)) != 0) {
+   while ((c = ugetxc(&objectname)) != 0) {
       if ((c == '#') || (c == '/') || (c == OTHER_PATH_SEPARATOR)) {
 	 recurse = TRUE;
 	 break;
diff -ru allegro/src/file.c al-const-fix/src/file.c
--- allegro/src/file.c	Mon Jul 31 22:01:38 2000
+++ al-const-fix/src/file.c	Thu Nov 16 18:52:06 2000
@@ -525,7 +525,7 @@
    /* split up the object name */
    pos = 0;
 
-   while ((c = ugetx(&objname)) != 0) {
+   while ((c = ugetxc(&objname)) != 0) {
       if ((c == '#') || (c == '/') || (c == OTHER_PATH_SEPARATOR)) {
 	 recurse = TRUE;
 	 break;
@@ -1056,7 +1056,7 @@
    int c;
 
    if (password) {
-      while ((c = ugetx(&password)) != 0) {
+      while ((c = ugetxc(&password)) != 0) {
 	 the_password[i++] = c;
 	 if (i >= (int)sizeof(the_password)-1)
 	    break;
diff -ru allegro/src/fsel.c al-const-fix/src/fsel.c
--- allegro/src/fsel.c	Mon Nov 13 05:41:38 2000
+++ al-const-fix/src/fsel.c	Thu Nov 16 18:52:24 2000
@@ -385,8 +385,8 @@
    char *t1, *t2;
 
    for (;;) {
-      c1 = utolower(ugetx(&s1));
-      c2 = utolower(ugetx(&s2));
+      c1 = utolower(ugetxc(&s1));
+      c2 = utolower(ugetxc(&s2));
 
       if ((c1 >= '0') && (c1 <= '9') && (c2 >= '0') && (c2 <= '9')) {
 	 x1 = ustrtol(s1 - ucwidth(c1), &t1, 10);
diff -ru allegro/src/gui.c al-const-fix/src/gui.c
--- allegro/src/gui.c	Wed Sep  6 22:57:48 2000
+++ al-const-fix/src/gui.c	Thu Nov 16 18:52:56 2000
@@ -1338,7 +1338,7 @@
 {
    int d;
 
-   while ((d = ugetx(&s)) != 0) {
+   while ((d = ugetxc(&s)) != 0) {
       if (d == '&') {
 	 d = ugetc(s);
 	 if ((d != '&') && (utolower(d) == utolower(c & 0xFF)))
@@ -1389,7 +1389,7 @@
 
    for (c=0; m[c].text; c++) {
       s = m[c].text;
-      while ((d = ugetx(&s)) != 0) {
+      while ((d = ugetxc(&s)) != 0) {
 	 if (d == '&') {
 	    d = ugetc(s);
 	    if ((d != '&') && (utolower(d) == utolower(k)))
diff -ru allegro/src/text.c al-const-fix/src/text.c
--- allegro/src/text.c	Wed Sep 27 10:44:38 2000
+++ al-const-fix/src/text.c	Thu Nov 16 18:53:42 2000
@@ -105,7 +105,7 @@
 
    acquire_bitmap(bmp);
 
-   while ((c = ugetx(&str)) != 0) {
+   while ((c = ugetxc(&str)) != 0) {
       if ((!range) || (c < range->start) || (c > range->end)) {
 	 /* search for a suitable character range */
 	 range = find_range(f, c);
@@ -310,7 +310,7 @@
 
    len = 0;
 
-   while ((c = ugetx(&str)) != 0) {
+   while ((c = ugetxc(&str)) != 0) {
       range = find_range(f, c);
 
       if (!range)
diff -ru allegro/src/unicode.c al-const-fix/src/unicode.c
--- allegro/src/unicode.c	Sun Oct 15 18:39:28 2000
+++ al-const-fix/src/unicode.c	Thu Nov 16 18:56:46 2000
@@ -49,7 +49,7 @@
 /* ascii_getx:
  *  Reads a character from an ASCII string, advancing the pointer position.
  */
-static int ascii_getx(AL_CONST char **s)
+static int ascii_getx(char **s)
 {
    return *((unsigned char *)((*s)++));
 }
@@ -184,7 +184,7 @@
 /* ascii_cp_getx:
  *  Reads from an ASCII codepage string, advancing pointer position.
  */
-static int ascii_cp_getx(AL_CONST char **s)
+static int ascii_cp_getx(char **s)
 {
    return codepage_table[*((unsigned char *)((*s)++))];
 }
@@ -257,7 +257,7 @@
 /* unicode_getx:
  *  Reads a character from a Unicode string, advancing the pointer position.
  */
-static int unicode_getx(AL_CONST char **s)
+static int unicode_getx(char **s)
 {
    int c = *((unsigned short *)(*s));
    (*s) += sizeof(unsigned short);
@@ -340,7 +340,7 @@
 /* utf8_getx:
  *  Reads a character from a UTF-8 string, advancing the pointer position.
  */
-static int utf8_getx(AL_CONST char **s)
+static int utf8_getx(char **s)
 {
    int c = *((unsigned char *)((*s)++));
    int n, t;
@@ -483,7 +483,8 @@
 static int utype = U_UTF8;
 
 int (*ugetc)(AL_CONST char *s) = utf8_getc;
-int (*ugetx)(AL_CONST char **s) = utf8_getx;
+int (*ugetx)(char **s) = utf8_getx;
+int (*ugetxc)(AL_CONST char** s) = (int (*)(AL_CONST char**)) utf8_getx;
 int (*usetc)(char *s, int c) = utf8_setc;
 int (*uwidth)(AL_CONST char *s) = utf8_width;
 int (*ucwidth)(int c) = utf8_cwidth;
@@ -520,7 +521,8 @@
    if (info) {
       utype = info->id;
       ugetc = info->u_getc;
-      ugetx = info->u_getx;
+      ugetx = (int (*)(char**)) info->u_getx;
+      ugetxc = (int (*)(AL_CONST char**)) info->u_getx;
       usetc = info->u_setc;
       uwidth = info->u_width;
       ucwidth = info->u_cwidth;
@@ -544,7 +546,7 @@
  *  Allows the user to hook in custom routines for supporting a new string
  *  encoding format.
  */
-void register_uformat(int type, int (*ugetc)(AL_CONST char *s), int (*ugetx)(AL_CONST char **s), int (*usetc)(char *s, int c), int (*uwidth)(AL_CONST char *s), int (*ucwidth)(int c), int (*uisok)(int c), int uwidth_max)
+void register_uformat(int type, int (*ugetc)(AL_CONST char *s), int (*ugetx)(char **s), int (*usetc)(char *s, int c), int (*uwidth)(AL_CONST char *s), int (*ucwidth)(int c), int (*uisok)(int c), int uwidth_max)
 {
    UTYPE_INFO *info = _find_utype(type);
 
@@ -627,7 +629,7 @@
 
    size = 0;
 
-   while ((c = info->u_getx(&s)) != 0)
+   while ((c = info->u_getx((char**)&s)) != 0)
       size += outfo->u_cwidth(c);
 
    return size + outfo->u_cwidth(0);
@@ -657,7 +659,7 @@
 
    size -= outfo->u_cwidth(0);
 
-   while ((c = info->u_getx(&s)) != 0) {
+   while ((c = info->u_getx((char**)&s)) != 0) {
       if (!outfo->u_isok(c))
 	 c = '^';
 
@@ -713,7 +715,7 @@
 
    while (index-- > 0) {
       last = s;
-      if (!ugetx(&s)) {
+      if (!ugetxc(&s)) {
 	 s = last;
 	 break;
       }
@@ -1727,7 +1729,7 @@
 
    do {
       last = s;
-   } while (ugetx(&s) != 0);
+   } while (ugetxc(&s) != 0);
 
    return (long)last - (long)orig;
 }
@@ -1743,7 +1745,7 @@
    AL_CONST char *orig = s;
 
    do {
-   } while (ugetx(&s) != 0);
+   } while (ugetxc(&s) != 0);
 
    return (long)s - (long)orig;
 }
@@ -1758,7 +1760,7 @@
    int pos = 0;
    int c;
 
-   while ((c = ugetx(&src)) != 0)
+   while ((c = ugetxc(&src)) != 0)
       pos += usetc(dest+pos, c);
 
    usetc(dest+pos, 0);
@@ -1776,7 +1778,7 @@
    int pos = ustrsize(dest);
    int c;
 
-   while ((c = ugetx(&src)) != 0)
+   while ((c = ugetxc(&src)) != 0)
       pos += usetc(dest+pos, c);
 
    usetc(dest+pos, 0);
@@ -1793,7 +1795,7 @@
 {
    int c = 0;
 
-   while (ugetx(&s))
+   while (ugetxc(&s))
       c++;
 
    return c;
@@ -1809,8 +1811,8 @@
    int c1, c2;
 
    for (;;) {
-      c1 = ugetx(&s1);
-      c2 = ugetx(&s2);
+      c1 = ugetxc(&s1);
+      c2 = ugetxc(&s2);
 
       if (c1 != c2)
 	 return c1 - c2;
@@ -1832,7 +1834,7 @@
    int pos = 0;
    int c;
 
-   while (((c = ugetx(&src)) != 0) && (pos < n))
+   while (((c = ugetxc(&src)) != 0) && (pos < n))
       pos += usetc(dest+pos, c);
 
    usetc(dest+pos, 0);
@@ -1853,7 +1855,7 @@
    int pos = 0;
    int c;
 
-   while (((c = ugetx(&src)) != 0) && (pos < n))
+   while (((c = ugetxc(&src)) != 0) && (pos < n))
       pos += usetc(d+pos, c);
 
    usetc(d+pos, 0);
@@ -1876,8 +1878,8 @@
       return 0;
 
    for (;;) {
-      c1 = ugetx(&s1);
-      c2 = ugetx(&s2);
+      c1 = ugetxc(&s1);
+      c2 = ugetxc(&s2);
 
       if (c1 != c2)
 	 return c1 - c2;
@@ -1897,8 +1899,8 @@
    int c1, c2;
 
    for (;;) {
-      c1 = utolower(ugetx(&s1));
-      c2 = utolower(ugetx(&s2));
+      c1 = utolower(ugetxc(&s1));
+      c2 = utolower(ugetxc(&s2));
 
       if (c1 != c2)
 	 return c1 - c2;
@@ -2026,7 +2028,7 @@
    while ((c = ugetc(s)) != 0) {
       setp = set;
 
-      while ((d = ugetx(&setp)) != 0) {
+      while ((d = ugetxc(&setp)) != 0) {
 	 if (c == d)
 	    return (char *)s;
       }
@@ -2059,11 +2061,11 @@
    skip_leading_delimiters:
 
    prev_str = s;
-   c = ugetx((AL_CONST char **)&s);
+   c = ugetxc((AL_CONST char **)&s);
 
    setp = set;
 
-   while ((sc = ugetx(&setp)) != 0) {
+   while ((sc = ugetxc(&setp)) != 0) {
       if (c == sc)
 	 goto skip_leading_delimiters;
    }
@@ -2077,12 +2079,12 @@
 
    for (;;) {
       prev_str = s;
-      c = ugetx((AL_CONST char **)&s);
+      c = ugetxc((AL_CONST char **)&s);
 
       setp = set;
 
       do {
-	 sc = ugetx(&setp);
+	 sc = ugetxc(&setp);
 	 if (sc == c) {
 	    if (!c) {
 	       last = NULL;
@@ -2470,7 +2472,7 @@
    int len = 0;
    int c;
 
-   while ((c = ugetx(&s)) != 0) {
+   while ((c = ugetxc(&s)) != 0) {
       if ((info->precision >= 0) && (len >= info->precision))
 	 break;
 
@@ -2495,7 +2497,7 @@
    int shift, shiftbytes, shiftfiller;
    int len = 0;
 
-   while ((c = ugetx(&format)) != 0) {
+   while ((c = ugetxc(&format)) != 0) {
 
       if (c == '%') {
 	 if (ugetc(format) == '%') {

Bye for now,
-- 
Laurence Withers, lwithers@xxxxxxxxxx
                http://www.lwithers.demon.co.uk/

Attachment: signature.asc
Description: PGP signature



Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/