projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge 'master' into 'psppsheet'.
[pspp]
/
src
/
libpspp
/
str.c
diff --git
a/src/libpspp/str.c
b/src/libpspp/str.c
index c630cf9ada761aa89b260197ca0718b1e9ff4344..44e4a1da28ee7183a98eb1e819a755bc55759c0f 100644
(file)
--- a/
src/libpspp/str.c
+++ b/
src/libpspp/str.c
@@
-1,5
+1,5
@@
/* PSPP - a program for statistical analysis.
/* PSPP - a program for statistical analysis.
- Copyright (C) 1997-9, 2000, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
+ Copyright (C) 1997-9, 2000, 2006, 2009, 2010, 2011
, 2012
Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@
-270,17
+270,22
@@
str_format_26adic (unsigned long int number, char buffer[], size_t size)
while (number-- > 0)
{
if (length >= size)
while (number-- > 0)
{
if (length >= size)
-
return false
;
+
goto overflow
;
buffer[length++] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[number % 26];
number /= 26;
}
if (length >= size)
buffer[length++] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[number % 26];
number /= 26;
}
if (length >= size)
-
return false
;
+
goto overflow
;
buffer[length] = '\0';
buf_reverse (buffer, length);
return true;
buffer[length] = '\0';
buf_reverse (buffer, length);
return true;
+
+overflow:
+ if (length > 0)
+ buffer[0] = '\0';
+ return false;
}
/* Sets the SIZE bytes starting at BLOCK to C,
}
/* Sets the SIZE bytes starting at BLOCK to C,
@@
-486,11
+491,15
@@
bool
ss_tokenize (struct substring ss, struct substring delimiters,
size_t *save_idx, struct substring *token)
{
ss_tokenize (struct substring ss, struct substring delimiters,
size_t *save_idx, struct substring *token)
{
+ bool found_token;
+
ss_advance (&ss, *save_idx);
*save_idx += ss_ltrim (&ss, delimiters);
ss_get_bytes (&ss, ss_cspan (ss, delimiters), token);
ss_advance (&ss, *save_idx);
*save_idx += ss_ltrim (&ss, delimiters);
ss_get_bytes (&ss, ss_cspan (ss, delimiters), token);
- *save_idx += ss_length (*token) + 1;
- return ss_length (*token) > 0;
+
+ found_token = ss_length (*token) > 0;
+ *save_idx += ss_length (*token) + found_token;
+ return found_token;
}
/* Removes the first CNT bytes from SS. */
}
/* Removes the first CNT bytes from SS. */
@@
-1539,6
+1548,13
@@
ds_put_byte_multiple (struct string *st, int ch, size_t cnt)
memset (ds_put_uninit (st, cnt), ch, cnt);
}
memset (ds_put_uninit (st, cnt), ch, cnt);
}
+/* Appends Unicode code point UC to ST in UTF-8 encoding. */
+void
+ds_put_unichar (struct string *st, ucs4_t uc)
+{
+ ds_extend (st, ds_length (st) + 6);
+ st->ss.length += u8_uctomb (CHAR_CAST (uint8_t *, ds_end (st)), uc, 6);
+}
/* If relocation has been enabled, replace ST,
with its relocated version */
/* If relocation has been enabled, replace ST,
with its relocated version */