diff options
author | andmarti1424 <scim.spreadsheet@gmail.com> | 2016-04-10 20:54:58 -0300 |
---|---|---|
committer | andmarti1424 <scim.spreadsheet@gmail.com> | 2016-04-10 20:54:58 -0300 |
commit | 503c8774221a31c147d29d12f870e8a394dc0a5f (patch) | |
tree | 0edc94753eb44d901a5ffd475d2266804e4a8bd8 | |
parent | 132e8ef4b365096b9609a333389a864a929ee8f9 (diff) |
More fixes
-rwxr-xr-x | src.scim2/cmds.c | 7 | ||||
-rwxr-xr-x | src.scim2/file.c | 8 | ||||
-rwxr-xr-x | src.scim2/xls.c | 20 | ||||
-rwxr-xr-x | src.scim2/xlsx.c | 18 |
4 files changed, 29 insertions, 24 deletions
diff --git a/src.scim2/cmds.c b/src.scim2/cmds.c index 6d1b95f..953e367 100755 --- a/src.scim2/cmds.c +++ b/src.scim2/cmds.c @@ -1315,21 +1315,22 @@ void auto_justify(int ci, int cf, int min) { int r, c, sum = 0; char field[1024] = ""; struct ent * p; - wchar_t widestring[256] = { L'\0' }; + wchar_t widestring[BUFFERSIZE] = { L'\0' }; mbstate_t state; size_t result; const char * mbsptr; + checkbounds(&maxrow, &cf); for (c = ci; c <= cf; c++) { fwidth[c] = min; for (r = 0; r <= maxrow; r++) { - if ((p = *ATBL(tbl, r, c))) { + if ((p = *ATBL(tbl, r, c)) != NULL) { sum = 0; if (p->pad) sum += p->pad; if (p->label) { memset( &state, '\0', sizeof state ); mbsptr = p->label; - result = mbsrtowcs(widestring, & mbsptr, 256, & state); + result = mbsrtowcs(widestring, &mbsptr, BUFFERSIZE, &state); if ( result != (size_t)-1 ) sum += wcslen(widestring); } diff --git a/src.scim2/file.c b/src.scim2/file.c index e7962ec..bd41b8e 100755 --- a/src.scim2/file.c +++ b/src.scim2/file.c @@ -445,8 +445,10 @@ int readfile(char * fname, int eraseflg) { // If file is an xlsx file, we import it } else if (len > 5 && ! strcasecmp( & fname[len-5], ".xlsx")){ #ifndef XLSX - if (! atoi(get_conf_value("nocurses"))) + if (! atoi(get_conf_value("nocurses"))) { + if (loading) loading = 0; scerror("XLSX import support not compiled in"); + } #else open_xlsx(fname, "UTF-8"); #endif @@ -457,6 +459,7 @@ int readfile(char * fname, int eraseflg) { // If file is an xls file, we import it } else if (len > 4 && ! strcasecmp( & fname[len-4], ".xls")){ #ifndef XLS + if (loading) loading = 0; scerror("XLS import support not compiled in"); #else open_xls(fname, "UTF-8"); @@ -489,6 +492,7 @@ int readfile(char * fname, int eraseflg) { return 1; } else if (! atoi(get_conf_value("nocurses"))) { + if (loading) loading = 0; scinfo("\"%s\" is not a SC-IM compatible file", fname); return -1; } @@ -844,7 +848,7 @@ int import_csv(char * fname, char d) { //swprintf(line_interp, BUFFERSIZE, L"let %s%d=%s", coltoa(maxcol), maxrow, "0"); //send_to_interp(line_interp); - auto_justify(0, maxcol, DEFWIDTH); + auto_justify(0, maxcols, DEFWIDTH); //closefile(f, pid, rfd); fclose(f); diff --git a/src.scim2/xls.c b/src.scim2/xls.c index 2bd962d..821deff 100755 --- a/src.scim2/xls.c +++ b/src.scim2/xls.c @@ -44,7 +44,7 @@ int open_xls(char * fname, char * encoding) { WORD r, c; pWB = xls_open(fname, encoding); - char line_interp[FBUFLEN] = ""; + wchar_t line_interp[FBUFLEN] = L""; struct ent * n; if (pWB == NULL) { @@ -78,7 +78,7 @@ int open_xls(char * fname, char * encoding) { && cell->id != 0x0BD && cell->id != 0x203 ) { - sprintf(line_interp, "let %s%d=%.15g", coltoa(c), r, (cell->d - 25569) * 86400); + swprintf(line_interp, FBUFLEN, L"let %s%d=%.15g", coltoa(c), r, (cell->d - 25569) * 86400); send_to_interp(line_interp); n = lookat(r, c); n->format = 0; @@ -90,18 +90,18 @@ int open_xls(char * fname, char * encoding) { // display the value of the cell (either numeric or string) } else if (cell->id == 0x27e || cell->id == 0x0BD || cell->id == 0x203) { - sprintf(line_interp, "let %s%d=%.15g", coltoa(c), r, cell->d); + swprintf(line_interp, FBUFLEN, L"let %s%d=%.15g", coltoa(c), r, cell->d); } else if (cell->id == 0x06) { // formula if (cell->l == 0) { // its a number - sprintf(line_interp, "let %s%d=%.15g", coltoa(c), r, cell->d); + swprintf(line_interp, FBUFLEN, L"let %s%d=%.15g", coltoa(c), r, cell->d); } else { if (!strcmp((char *) cell->str, "bool")) { // its boolean, and test cell->d - sprintf(line_interp, "label %s%d=\"%s\"", coltoa(c), r, (int) cell->d ? "true" : "false"); + swprintf(line_interp, FBUFLEN, L"label %s%d=\"%s\"", coltoa(c), r, (int) cell->d ? "true" : "false"); } else if (! strcmp((char *) cell->str, "error")) { // formula is in error - sprintf(line_interp, "label %s%d=\"%s\"", coltoa(c), r, "error"); //FIXME + swprintf(line_interp, FBUFLEN, L"label %s%d=\"%s\"", coltoa(c), r, "error"); //FIXME } else { - sprintf(line_interp, "label %s%d=\"%s\"", coltoa(c), r, (char *) cell->str); + swprintf(line_interp, FBUFLEN, L"label %s%d=\"%s\"", coltoa(c), r, (char *) cell->str); } } @@ -109,16 +109,16 @@ int open_xls(char * fname, char * encoding) { int pad_pos; if ((pad_pos = str_in_str((char *) cell->str, "\n")) != -1) ((char *) cell->str)[pad_pos] = '\0'; // For spanning // clean_carrier((char *) cell->str); // For spanning - sprintf(line_interp, "label %s%d=\"%s\"", coltoa(c), r, (char *) cell->str); + swprintf(line_interp, FBUFLEN, L"label %s%d=\"%s\"", coltoa(c), r, (char *) cell->str); } else { - sprintf(line_interp, "label %s%d=\"%s\"", coltoa(c), r, ""); + swprintf(line_interp, FBUFLEN, L"label %s%d=\"%s\"", coltoa(c), r, ""); } send_to_interp(line_interp); } } xls_close_WS(pWS); xls_close(pWB); - auto_justify(0, maxcol, DEFWIDTH); + auto_justify(0, maxcols, DEFWIDTH); return 0; #else return -1; diff --git a/src.scim2/xlsx.c b/src.scim2/xlsx.c index 52eb870..a810ad7 100755 --- a/src.scim2/xlsx.c +++ b/src.scim2/xlsx.c @@ -104,7 +104,7 @@ char * get_xlsx_number_format_by_id(xmlDocPtr doc_styles, int id) { void get_sheet_data(xmlDocPtr doc, xmlDocPtr doc_strings, xmlDocPtr doc_styles) { xmlNode * cur_node = xmlDocGetRootElement(doc)->xmlChildrenNode; xmlNode * child_node = NULL; - char line_interp[FBUFLEN] = ""; + wchar_t line_interp[FBUFLEN] = L""; int r, c; // we go forward up to sheet data @@ -139,7 +139,7 @@ void get_sheet_data(xmlDocPtr doc, xmlDocPtr doc_strings, xmlDocPtr doc_styles) if (strvalue != NULL && strvalue[0] != '\0') { st = str_replace (strvalue, "\"", "''"); clean_carrier(st); // we handle padding - sprintf(line_interp, "label %s%d=\"%s\"", coltoa(c), r, st); + swprintf(line_interp, FBUFLEN, L"label %s%d=\"%s\"", coltoa(c), r, st); send_to_interp(line_interp); free(st); } @@ -151,7 +151,7 @@ void get_sheet_data(xmlDocPtr doc, xmlDocPtr doc_strings, xmlDocPtr doc_styles) if (strvalue != NULL && strvalue[0] != '\0') { st = str_replace (strvalue, "\"", "''"); clean_carrier(st); // we handle padding - sprintf(line_interp, "label %s%d=\"%s\"", coltoa(c), r, st); + swprintf(line_interp, FBUFLEN, L"label %s%d=\"%s\"", coltoa(c), r, st); send_to_interp(line_interp); free(st); } @@ -172,7 +172,7 @@ void get_sheet_data(xmlDocPtr doc, xmlDocPtr doc_strings, xmlDocPtr doc_styles) )) { long l = strtol((char *) child_node->xmlChildrenNode->xmlChildrenNode->content, (char **) NULL, 10); - sprintf(line_interp, "let %s%d=%.15ld", coltoa(c), r, (l - 25569) * 86400 - atoi(get_conf_value("tm_gmtoff"))); + swprintf(line_interp, FBUFLEN, L"let %s%d=%.15ld", coltoa(c), r, (l - 25569) * 86400 - atoi(get_conf_value("tm_gmtoff"))); send_to_interp(line_interp); struct ent * n = lookat(r, c); n->format = 0; @@ -188,7 +188,7 @@ void get_sheet_data(xmlDocPtr doc, xmlDocPtr doc_strings, xmlDocPtr doc_styles) (atoi(fmtId) >= 18 && atoi(fmtId) <= 21) )) { double l = atof((char *) child_node->xmlChildrenNode->xmlChildrenNode->content); - sprintf(line_interp, "let %s%d=%.15f", coltoa(c), r, (l - atoi(get_conf_value("tm_gmtoff")) * 1.0 / 60 / 60 / 24) * 86400); + swprintf(line_interp, FBUFLEN, L"let %s%d=%.15f", coltoa(c), r, (l - atoi(get_conf_value("tm_gmtoff")) * 1.0 / 60 / 60 / 24) * 86400); send_to_interp(line_interp); struct ent * n = lookat(r, c); n->format = 0; @@ -202,7 +202,7 @@ void get_sheet_data(xmlDocPtr doc, xmlDocPtr doc_strings, xmlDocPtr doc_styles) child_node->xmlChildrenNode != NULL && ! strcmp((char *) child_node->xmlChildrenNode->name, "v") ){ double l = atof((char *) child_node->xmlChildrenNode->xmlChildrenNode->content); - sprintf(line_interp, "let %s%d=%.15f", coltoa(c), r, l); + swprintf(line_interp, FBUFLEN, L"let %s%d=%.15f", coltoa(c), r, l); send_to_interp(line_interp); // f - numeric value that is a result from formula @@ -242,11 +242,11 @@ void get_sheet_data(xmlDocPtr doc, xmlDocPtr doc_strings, xmlDocPtr doc_styles) free(strf); // we send the formula to the interpreter and hope to resolve it! - sprintf(line_interp, "let %s%d=%s", coltoa(c), r, formula); + swprintf(line_interp, FBUFLEN, L"let %s%d=%s", coltoa(c), r, formula); } else { double l = atof((char *) child_node->last->xmlChildrenNode->content); - sprintf(line_interp, "let %s%d=%.15f", coltoa(c), r, l); + swprintf(line_interp, FBUFLEN, L"let %s%d=%.15f", coltoa(c), r, l); } send_to_interp(line_interp); } @@ -384,7 +384,7 @@ int open_xlsx(char * fname, char * encoding) { return -1; } - auto_justify(0, maxcol, DEFWIDTH); + auto_justify(0, maxcols, DEFWIDTH); deleterow(); return 0; } |