1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-08 05:57:51 +03:00

r2577: - I recently found out that charaters below 0x3F are guaranteed not to

occur as secondary bytes in any multi-byte character set. This
  allows for a very simple optimisation in strchr_m() and
  strrchr_m(). It might be a good idea to pick this up for Samba3.

- the horrible toktocliplist() is only used in clitar.c, so move it
  there, to prevent anyone else from being tempted to use it.
This commit is contained in:
Andrew Tridgell 2004-09-24 01:21:21 +00:00 committed by Gerald (Jerry) Carter
parent 5b88226f90
commit 663b7b75dd
2 changed files with 58 additions and 45 deletions

View File

@ -38,6 +38,52 @@
#include "includes.h"
#include "clitar.h"
/**
Convert list of tokens to array; dependent on above routine.
Uses last_ptr from above - bit of a hack.
**/
static char **toktocliplist(const char *ptr, int *ctok, const char *sep)
{
char *s = ptr;
int ictok=0;
char **ret, **iret;
if (!sep)
sep = " \t\n\r";
while(*s && strchr_m(sep,*s))
s++;
/* nothing left? */
if (!*s)
return(NULL);
do {
ictok++;
while(*s && (!strchr_m(sep,*s)))
s++;
while(*s && strchr_m(sep,*s))
*s++=0;
} while(*s);
*ctok=ictok;
s = ptr;
if (!(ret=iret=malloc(ictok*sizeof(char *))))
return NULL;
while(ictok--) {
*iret++=s;
while(*s++)
;
while(!*s)
s++;
}
return ret;
}
static int clipfind(char **aret, int ret, char *tok);
void dos_clean_name(char *s);

View File

@ -76,51 +76,6 @@ BOOL next_token(const char **ptr,char *buff, const char *sep, size_t bufsize)
static uint16_t tmpbuf[sizeof(pstring)];
/**
Convert list of tokens to array; dependent on above routine.
Uses last_ptr from above - bit of a hack.
**/
char **toktocliplist(const char *ptr, int *ctok, const char *sep)
{
char *s = ptr;
int ictok=0;
char **ret, **iret;
if (!sep)
sep = " \t\n\r";
while(*s && strchr_m(sep,*s))
s++;
/* nothing left? */
if (!*s)
return(NULL);
do {
ictok++;
while(*s && (!strchr_m(sep,*s)))
s++;
while(*s && strchr_m(sep,*s))
*s++=0;
} while(*s);
*ctok=ictok;
s = ptr;
if (!(ret=iret=malloc(ictok*sizeof(char *))))
return NULL;
while(ictok--) {
*iret++=s;
while(*s++)
;
while(!*s)
s++;
}
return ret;
}
/**
Case insensitive string compararison.
@ -736,6 +691,12 @@ char *strchr_m(const char *s, char c)
pstring s2;
smb_ucs2_t *p;
/* characters below 0x3F are guaranteed to not appear in
non-initial position in multi-byte charsets */
if ((c & 0xC0) == 0) {
return strchr(s, c);
}
push_ucs2(ws, s, sizeof(ws), STR_TERMINATE);
p = strchr_w(ws, UCS2_CHAR(c));
if (!p)
@ -751,6 +712,12 @@ char *strrchr_m(const char *s, char c)
pstring s2;
smb_ucs2_t *p;
/* characters below 0x3F are guaranteed to not appear in
non-initial position in multi-byte charsets */
if ((c & 0xC0) == 0) {
return strrchr(s, c);
}
push_ucs2(ws, s, sizeof(ws), STR_TERMINATE);
p = strrchr_w(ws, UCS2_CHAR(c));
if (!p)