MCPcopy Create free account
hub / github.com/creatale/node-dv / sarrayToStringRange

Function sarrayToStringRange

deps/leptonica/src/sarray1.c:798–862  ·  view source on GitHub ↗

! * \brief sarrayToStringRange() * * \param[in] sa string array * \param[in] first index of first string to use; starts with 0 * \param[in] nstrings number of strings to append into the result; use * 0 to append to the end of the sarray * \param[in] addnlflag flag: 0 adds nothing to each substring * 1 adds '\n' to each substring

Source from the content-addressed store, hash-verified

796 * </pre>
797 */
798char *
799sarrayToStringRange(SARRAY *sa,
800 l_int32 first,
801 l_int32 nstrings,
802 l_int32 addnlflag)
803{
804char *dest, *src, *str;
805l_int32 n, i, last, size, index, len;
806
807 PROCNAME("sarrayToStringRange");
808
809 if (!sa)
810 return (char *)ERROR_PTR("sa not defined", procName, NULL);
811 if (addnlflag != 0 && addnlflag != 1 && addnlflag != 2)
812 return (char *)ERROR_PTR("invalid addnlflag", procName, NULL);
813
814 n = sarrayGetCount(sa);
815
816 /* Empty sa; return char corresponding to addnlflag only */
817 if (n == 0) {
818 if (first == 0) {
819 if (addnlflag == 0)
820 return stringNew("");
821 if (addnlflag == 1)
822 return stringNew("\n");
823 else /* addnlflag == 2) */
824 return stringNew(" ");
825 } else {
826 return (char *)ERROR_PTR("first not valid", procName, NULL);
827 }
828 }
829
830 if (first < 0 || first >= n)
831 return (char *)ERROR_PTR("first not valid", procName, NULL);
832 if (nstrings == 0 || (nstrings > n - first))
833 nstrings = n - first; /* no overflow */
834 last = first + nstrings - 1;
835
836 size = 0;
837 for (i = first; i <= last; i++) {
838 if ((str = sarrayGetString(sa, i, L_NOCOPY)) == NULL)
839 return (char *)ERROR_PTR("str not found", procName, NULL);
840 size += strlen(str) + 2;
841 }
842
843 if ((dest = (char *)LEPT_CALLOC(size + 1, sizeof(char))) == NULL)
844 return (char *)ERROR_PTR("dest not made", procName, NULL);
845
846 index = 0;
847 for (i = first; i <= last; i++) {
848 src = sarrayGetString(sa, i, L_NOCOPY);
849 len = strlen(src);
850 memcpy(dest + index, src, len);
851 index += len;
852 if (addnlflag == 1) {
853 dest[index] = '\n';
854 index++;
855 } else if (addnlflag == 2) {

Callers 2

sarrayToStringFunction · 0.85
bmfGetLineStringsFunction · 0.85

Calls 3

sarrayGetCountFunction · 0.85
stringNewFunction · 0.85
sarrayGetStringFunction · 0.85

Tested by

no test coverage detected