Advertisement
Guest User

Untitled

a guest
May 27th, 2017
527
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.40 KB | None | 0 0
  1. #! /bin/sh /usr/share/dpatch/dpatch-run
  2. ## 06_mysql_charset.dpatch.dpatch by <gaochao@zf218nb.sczfcpa.com>
  3. ##
  4. ## All lines beginning with `## DP:' are a description of the patch.
  5. ## DP: No description.
  6.  
  7. @DPATCH@
  8.  
  9. diff --git a/dbf2mysql.c b/dbf2mysql.c
  10. index f20e3b9..f8b6571 100644
  11. --- a/dbf2mysql.c
  12. +++ b/dbf2mysql.c
  13. @@ -33,6 +33,7 @@ char *dbase = "test";
  14. char *table = "test";
  15. char *pass = NULL;
  16. char *user = NULL;
  17. +char *charset = "latin1";
  18.  
  19. char *subarg = NULL;
  20. char *flist = NULL;
  21. @@ -85,7 +86,7 @@ void usage(void){
  22. printf("usage: dbf2mysql [-h hostname] [-d dbase] [-t table] [-p primary key]\n");
  23. printf(" [-o field[,field]] [-s oldname=newname[,oldname=newname]]\n");
  24. printf(" [-i field[,field]] [-c] [-f] [-F] [-n] [-r] [-u|-l] [-L]\n");
  25. - printf(" [-v[v]] [-x] [-q] [-P password] [-U user] dbf-file\n");
  26. + printf(" [-v[v]] [-x] [-q] [-P password] [-U user] [-C charset] dbf-file\n");
  27. }
  28.  
  29. /* patch by Mindaugas Riauba <minde@pub.osf.lt> */
  30. @@ -604,7 +605,7 @@ int main(int argc, char **argv)
  31.  
  32. primary[0] = '\0';
  33.  
  34. - while ((i = getopt(argc, argv, "xqLfFrne:lucvi:h:p:d:t:s:o:U:P:")) != EOF) {
  35. + while ((i = getopt(argc, argv, "xqLfFrne:lucvi:h:p:d:t:s:o:U:P:C:")) != EOF) {
  36. switch (i) {
  37. case 'P':
  38. pass = (char *)strdup(optarg);
  39. @@ -612,6 +613,9 @@ int main(int argc, char **argv)
  40. case 'U':
  41. user = (char *)strdup(optarg);
  42. break;
  43. + case 'C':
  44. + charset = (char *)strdup(optarg);
  45. + break;
  46. case 'x':
  47. express=1;
  48. break;
  49. @@ -750,6 +754,17 @@ int main(int argc, char **argv)
  50. exit(1);
  51. }
  52.  
  53. + if ((query = (char *)malloc(11 + strlen(charset)))) {
  54. + if (verbose > 2) {
  55. + printf("Setting charset to '%s'\n", charset);
  56. + }
  57. +
  58. + sprintf(query, "SET NAMES %s", charset);
  59. + mysql_query(&mysql, query);
  60. + free(query);
  61. + }
  62. +
  63. +
  64. /* Substitute field names */
  65. do_onlyfields(flist, dbh);
  66. do_substitute(subarg, dbh);
  67. diff --git a/mysql2dbf.c b/mysql2dbf.c
  68. index 58304ba..77c2849 100644
  69. --- a/mysql2dbf.c
  70. +++ b/mysql2dbf.c
  71. @@ -13,13 +13,14 @@
  72. #include <mysql.h>
  73. #include "dbf.h"
  74.  
  75. -int verbose = 0, upper = 0, lower = 0, create = 0;
  76. +int verbose = 0, upper = 0, lower = 0, create = 0, enable_local = 0;
  77. long precision = 6;
  78. char *host = NULL;
  79. char *dbase = NULL;
  80. char *table = NULL;
  81. char *pass = NULL;
  82. char *user = NULL;
  83. +char *charset = "latin1";
  84.  
  85. inline void strtoupper(char *string);
  86. inline void strtolower(char *string);
  87. @@ -41,16 +42,17 @@ inline void strtolower(char *string) {
  88.  
  89. void usage(void) {
  90. printf("mysql2dbf %s\n", VERSION);
  91. - printf("usage:\tmysql2dbf [-h host] [-u | -l] [-v[v]]\n");
  92. + printf("usage:\tmysql2dbf [-h host] [-u | -l] [-v[v]] [-C charset] [-L]\n");
  93. printf("\t\t\t[-q query] [-P password] [-U user] -d dbase -t table dbf-file\n");
  94. }
  95.  
  96. int main(int argc, char **argv) {
  97. int i;
  98. - MYSQL *SQLsock,mysql;
  99. + MYSQL mysql;
  100. extern int optind;
  101. extern char *optarg;
  102. char *query = NULL;
  103. + char *char_query = NULL;
  104.  
  105. dbhead *dbh;
  106. field *rec;
  107. @@ -59,7 +61,7 @@ int main(int argc, char **argv) {
  108. MYSQL_FIELD *qfield;
  109. u_long numfields, numrows, t;
  110.  
  111. - while ((i = getopt(argc, argv, "lucvq:h:d:t:p:U:P:")) != EOF) {
  112. + while ((i = getopt(argc, argv, "lucvq:h:d:t:p:U:P:C:L:")) != EOF) {
  113. switch(i) {
  114. case 'q':
  115. query = strdup(optarg);
  116. @@ -86,6 +88,9 @@ int main(int argc, char **argv) {
  117. }
  118. upper = 1;
  119. break;
  120. + case 'L':
  121. + enable_local = 1;
  122. + break;
  123. case 'h':
  124. host = (char *)strdup(optarg);
  125. break;
  126. @@ -101,6 +106,9 @@ int main(int argc, char **argv) {
  127. case 'U':
  128. user = (char *)strdup(optarg);
  129. break;
  130. + case 'C':
  131. + charset = (char *)strdup(optarg);
  132. + break;
  133. case ':':
  134. usage();
  135. printf("Missing argument!\n");
  136. @@ -148,46 +156,56 @@ int main(int argc, char **argv) {
  137. printf("Making connection with mySQL-server\n");
  138. }
  139.  
  140. - if (!(SQLsock = mysql_connect(&mysql,host,user,pass))) {
  141. - fprintf(stderr, "Couldn't get a connection with the ");
  142. - fprintf(stderr, "designated host!\n");
  143. - fprintf(stderr, "Detailed report: %s\n", mysql_error(&mysql));
  144. - close(dbh->db_fd);
  145. - free(dbh);
  146. - exit(1);
  147. - }
  148. + mysql_init(&mysql);
  149. +
  150. + if (enable_local == 1) {
  151. + if (verbose) {
  152. + printf("Setting MySQL option MYSQL_OPT_LOCAL_INFILE\n");
  153. + }
  154. +
  155. + if (mysql_options(&mysql, MYSQL_OPT_LOCAL_INFILE, 0)) {
  156. + printf("Setting option not succeeded.");
  157. + exit(1);
  158. + }
  159. + }
  160.  
  161. - if (verbose > 1) {
  162. - printf("Selecting database\n");
  163. - }
  164. + if (!mysql_real_connect(&mysql,host,user,pass, dbase, 0, NULL,0)) {
  165. + fprintf(stderr, "Couldn't get a connection with the ");
  166. + fprintf(stderr, "designated host!\n");
  167. + fprintf(stderr, "Detailed report: %s\n", mysql_error(&mysql));
  168. + dbf_close(&dbh);
  169. + exit(1);
  170. + }
  171. +
  172. + if ((char_query = (char *)malloc(11 + strlen(charset)))) {
  173. + if (verbose > 2) {
  174. + printf("Setting charset to '%s'\n", charset);
  175. + }
  176. +
  177. + sprintf(char_query, "SET NAMES %s", charset);
  178. + mysql_query(&mysql, char_query);
  179. + free(char_query);
  180. + }
  181.  
  182. - if ((mysql_select_db(SQLsock, dbase)) == -1) {
  183. - fprintf(stderr, "Couldn't select database %s.\n", dbase);
  184. - fprintf(stderr, "Detailed report: %s\n", mysql_error(SQLsock));
  185. - close(dbh->db_fd);
  186. - free(dbh);
  187. - mysql_close(SQLsock);
  188. - exit(1);
  189. - }
  190.  
  191. if (verbose > 1) {
  192. printf("Sending query\n");
  193. }
  194.  
  195.  
  196. - if (mysql_query(SQLsock, query) == -1) {
  197. + if (mysql_query(&mysql, query) == -1) {
  198. fprintf(stderr, "Error sending query.\nDetailed report: %s\n",
  199. - mysql_error(SQLsock));
  200. + mysql_error(&mysql));
  201. if (verbose > 1) {
  202. fprintf(stderr, "%s\n", query);
  203. }
  204. - mysql_close(SQLsock);
  205. + mysql_close(&mysql);
  206. close(dbh->db_fd);
  207. free(dbh);
  208. exit(1);
  209. }
  210.  
  211. - qres = mysql_store_result(SQLsock);
  212. + qres = mysql_store_result(&mysql);
  213. numfields = mysql_num_fields(qres);
  214. numrows = mysql_num_rows(qres);
  215.  
  216. @@ -303,7 +321,7 @@ int main(int argc, char **argv) {
  217. }
  218.  
  219. mysql_free_result(qres);
  220. - mysql_close(SQLsock);
  221. + mysql_close(&mysql);
  222. close(dbh->db_fd);
  223. free(dbh);
  224. exit(0);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement