Author: jra
Date: 2007-09-17 19:43:06 +0000 (Mon, 17 Sep 2007)
New Revision: 25199

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=25199

Log:
Remove pstring from strdup_upper - make it the
same as talloc_strdup_upper.
Jeremy.

Modified:
   branches/SAMBA_3_2/source/lib/charcnv.c
   branches/SAMBA_3_2_0/source/lib/charcnv.c


Changeset:
Modified: branches/SAMBA_3_2/source/lib/charcnv.c
===================================================================
--- branches/SAMBA_3_2/source/lib/charcnv.c     2007-09-17 15:34:22 UTC (rev 
25198)
+++ branches/SAMBA_3_2/source/lib/charcnv.c     2007-09-17 19:43:06 UTC (rev 
25199)
@@ -759,49 +759,68 @@
 
 /**
  strdup() a unix string to upper case.
- Max size is pstring.
 **/
 
 char *strdup_upper(const char *s)
 {
-       pstring out_buffer;
+       char *out_buffer = SMB_STRDUP(s);
        const unsigned char *p = (const unsigned char *)s;
        unsigned char *q = (unsigned char *)out_buffer;
 
+       if (!q) {
+               return NULL;
+       }
+
        /* this is quite a common operation, so we want it to be
           fast. We optimise for the ascii case, knowing that all our
           supported multi-byte character sets are ascii-compatible
           (ie. they match for the first 128 chars) */
 
-       while (1) {
+       while (*p) {
                if (*p & 0x80)
                        break;
                *q++ = toupper_ascii(*p);
-               if (!*p)
-                       break;
                p++;
-               if (p - ( const unsigned char *)s >= sizeof(pstring))
-                       break;
        }
 
        if (*p) {
                /* MB case. */
                size_t size;
-               wpstring buffer;
-               size = convert_string(CH_UNIX, CH_UTF16LE, s, -1, buffer, 
sizeof(buffer), True);
+               smb_ucs2_t *buffer = NULL;
+
+               SAFE_FREE(out_buffer);
+               size = convert_string_allocate(NULL,
+                                       CH_UNIX,
+                                       CH_UTF16LE,
+                                       s,
+                                       strlen(s) + 1,
+                                       (void **)(void *)&buffer,
+                                       True);
                if (size == (size_t)-1) {
                        return NULL;
                }
 
                strupper_w(buffer);
 
-               size = convert_string(CH_UTF16LE, CH_UNIX, buffer, -1, 
out_buffer, sizeof(out_buffer), True);
+               size = convert_string_allocate(NULL,
+                                       CH_UTF16LE,
+                                       CH_UNIX,
+                                       buffer,
+                                       size,
+                                       (void **)(void *)&out_buffer,
+                                       True);
+
+               /* Don't need the intermediate buffer
+                * anymore.
+                */
+
+               TALLOC_FREE(buffer);
                if (size == (size_t)-1) {
                        return NULL;
                }
        }
 
-       return SMB_STRDUP(out_buffer);
+       return out_buffer;
 }
 
 /**
@@ -823,12 +842,10 @@
           supported multi-byte character sets are ascii-compatible
           (ie. they match for the first 128 chars) */
 
-       while (1) {
+       while (*p) {
                if (*p & 0x80)
                        break;
                *q++ = toupper_ascii(*p);
-               if (!*p)
-                       break;
                p++;
        }
 

Modified: branches/SAMBA_3_2_0/source/lib/charcnv.c
===================================================================
--- branches/SAMBA_3_2_0/source/lib/charcnv.c   2007-09-17 15:34:22 UTC (rev 
25198)
+++ branches/SAMBA_3_2_0/source/lib/charcnv.c   2007-09-17 19:43:06 UTC (rev 
25199)
@@ -759,49 +759,68 @@
 
 /**
  strdup() a unix string to upper case.
- Max size is pstring.
 **/
 
 char *strdup_upper(const char *s)
 {
-       pstring out_buffer;
+       char *out_buffer = SMB_STRDUP(s);
        const unsigned char *p = (const unsigned char *)s;
        unsigned char *q = (unsigned char *)out_buffer;
 
+       if (!q) {
+               return NULL;
+       }
+
        /* this is quite a common operation, so we want it to be
           fast. We optimise for the ascii case, knowing that all our
           supported multi-byte character sets are ascii-compatible
           (ie. they match for the first 128 chars) */
 
-       while (1) {
+       while (*p) {
                if (*p & 0x80)
                        break;
                *q++ = toupper_ascii(*p);
-               if (!*p)
-                       break;
                p++;
-               if (p - ( const unsigned char *)s >= sizeof(pstring))
-                       break;
        }
 
        if (*p) {
                /* MB case. */
                size_t size;
-               wpstring buffer;
-               size = convert_string(CH_UNIX, CH_UTF16LE, s, -1, buffer, 
sizeof(buffer), True);
+               smb_ucs2_t *buffer = NULL;
+
+               SAFE_FREE(out_buffer);
+               size = convert_string_allocate(NULL,
+                                       CH_UNIX,
+                                       CH_UTF16LE,
+                                       s,
+                                       strlen(s) + 1,
+                                       (void **)(void *)&buffer,
+                                       True);
                if (size == (size_t)-1) {
                        return NULL;
                }
 
                strupper_w(buffer);
 
-               size = convert_string(CH_UTF16LE, CH_UNIX, buffer, -1, 
out_buffer, sizeof(out_buffer), True);
+               size = convert_string_allocate(NULL,
+                                       CH_UTF16LE,
+                                       CH_UNIX,
+                                       buffer,
+                                       size,
+                                       (void **)(void *)&out_buffer,
+                                       True);
+
+               /* Don't need the intermediate buffer
+                * anymore.
+                */
+
+               TALLOC_FREE(buffer);
                if (size == (size_t)-1) {
                        return NULL;
                }
        }
 
-       return SMB_STRDUP(out_buffer);
+       return out_buffer;
 }
 
 /**
@@ -823,12 +842,10 @@
           supported multi-byte character sets are ascii-compatible
           (ie. they match for the first 128 chars) */
 
-       while (1) {
+       while (*p) {
                if (*p & 0x80)
                        break;
                *q++ = toupper_ascii(*p);
-               if (!*p)
-                       break;
                p++;
        }
 

Reply via email to