[svn-commits] tilghman: branch tilghman/issue16461 r271624 - in /team/tilghman/issue16461: ...
SVN commits to the Digium repositories
svn-commits at lists.digium.com
Mon Jun 21 16:47:40 CDT 2010
Author: tilghman
Date: Mon Jun 21 16:47:35 2010
New Revision: 271624
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=271624
Log:
More tests, add missing 'd' option for writeline mode
Modified:
team/tilghman/issue16461/funcs/func_env.c
team/tilghman/issue16461/tests/test_func_file.c
Modified: team/tilghman/issue16461/funcs/func_env.c
URL: http://svnview.digium.com/svn/asterisk/team/tilghman/issue16461/funcs/func_env.c?view=diff&rev=271624&r1=271623&r2=271624
==============================================================================
--- team/tilghman/issue16461/funcs/func_env.c (original)
+++ team/tilghman/issue16461/funcs/func_env.c Mon Jun 21 16:47:35 2010
@@ -92,6 +92,9 @@
</option>
<option name="a">
<para>In write mode only, the append option is used to append to the end of the file, instead of overwriting the existing file.</para>
+ </option>
+ <option name="d">
+ <para>In write mode and line mode only, the delete option is used to eliminate a line, instead of setting it to blank.</para>
</option>
</optionlist>
</parameter>
@@ -1005,26 +1008,31 @@
fseeko(ff, offset_offset, SEEK_SET);
if (fwrite(value, 1, vlength, ff) < vlength) {
ast_log(LOG_ERROR, "Short write?!!\n");
- } else if (fwrite(format2term(newline_format), 1, strlen(format2term(newline_format)), ff) < strlen(format2term(newline_format))) {
+ } else if (!strchr(args.options, 'd') && fwrite(format2term(newline_format), 1, strlen(format2term(newline_format)), ff) < strlen(format2term(newline_format))) {
ast_log(LOG_ERROR, "Short write?!!\n");
}
fclose(ff);
- } else if (length_offset - offset_offset > vlength + strlen(format2term(newline_format))) {
+ } else if (length_offset - offset_offset > vlength + (strchr(args.options, 'd') ? 0 : strlen(format2term(newline_format)))) {
/* More complex case - need to shorten file */
+ off_t cur;
fseeko(ff, offset_offset, SEEK_SET);
if (fwrite(value, 1, vlength, ff) < vlength) {
ast_log(LOG_ERROR, "Short write?!!\n");
fclose(ff);
return -1;
- }
- while (ftello(ff) < flength) {
+ } else if (!strchr(args.options, 'd') && fwrite(format2term(newline_format), 1, strlen(format2term(newline_format)), ff) < strlen(format2term(newline_format))) {
+ ast_log(LOG_ERROR, "Short write?!!\n");
+ fclose(ff);
+ return -1;
+ }
+ while ((cur = ftello(ff)) < flength) {
fseek(ff, length_offset - offset_offset, SEEK_CUR);
if (fread(fbuf, 1, sizeof(fbuf), ff) < sizeof(fbuf)) {
ast_log(LOG_ERROR, "Short read?!!\n");
fclose(ff);
return -1;
}
- fseek(ff, offset_offset - length_offset, SEEK_CUR);
+ fseek(ff, cur + offset_offset - length_offset, SEEK_SET);
if (fwrite(fbuf, 1, sizeof(fbuf), ff) < sizeof(fbuf)) {
ast_log(LOG_ERROR, "Short write?!!\n");
fclose(ff);
@@ -1038,11 +1046,12 @@
fclose(ff);
} else {
/* Most complex case - need to lengthen file */
- off_t lastwritten;
+ size_t vlen = vlength + (strchr(args.options, 'd') ? 0 : strlen(format2term(newline_format)));
int64_t origlen = length_offset - offset_offset;
- fseeko(ff, vlength - origlen, SEEK_END);
+ off_t lastwritten = flength + vlen - origlen;
+ fseeko(ff, vlen - origlen, SEEK_END);
while (offset_offset + sizeof(fbuf) < ftello(ff)) {
- fseeko(ff, -1 * (sizeof(fbuf) + (vlength - origlen)), SEEK_CUR);
+ fseeko(ff, -1 * (sizeof(fbuf) + (vlen - origlen)), SEEK_CUR);
if (fread(fbuf, 1, sizeof(fbuf), ff) < sizeof(fbuf)) {
ast_log(LOG_ERROR, "Short read?!!\n");
fclose(ff);
@@ -1054,8 +1063,8 @@
fclose(ff);
return -1;
}
- }
- lastwritten = ftello(ff) - sizeof(fbuf);
+ lastwritten = ftello(ff) - sizeof(fbuf);
+ }
fseek(ff, length_offset, SEEK_SET);
if (fread(fbuf, 1, sizeof(fbuf), ff) < sizeof(fbuf)) {
ast_log(LOG_ERROR, "Short read?!!\n");
@@ -1067,9 +1076,10 @@
ast_log(LOG_ERROR, "Short write?!!\n");
fclose(ff);
return -1;
- }
- if (fwrite(format2term(newline_format), 1, strlen(format2term(newline_format)), ff) < strlen(format2term(newline_format))) {
+ } else if (!strchr(args.options, 'd') && fwrite(format2term(newline_format), 1, strlen(format2term(newline_format)), ff) < strlen(format2term(newline_format))) {
ast_log(LOG_ERROR, "Short write?!!\n");
+ fclose(ff);
+ return -1;
} else if (fwrite(fbuf, 1, (foplen = lastwritten - ftello(ff)), ff) < foplen) {
ast_log(LOG_ERROR, "Short write?!!\n");
}
Modified: team/tilghman/issue16461/tests/test_func_file.c
URL: http://svnview.digium.com/svn/asterisk/team/tilghman/issue16461/tests/test_func_file.c?view=diff&rev=271624&r1=271623&r2=271624
==============================================================================
--- team/tilghman/issue16461/tests/test_func_file.c (original)
+++ team/tilghman/issue16461/tests/test_func_file.c Mon Jun 21 16:47:35 2010
@@ -110,6 +110,87 @@
{ "123456789", "0,-8", "fg", "fg23456789" },
{ "123456789", "-9,1", "fg", "fg23456789" },
{ "123456789", "-9,-8", "fg", "fg23456789" },
+ /* Single line replace, same length */
+ { "123\n456\n789\n", "0,1,l", "abc", "abc\n456\n789\n" },
+ { "123\n456\n789\n", "-3,1,l", "abc", "abc\n456\n789\n" },
+ { "123\n456\n789\n", "0,-2,l", "abc", "abc\n456\n789\n" },
+ { "123\n456\n789\n", "-3,-2,l", "abc", "abc\n456\n789\n" },
+ { "123\n456\n789\n", "1,1,l", "abc", "123\nabc\n789\n" },
+ { "123\n456\n789\n", "1,-1,l", "abc", "123\nabc\n789\n" },
+ { "123\n456\n789\n", "-2,1,l", "abc", "123\nabc\n789\n" },
+ { "123\n456\n789\n", "-2,-1,l", "abc", "123\nabc\n789\n" },
+ /* Single line replace, one character short */
+ { "123\n456\n789\n", "0,1,l", "ab", "ab\n456\n789\n" },
+ { "123\n456\n789\n", "-3,1,l", "ab", "ab\n456\n789\n" },
+ { "123\n456\n789\n", "0,-2,l", "ab", "ab\n456\n789\n" },
+ { "123\n456\n789\n", "-3,-2,l", "ab", "ab\n456\n789\n" },
+ { "123\n456\n789\n", "1,1,l", "ab", "123\nab\n789\n" },
+ { "123\n456\n789\n", "1,-1,l", "ab", "123\nab\n789\n" },
+ { "123\n456\n789\n", "-2,1,l", "ab", "123\nab\n789\n" },
+ { "123\n456\n789\n", "-2,-1,l", "ab", "123\nab\n789\n" },
+ /* Single line replace, one character long */
+ { "123\n456\n789\n", "0,1,l", "abcd", "abcd\n456\n789\n" },
+ { "123\n456\n789\n", "-3,1,l", "abcd", "abcd\n456\n789\n" },
+ { "123\n456\n789\n", "0,-2,l", "abcd", "abcd\n456\n789\n" },
+ { "123\n456\n789\n", "-3,-2,l", "abcd", "abcd\n456\n789\n" },
+ { "123\n456\n789\n", "1,1,l", "abcd", "123\nabcd\n789\n" },
+ { "123\n456\n789\n", "1,-1,l", "abcd", "123\nabcd\n789\n" },
+ { "123\n456\n789\n", "-2,1,l", "abcd", "123\nabcd\n789\n" },
+ { "123\n456\n789\n", "-2,-1,l", "abcd", "123\nabcd\n789\n" },
+ /* Multi-line replace, same number of characters, 2 lines for 1 */
+ { "123\n456\n789\n", "0,2,l", "abcdefg", "abcdefg\n789\n" },
+ { "123\n456\n789\n", "-3,2,l", "abcdefg", "abcdefg\n789\n" },
+ { "123\n456\n789\n", "0,-1,l", "abcdefg", "abcdefg\n789\n" },
+ { "123\n456\n789\n", "-3,-1,l", "abcdefg", "abcdefg\n789\n" },
+ { "123\n456\n789\n", "1,2,l", "abcdefg", "123\nabcdefg\n" },
+ { "123\n456\n789\n", "1,,l", "abcdefg", "123\nabcdefg\n" },
+ { "123\n456\n789\n", "-2,2,l", "abcdefg", "123\nabcdefg\n" },
+ { "123\n456\n789\n", "-2,,l", "abcdefg", "123\nabcdefg\n" },
+ /* Multi-line replace, shorter number of characters, 2 lines for 1 */
+ { "123\n456\n789\n", "0,2,l", "abcd", "abcd\n789\n" },
+ { "123\n456\n789\n", "-3,2,l", "abcd", "abcd\n789\n" },
+ { "123\n456\n789\n", "0,-1,l", "abcd", "abcd\n789\n" },
+ { "123\n456\n789\n", "-3,-1,l", "abcd", "abcd\n789\n" },
+ { "123\n456\n789\n", "1,2,l", "abcd", "123\nabcd\n" },
+ { "123\n456\n789\n", "1,,l", "abcd", "123\nabcd\n" },
+ { "123\n456\n789\n", "-2,2,l", "abcd", "123\nabcd\n" },
+ { "123\n456\n789\n", "-2,,l", "abcd", "123\nabcd\n" },
+ /* Multi-line replace, longer number of characters, 2 lines for 1 */
+ { "123\n456\n789\n", "0,2,l", "abcdefghijklmnop", "abcdefghijklmnop\n789\n" },
+ { "123\n456\n789\n", "-3,2,l", "abcdefghijklmnop", "abcdefghijklmnop\n789\n" },
+ { "123\n456\n789\n", "0,-1,l", "abcdefghijklmnop", "abcdefghijklmnop\n789\n" },
+ { "123\n456\n789\n", "-3,-1,l", "abcdefghijklmnop", "abcdefghijklmnop\n789\n" },
+ { "123\n456\n789\n", "1,2,l", "abcdefghijklmnop", "123\nabcdefghijklmnop\n" },
+ { "123\n456\n789\n", "1,,l", "abcdefghijklmnop", "123\nabcdefghijklmnop\n" },
+ { "123\n456\n789\n", "-2,2,l", "abcdefghijklmnop", "123\nabcdefghijklmnop\n" },
+ { "123\n456\n789\n", "-2,,l", "abcdefghijklmnop", "123\nabcdefghijklmnop\n" },
+ /* Insert line */
+ { "123\n456\n789\n", "0,0,l", "abcd", "abcd\n123\n456\n789\n" },
+ { "123\n456\n789\n", "-3,0,l", "abcd", "abcd\n123\n456\n789\n" },
+ { "123\n456\n789\n", "1,0,l", "abcd", "123\nabcd\n456\n789\n" },
+ { "123\n456\n789\n", "-2,0,l", "abcd", "123\nabcd\n456\n789\n" },
+ { "123\n456\n789\n", "2,0,l", "abcd", "123\n456\nabcd\n789\n" },
+ { "123\n456\n789\n", "-1,0,l", "abcd", "123\n456\nabcd\n789\n" },
+ { "123\n456\n789\n", "3,0,l", "abcd", "123\n456\n789\nabcd\n" },
+ { "123\n456\n789\n", ",,la", "abcd", "123\n456\n789\nabcd\n" },
+ /* Single line, replace with blank line */
+ { "123\n456\n789\n", "0,1,l", "", "\n456\n789\n" },
+ { "123\n456\n789\n", "-3,1,l", "", "\n456\n789\n" },
+ { "123\n456\n789\n", "0,-2,l", "", "\n456\n789\n" },
+ { "123\n456\n789\n", "-3,-2,l", "", "\n456\n789\n" },
+ { "123\n456\n789\n", "1,1,l", "", "123\n\n789\n" },
+ { "123\n456\n789\n", "1,-1,l", "", "123\n\n789\n" },
+ { "123\n456\n789\n", "-2,1,l", "", "123\n\n789\n" },
+ { "123\n456\n789\n", "-2,-1,l", "", "123\n\n789\n" },
+ /* Single line, delete */
+ { "123\n456\n789\n", "0,1,ld", "", "456\n789\n" },
+ { "123\n456\n789\n", "-3,1,ld", "", "456\n789\n" },
+ { "123\n456\n789\n", "0,-2,ld", "", "456\n789\n" },
+ { "123\n456\n789\n", "-3,-2,ld", "", "456\n789\n" },
+ { "123\n456\n789\n", "1,1,ld", "", "123\n789\n" },
+ { "123\n456\n789\n", "1,-1,ld", "", "123\n789\n" },
+ { "123\n456\n789\n", "-2,1,ld", "", "123\n789\n" },
+ { "123\n456\n789\n", "-2,-1,ld", "", "123\n789\n" },
};
static char *file2display(struct ast_str **buf, ssize_t len, const char *input)
More information about the svn-commits
mailing list