/** ****************************************************************************** @file /common/xml/strda.cpp @brief Dalsi funkce pro praci s char* resp. DA @author Vta @version 1.0 ******************************************************************************/ #include "strda.h" #include "common/exc.h" #include "common/utils.h" #include #include // zrychleni #define KMemAlloc malloc #define KMemFree free void addtodanum(DA *big,const char *smallstr,int terminate,size_t count) { size_t k,i=(*big).getMaxId()+1; // +1 = na dalsi volny size_t j=count; for (k=0;k *big,const char *smallstr,int terminate) // Prida nakonec Dabig retezec small, a vlozi 0 pokud terminate { size_t k,i=(*big).getMaxId()+1; // +1 = na dalsi volny size_t j=strlen(smallstr); for (k=0;k *big,const wchar_t *smallstr,int terminate) // Prida nakonec Dabig retezec small, a vlozi 0 pokud terminate { size_t k,i=(*big).getMaxId()+1; // +1 = na dalsi volny size_t j=wcslen(smallstr); for (k=0;k *big,const char *smallstr,int terminate) // Prida nakonec Dabig retezec small, a vlozi 0 pokud terminate { size_t k,i=(*big).getMaxId()+1; // +1 = na dalsi volny size_t j=strlen(smallstr); for (k=0;k size ) { if ((*output)!=NULL) KMemFree(*output); size=i; *output=(char *) KMemAlloc(sizeof(char)*(size)); } strcpy(*output,input); return size; } else { return 0; } } size_t delandnewandwcscpy(wchar_t ** output, const wchar_t * input, size_t size) // pokud by se do output input nevesel, tak output zvetsi a pak tam input na kazdy pad nakopiruje, size je aktualni velikost (*output) { if (input!=NULL) { size_t i=wcslen(input)+1; if ( i > size ) { if ((*output)!=NULL) KMemFree(*output); size=i; *output=(wchar_t *) KMemAlloc(sizeof(wchar_t)*(size)); } // if (int(*output)==10692736) // printf("X"); wcscpy(*output,input); return size; } else { return 0; } } size_t datostr(char **output, DA *input, size_t size) // Prevede Dainput na retezec { int max=(*input).getActiveMembers(); int maxid=(*input).getMaxId(); // if ((*output==NULL) || (size<=max)) // zatim vzdy ... pada to na free { if (*output!=NULL) { KMemFree(*output); } if ((*input)[maxid]!=0) //chci aby moje retezce byly dycky 0terminated { size=max+1; *output = (char *)KMemAlloc(sizeof(char)* (max+1)); // printf("dealokuju"); } else { size=max; *output = (char *)KMemAlloc(sizeof(char)* (max)); } } int i,j=(*input).getShift(); for (i=0;i *input, size_t size) // Prevede Dainput na retezec { int max=(*input).getActiveMembers(); int maxid=(*input).getMaxId(); // if ((*output==NULL) || (size<=max)) // zatim vzdy ... pada to na free { if (*output!=NULL) { KMemFree(*output); } if ((*input)[maxid]!=0) //chci aby moje retezce byly dycky 0terminated { size=max+1; *output = (wchar_t *)KMemAlloc(sizeof(wchar_t)* (max+1)); // printf("dealokuju"); } else { size=max; *output = (wchar_t *)KMemAlloc(sizeof(wchar_t)* (max)); } } int i,j=(*input).getShift(); for (i=0;i=size) return -1; output[i]='&'; output[i+1]='#'; output[i+2]='6'; output[i+3]='0'; output[i+4]=';'; i=i+5; break; } case 62: // > tj. > { if ((i+5)>=size) return -1; output[i]='&'; output[i+1]='#'; output[i+2]='6'; output[i+3]='2'; output[i+4]=';'; // ; i=i+5; break; } case 38: // & tj. & { if ((i+5)>=size) return -1; output[i]='&'; output[i+1]='#'; output[i+2]='3'; output[i+3]='8'; output[i+4]=';'; i=i+5; break; } default: { if ((i+1)>=size) return -1; output[i]=input[j]; i=i+1; break; } } j++; } output[i]=0; } return 0; } int transformspecialstr(char * output,char * input, size_t size) { size_t i=0,j=0; // if (input!=NULL) { while (input[j]) { switch (input[j]) { case 60: // < < { if ((i+5)>=size) return -1; output[i]='&'; output[i+1]='#'; output[i+2]='6'; output[i+3]='0'; output[i+4]=';'; i=i+5; break; } case 62: // > tj. > { if ((i+5)>=size) return -1; output[i]='&'; output[i+1]='#'; output[i+2]='6'; output[i+3]='2'; output[i+4]=';'; // ; i=i+5; break; } case 38: // & tj. & { if ((i+5)>=size) return -1; output[i]='&'; output[i+1]='#'; output[i+2]='3'; output[i+3]='8'; output[i+4]=';'; i=i+5; break; } default: { if ((i+1)>=size) return -1; output[i]=input[j]; i=i+1; break; } } j++; } output[i]=0; } return 0; } void strcopy(char * output,char * input,int size) { int i=0; while ((i