VALUE typecast_detect(const char *data, size_t size, int type) { VALUE value; char *bytea; size_t bytea_len; switch (type) { case SWIFT_TYPE_INT: return rb_cstr2inum(data, 10); case SWIFT_TYPE_FLOAT: return rb_float_new(atof(data)); case SWIFT_TYPE_NUMERIC: return rb_funcall(cBigDecimal, fnew, 1, rb_str_new(data, size)); case SWIFT_TYPE_BOOLEAN: return (data && (data[0] =='t' || data[0] == '1')) ? Qtrue : Qfalse; case SWIFT_TYPE_BLOB: bytea = PQunescapeBytea(data, &bytea_len); value = rb_str_new(bytea, bytea_len); PQfreemem(bytea); return rb_funcall(cStringIO, fnew, 1, value); case SWIFT_TYPE_TIMESTAMP: return datetime_parse(cSwiftDateTime, data, size); case SWIFT_TYPE_DATE: return date_parse(cSwiftDateTime, data, size); default: return rb_enc_str_new(data, size, rb_utf8_encoding()); } }
void EvalDparse(const void *data, qCtx *ctx, qStr *out, qArgAry *args) { CStr date = (*args)[0]; time_t t = date_parse(date); if (t == -1) t = 0; if (t) { out->PutN(t); } }
int cvs_annotate(int argc, char **argv) { int ch, flags; char *arg = "."; struct cvs_recursion cr; flags = CR_RECURSE_DIRS; while ((ch = getopt(argc, argv, cvs_cmdop == CVS_OP_ANNOTATE ? cvs_cmd_annotate.cmd_opts : cvs_cmd_rannotate.cmd_opts)) != -1) { switch (ch) { case 'D': dateflag = optarg; if ((cvs_specified_date = date_parse(dateflag)) == -1) fatal("invalid date: %s", dateflag); break; case 'f': force_head = 1; break; case 'l': flags &= ~CR_RECURSE_DIRS; break; case 'R': flags |= CR_RECURSE_DIRS; break; case 'r': cvs_specified_tag = optarg; break; default: fatal("%s", cvs_cmdop == CVS_OP_ANNOTATE ? cvs_cmd_annotate.cmd_synopsis : cvs_cmd_rannotate.cmd_synopsis); } } argc -= optind; argv += optind; if (cvs_cmdop == CVS_OP_RANNOTATE) { if (argc == 0) fatal("%s", cvs_cmd_rannotate.cmd_synopsis); flags |= CR_REPO; } cr.enterdir = NULL; cr.leavedir = NULL; if (current_cvsroot->cr_method != CVS_METHOD_LOCAL) { cvs_client_connect_to_server(); cr.fileproc = cvs_client_sendfile; if (dateflag != NULL) cvs_client_send_request("Argument -D%s", dateflag); if (force_head == 1) cvs_client_send_request("Argument -f"); if (!(flags & CR_RECURSE_DIRS)) cvs_client_send_request("Argument -l"); if (cvs_specified_tag != NULL) cvs_client_send_request("Argument -r%s", cvs_specified_tag); } else { if (cvs_cmdop == CVS_OP_RANNOTATE && chdir(current_cvsroot->cr_dir) == -1) fatal("cvs_annotate: %s", strerror(errno)); cr.fileproc = cvs_annotate_local; } cr.flags = flags; if (cvs_cmdop == CVS_OP_ANNOTATE || current_cvsroot->cr_method == CVS_METHOD_LOCAL) { if (argc > 0) cvs_file_run(argc, argv, &cr); else cvs_file_run(1, &arg, &cr); } if (current_cvsroot->cr_method != CVS_METHOD_LOCAL) { cvs_client_send_files(argv, argc); cvs_client_senddir("."); cvs_client_send_request((cvs_cmdop == CVS_OP_RANNOTATE) ? "rannotate" : "annotate"); cvs_client_get_responses(); } return (0); }
int cvs_diff(int argc, char **argv) { int ch, flags; char *arg = "."; const char *errstr; struct cvs_recursion cr; flags = CR_RECURSE_DIRS; strlcpy(diffargs, cvs_cmdop == CVS_OP_DIFF ? "diff" : "rdiff", sizeof(diffargs)); while ((ch = getopt(argc, argv, cvs_cmdop == CVS_OP_DIFF ? cvs_cmd_diff.cmd_opts : cvs_cmd_rdiff.cmd_opts)) != -1) { switch (ch) { case 'a': strlcat(diffargs, " -a", sizeof(diffargs)); dflags |= D_FORCEASCII; break; case 'b': strlcat(diffargs, " -b", sizeof(diffargs)); dflags |= D_FOLDBLANKS; break; case 'c': strlcat(diffargs, " -c", sizeof(diffargs)); diff_format = D_CONTEXT; break; case 'C': diff_context = strtonum(optarg, 0, INT_MAX, &errstr); if (errstr != NULL) fatal("context lines %s: %s", errstr, optarg); strlcat(diffargs, " -C ", sizeof(diffargs)); strlcat(diffargs, optarg, sizeof(diffargs)); diff_format = D_CONTEXT; break; case 'd': strlcat(diffargs, " -d", sizeof(diffargs)); dflags |= D_MINIMAL; break; case 'D': if (date1 == -1 && rev1 == NULL) { if ((date1 = date_parse(optarg)) == -1) fatal("invalid date: %s", optarg); dateflag1 = optarg; } else if (date2 == -1 && rev2 == NULL) { if ((date2 = date_parse(optarg)) == -1) fatal("invalid date: %s", optarg); dateflag2 = optarg; } else { fatal("no more than 2 revisions/dates can" " be specified"); } break; case 'f': force_head = 1; break; case 'i': strlcat(diffargs, " -i", sizeof(diffargs)); dflags |= D_IGNORECASE; break; case 'k': koptstr = optarg; kflag = rcs_kflag_get(koptstr); if (RCS_KWEXP_INVAL(kflag)) { cvs_log(LP_ERR, "invalid RCS keyword expansion mode"); fatal("%s", cvs_cmdop == CVS_OP_DIFF ? cvs_cmd_diff.cmd_synopsis : cvs_cmd_rdiff.cmd_synopsis); } break; case 'l': flags &= ~CR_RECURSE_DIRS; break; case 'n': strlcat(diffargs, " -n", sizeof(diffargs)); diff_format = D_RCSDIFF; break; case 'N': strlcat(diffargs, " -N", sizeof(diffargs)); Nflag = 1; break; case 'p': strlcat(diffargs, " -p", sizeof(diffargs)); dflags |= D_PROTOTYPE; break; case 'R': flags |= CR_RECURSE_DIRS; break; case 'r': if (date1 == -1 && rev1 == NULL) { rev1 = optarg; } else if (date2 == -1 && rev2 == NULL) { rev2 = optarg; } else { fatal("no more than 2 revisions/dates can" " be specified"); } break; case 't': strlcat(diffargs, " -t", sizeof(diffargs)); dflags |= D_EXPANDTABS; break; case 'u': strlcat(diffargs, " -u", sizeof(diffargs)); diff_format = D_UNIFIED; break; case 'U': diff_context = strtonum(optarg, 0, INT_MAX, &errstr); if (errstr != NULL) fatal("context lines %s: %s", errstr, optarg); strlcat(diffargs, " -U ", sizeof(diffargs)); strlcat(diffargs, optarg, sizeof(diffargs)); diff_format = D_UNIFIED; break; case 'V': fatal("the -V option is obsolete " "and should not be used"); case 'w': strlcat(diffargs, " -w", sizeof(diffargs)); dflags |= D_IGNOREBLANKS; break; default: fatal("%s", cvs_cmdop == CVS_OP_DIFF ? cvs_cmd_diff.cmd_synopsis : cvs_cmd_rdiff.cmd_synopsis); } } argc -= optind; argv += optind; cr.enterdir = NULL; cr.leavedir = NULL; if (cvs_cmdop == CVS_OP_RDIFF) { if (rev1 == NULL && rev2 == NULL && dateflag1 == NULL && dateflag2 == NULL) fatal("must specify at least one revision/date!"); if (!argc) fatal("%s", cvs_cmd_rdiff.cmd_synopsis); if (!diff_format) { strlcat(diffargs, " -c", sizeof(diffargs)); diff_format = D_CONTEXT; } flags |= CR_REPO; } if (current_cvsroot->cr_method != CVS_METHOD_LOCAL) { cvs_client_connect_to_server(); cr.fileproc = cvs_client_sendfile; if (!(flags & CR_RECURSE_DIRS)) cvs_client_send_request("Argument -l"); if (kflag) cvs_client_send_request("Argument -k%s", koptstr); switch (diff_format) { case D_CONTEXT: if (cvs_cmdop == CVS_OP_RDIFF) cvs_client_send_request("Argument -c"); else { cvs_client_send_request("Argument -C %d", diff_context); } break; case D_RCSDIFF: cvs_client_send_request("Argument -n"); break; case D_UNIFIED: if (cvs_cmdop == CVS_OP_RDIFF || diff_context == 3) cvs_client_send_request("Argument -u"); else { cvs_client_send_request("Argument -U %d", diff_context); } break; default: break; } if (Nflag == 1) cvs_client_send_request("Argument -N"); if (dflags & D_PROTOTYPE) cvs_client_send_request("Argument -p"); if (rev1 != NULL) cvs_client_send_request("Argument -r%s", rev1); if (rev2 != NULL) cvs_client_send_request("Argument -r%s", rev2); if (dateflag1 != NULL) cvs_client_send_request("Argument -D%s", dateflag1); if (dateflag2 != NULL) cvs_client_send_request("Argument -D%s", dateflag2); } else { if (cvs_cmdop == CVS_OP_RDIFF && chdir(current_cvsroot->cr_dir) == -1) fatal("cvs_diff: %s", strerror(errno)); cr.fileproc = cvs_diff_local; } cr.flags = flags; diff_rev1 = diff_rev2 = NULL; if (cvs_cmdop == CVS_OP_DIFF || current_cvsroot->cr_method == CVS_METHOD_LOCAL) { if (argc > 0) cvs_file_run(argc, argv, &cr); else cvs_file_run(1, &arg, &cr); } if (current_cvsroot->cr_method != CVS_METHOD_LOCAL) { cvs_client_send_files(argv, argc); cvs_client_senddir("."); cvs_client_send_request((cvs_cmdop == CVS_OP_RDIFF) ? "rdiff" : "diff"); cvs_client_get_responses(); } return (0); }