| OLD | NEW |
| 1 #define IN_LIBEXSLT | 1 #define IN_LIBEXSLT |
| 2 #include "libexslt/libexslt.h" | 2 #include "libexslt/libexslt.h" |
| 3 | 3 |
| 4 #if defined(WIN32) && !defined (__CYGWIN__) && (!__MINGW32__) | 4 #if defined(WIN32) && !defined (__CYGWIN__) && (!__MINGW32__) |
| 5 #include <win32config.h> | 5 #include <win32config.h> |
| 6 #else | 6 #else |
| 7 #include "config.h" | 7 #include "config.h" |
| 8 #endif | 8 #endif |
| 9 | 9 |
| 10 #include <libxml/tree.h> | 10 #include <libxml/tree.h> |
| (...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 344 | 344 |
| 345 /** | 345 /** |
| 346 * exsltStrPaddingFunction: | 346 * exsltStrPaddingFunction: |
| 347 * @ctxt: an XPath parser context | 347 * @ctxt: an XPath parser context |
| 348 * @nargs: the number of arguments | 348 * @nargs: the number of arguments |
| 349 * | 349 * |
| 350 * Creates a padding string of a certain length. | 350 * Creates a padding string of a certain length. |
| 351 */ | 351 */ |
| 352 static void | 352 static void |
| 353 exsltStrPaddingFunction (xmlXPathParserContextPtr ctxt, int nargs) { | 353 exsltStrPaddingFunction (xmlXPathParserContextPtr ctxt, int nargs) { |
| 354 int number, str_len = 0; | 354 int number, str_len = 0, str_size = 0; |
| 355 xmlChar *str = NULL, *ret = NULL, *tmp; | 355 xmlChar *str = NULL, *ret = NULL; |
| 356 | 356 |
| 357 if ((nargs < 1) || (nargs > 2)) { | 357 if ((nargs < 1) || (nargs > 2)) { |
| 358 xmlXPathSetArityError(ctxt); | 358 xmlXPathSetArityError(ctxt); |
| 359 return; | 359 return; |
| 360 } | 360 } |
| 361 | 361 |
| 362 if (nargs == 2) { | 362 if (nargs == 2) { |
| 363 str = xmlXPathPopString(ctxt); | 363 str = xmlXPathPopString(ctxt); |
| 364 str_len = xmlUTF8Strlen(str); | 364 str_len = xmlUTF8Strlen(str); |
| 365 str_size = xmlStrlen(str); |
| 365 } | 366 } |
| 366 if (str_len == 0) { | 367 if (str_len == 0) { |
| 367 if (str != NULL) xmlFree(str); | 368 if (str != NULL) xmlFree(str); |
| 368 str = xmlStrdup((const xmlChar *) " "); | 369 str = xmlStrdup((const xmlChar *) " "); |
| 369 str_len = 1; | 370 str_len = 1; |
| 371 str_size = 1; |
| 370 } | 372 } |
| 371 | 373 |
| 372 number = (int) xmlXPathPopNumber(ctxt); | 374 number = (int) xmlXPathPopNumber(ctxt); |
| 373 | 375 |
| 374 if (number <= 0) { | 376 if (number <= 0) { |
| 375 xmlXPathReturnEmptyString(ctxt); | 377 xmlXPathReturnEmptyString(ctxt); |
| 376 xmlFree(str); | 378 xmlFree(str); |
| 377 return; | 379 return; |
| 378 } | 380 } |
| 379 | 381 |
| 380 while (number >= str_len) { | 382 while (number >= str_len) { |
| 381 » ret = xmlStrncat(ret, str, str_len); | 383 » ret = xmlStrncat(ret, str, str_size); |
| 382 number -= str_len; | 384 number -= str_len; |
| 383 } | 385 } |
| 384 tmp = xmlUTF8Strndup (str, number); | 386 if (number > 0) { |
| 385 ret = xmlStrcat(ret, tmp); | 387 » str_size = xmlUTF8Strsize(str, number); |
| 386 if (tmp != NULL) | 388 » ret = xmlStrncat(ret, str, str_size); |
| 387 » xmlFree (tmp); | 389 } |
| 388 | 390 |
| 389 xmlXPathReturnString(ctxt, ret); | 391 xmlXPathReturnString(ctxt, ret); |
| 390 | 392 |
| 391 if (str != NULL) | 393 if (str != NULL) |
| 392 xmlFree(str); | 394 xmlFree(str); |
| 393 } | 395 } |
| 394 | 396 |
| 395 /** | 397 /** |
| 396 * exsltStrAlignFunction: | 398 * exsltStrAlignFunction: |
| 397 * @ctxt: an XPath parser context | 399 * @ctxt: an XPath parser context |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 438 int right_start; | 440 int right_start; |
| 439 | 441 |
| 440 ret = xmlUTF8Strndup (padding, left); | 442 ret = xmlUTF8Strndup (padding, left); |
| 441 ret = xmlStrcat (ret, str); | 443 ret = xmlStrcat (ret, str); |
| 442 | 444 |
| 443 right_start = xmlUTF8Strsize (padding, left + str_l); | 445 right_start = xmlUTF8Strsize (padding, left + str_l); |
| 444 ret = xmlStrcat (ret, padding + right_start); | 446 ret = xmlStrcat (ret, padding + right_start); |
| 445 } else { | 447 } else { |
| 446 int str_s; | 448 int str_s; |
| 447 | 449 |
| 448 » str_s = xmlStrlen (str); | 450 » str_s = xmlUTF8Strsize(padding, str_l); |
| 449 ret = xmlStrdup (str); | 451 ret = xmlStrdup (str); |
| 450 ret = xmlStrcat (ret, padding + str_s); | 452 ret = xmlStrcat (ret, padding + str_s); |
| 451 } | 453 } |
| 452 } | 454 } |
| 453 | 455 |
| 454 xmlXPathReturnString (ctxt, ret); | 456 xmlXPathReturnString (ctxt, ret); |
| 455 | 457 |
| 456 xmlFree(str); | 458 xmlFree(str); |
| 457 xmlFree(padding); | 459 xmlFree(padding); |
| 458 xmlFree(alignment); | 460 xmlFree(alignment); |
| (...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 831 (const xmlChar *) "padding", | 833 (const xmlChar *) "padding", |
| 832 (const xmlChar *) EXSLT_STRINGS_NAMESPACE, | 834 (const xmlChar *) EXSLT_STRINGS_NAMESPACE, |
| 833 exsltStrPaddingFunction) | 835 exsltStrPaddingFunction) |
| 834 && !xmlXPathRegisterFuncNS(ctxt, | 836 && !xmlXPathRegisterFuncNS(ctxt, |
| 835 (const xmlChar *) "align", | 837 (const xmlChar *) "align", |
| 836 (const xmlChar *) EXSLT_STRINGS_NAMESPACE, | 838 (const xmlChar *) EXSLT_STRINGS_NAMESPACE, |
| 837 exsltStrAlignFunction) | 839 exsltStrAlignFunction) |
| 838 && !xmlXPathRegisterFuncNS(ctxt, | 840 && !xmlXPathRegisterFuncNS(ctxt, |
| 839 (const xmlChar *) "concat", | 841 (const xmlChar *) "concat", |
| 840 (const xmlChar *) EXSLT_STRINGS_NAMESPACE, | 842 (const xmlChar *) EXSLT_STRINGS_NAMESPACE, |
| 841 exsltStrConcatFunction) | 843 exsltStrConcatFunction)) { |
| 842 && !xmlXPathRegisterFuncNS(ctxt, | |
| 843 (const xmlChar *) "replace", | |
| 844 (const xmlChar *) EXSLT_STRINGS_NAMESPACE, | |
| 845 exsltStrReplaceFunction)) { | |
| 846 return 0; | 844 return 0; |
| 847 } | 845 } |
| 848 return -1; | 846 return -1; |
| 849 } | 847 } |
| OLD | NEW |