summaryrefslogtreecommitdiff
path: root/storage/connect/plgdbutl.cpp
diff options
context:
space:
mode:
authorOlivier Bertrand <bertrandop@gmail.com>2014-11-15 18:28:24 +0100
committerOlivier Bertrand <bertrandop@gmail.com>2014-11-15 18:28:24 +0100
commit5d8311960a8f993591075b3da6106559922183b4 (patch)
tree1efe45e1188606c895a4069c05a2501826e1f293 /storage/connect/plgdbutl.cpp
parent9ade2d088d12f6a2a6f901148ed72a45dd15e9ff (diff)
downloadmariadb-git-5d8311960a8f993591075b3da6106559922183b4.tar.gz
- Implement the NEWMSG and XMSG methods
They are still experimental and should not be used in production. added: storage/connect/encas.h storage/connect/english.msg storage/connect/enids.h storage/connect/frcas.h storage/connect/french.msg storage/connect/frids.h storage/connect/frmsg.h modified: storage/connect/connect.cc storage/connect/engmsg.h storage/connect/filamdbf.cpp storage/connect/global.h storage/connect/ha_connect.cc storage/connect/msgid.h storage/connect/plgdbutl.cpp storage/connect/plugutil.c storage/connect/rcmsg.c storage/connect/resource.h storage/connect/tabfmt.h - Fix global variable not being properly initialized (MDEV-6690, MDEV-7094) modified: storage/connect/ha_connect.cc storage/connect/plugutil.c storage/connect/user_connect.cc storage/connect/xindex.cpp - Implement Rewind for ODBC tables (MDEV-7097) modified: storage/connect/odbconn.cpp storage/connect/odbconn.h storage/connect/tabmysql.cpp storage/connect/tabodbc.cpp - Reset N when reopening MYSQL tables modified: storage/connect/tabmysql.cpp
Diffstat (limited to 'storage/connect/plgdbutl.cpp')
-rw-r--r--storage/connect/plgdbutl.cpp31
1 files changed, 17 insertions, 14 deletions
diff --git a/storage/connect/plgdbutl.cpp b/storage/connect/plgdbutl.cpp
index ccfc1a348b7..88026c564bf 100644
--- a/storage/connect/plgdbutl.cpp
+++ b/storage/connect/plgdbutl.cpp
@@ -113,11 +113,17 @@ void CloseXMLFile(PGLOBAL, PFBLOCK, bool);
/***********************************************************************/
/* Routines for file IO with error reporting to g->Message */
+/* Note: errno and strerror must be called before the message file */
+/* is read in the case of XMSG compile. */
/***********************************************************************/
-static void
-global_open_error_msg(GLOBAL *g, int msgid, const char *path, const char *mode)
+static void global_open_error_msg(GLOBAL *g, int msgid, const char *path,
+ const char *mode)
{
- int len;
+ int len, rno= (int)errno;
+ char errmsg[256]= "";
+
+ strncat(errmsg, strerror(errno), 256);
+
switch (msgid)
{
case MSGID_CANNOT_OPEN:
@@ -129,7 +135,7 @@ global_open_error_msg(GLOBAL *g, int msgid, const char *path, const char *mode)
case MSGID_OPEN_MODE_ERROR:
len= snprintf(g->Message, sizeof(g->Message) - 1,
MSG(OPEN_MODE_ERROR), // "Open(%s) error %d on %s"
- mode, (int) errno, path);
+ mode, rno, path);
break;
case MSGID_OPEN_MODE_STRERROR:
@@ -137,13 +143,13 @@ global_open_error_msg(GLOBAL *g, int msgid, const char *path, const char *mode)
strcat(strcpy(fmt, MSG(OPEN_MODE_ERROR)), ": %s");
len= snprintf(g->Message, sizeof(g->Message) - 1,
fmt, // Open(%s) error %d on %s: %s
- mode, (int) errno, path, strerror(errno));
+ mode, rno, path, errmsg);
}break;
case MSGID_OPEN_STRERROR:
len= snprintf(g->Message, sizeof(g->Message) - 1,
MSG(OPEN_STRERROR), // "open error: %s"
- strerror(errno));
+ errmsg);
break;
case MSGID_OPEN_ERROR_AND_STRERROR:
@@ -151,13 +157,13 @@ global_open_error_msg(GLOBAL *g, int msgid, const char *path, const char *mode)
//OPEN_ERROR does not work, as it wants mode %d (not %s)
//MSG(OPEN_ERROR) "%s",// "Open error %d in mode %d on %s: %s"
"Open error %d in mode %s on %s: %s",
- errno, mode, path, strerror(errno));
+ rno, mode, path, errmsg);
break;
case MSGID_OPEN_EMPTY_FILE:
len= snprintf(g->Message, sizeof(g->Message) - 1,
MSG(OPEN_EMPTY_FILE), // "Opening empty file %s: %s"
- path, strerror(errno));
+ path, errmsg);
break;
default:
@@ -285,12 +291,9 @@ PQRYRES PlgAllocResult(PGLOBAL g, int ncol, int maxres, int ids,
// Get header from message file
strncpy(cname, PlugReadMessage(g, ids + crp->Ncol, NULL), NAM_LEN);
cname[NAM_LEN] = 0; // for truncated long names
-//#elif defined(WIN32)
- // Get header from ressource file
-// LoadString(s_hModule, ids + crp->Ncol, cname, sizeof(cname));
-#else // !WIN32
+#else // !XMSG
GetRcString(ids + crp->Ncol, cname, sizeof(cname));
-#endif // !WIN32
+#endif // !XMSG
crp->Name = (PSZ)PlugSubAlloc(g, NULL, strlen(cname) + 1);
strcpy(crp->Name, cname);
} else
@@ -982,7 +985,7 @@ void PlugCleanup(PGLOBAL g, bool dofree)
/* This is the place to reset the pointer on domains. */
/*******************************************************************/
dbuserp->Subcor = false;
- dbuserp->Step = STEP(PARSING_QUERY);
+ dbuserp->Step = "New query"; // was STEP(PARSING_QUERY);
dbuserp->ProgMax = dbuserp->ProgCur = dbuserp->ProgSav = 0;
} // endif dofree