Ticket #51516: patch-pextlib-curl_version_cmd.diff

File patch-pextlib-curl_version_cmd.diff, 2.9 KB (added by RJVB (René Bertin), 4 weeks ago)

adds a [curl version] command to Pextlib

  • src/pextlib1.0/curl.c

    diff --git a/src/pextlib1.0/curl.c b/src/pextlib1.0/curl.c
    index 3292005e5..4b9902d08 100644
    a b int CurlFetchCmd(Tcl_Interp* interp, int objc, Tcl_Obj* const objv[]); 
    9191int CurlIsNewerCmd(Tcl_Interp* interp, int objc, Tcl_Obj* const objv[]);
    9292int CurlGetSizeCmd(Tcl_Interp* interp, int objc, Tcl_Obj* const objv[]);
    9393int CurlPostCmd(Tcl_Interp* interp, int objc, Tcl_Obj* const objv[]);
     94int CurlVersionCmd(Tcl_Interp* interp, int objc, Tcl_Obj* const objv[]);
    9495
    9596typedef struct {
    9697        Tcl_Interp *interp;
    CurlPostCmd(Tcl_Interp* interp, int objc, Tcl_Obj* const objv[]) 
    14351436        return theResult;
    14361437}
    14371438
     1439/**
     1440 * curl version subcommand entry point.
     1441 *
     1442 * @param interp                current interpreter
     1443 * @param objc                  number of parameters
     1444 * @param objv                  parameters
     1445 */
     1446int
     1447CurlVersionCmd(Tcl_Interp* interp, int objc, Tcl_Obj* const objv[])
     1448{
     1449        int theResult = TCL_OK;
     1450        Tcl_Obj *tcl_result = NULL;
     1451
     1452        do {
     1453                curl_version_info_data *theVersionInfo = curl_version_info(CURLVERSION_NOW);
     1454                tcl_result = Tcl_NewListObj(0, NULL);
     1455                // info from the curl version we were built against:
     1456                Tcl_ListObjAppendElement(interp, tcl_result, Tcl_NewIntObj(CURLVERSION_NOW));
     1457                Tcl_ListObjAppendElement(interp, tcl_result, Tcl_NewStringObj(LIBCURL_VERSION, -1));
     1458                // runtime info from the libcurl we are actually using:
     1459                Tcl_ListObjAppendElement(interp, tcl_result, Tcl_NewStringObj(theVersionInfo->version, -1));
     1460                Tcl_ListObjAppendElement(interp, tcl_result, Tcl_NewStringObj(theVersionInfo->host, -1));
     1461                Tcl_ListObjAppendElement(interp, tcl_result, Tcl_NewStringObj(theVersionInfo->ssl_version, -1));
     1462                Tcl_SetObjResult(interp, tcl_result);
     1463        } while (0);
     1464
     1465        return theResult;
     1466}
     1467
    14381468/**
    14391469 * curl command entry point.
    14401470 *
    CurlCmd( 
    14541484                kCurlFetch,
    14551485                kCurlIsNewer,
    14561486                kCurlGetSize,
    1457                 kCurlPost
     1487                kCurlPost,
     1488                kCurlVersion
    14581489        } EOption;
    14591490
    14601491        static const char *options[] = {
    1461                 "fetch", "isnewer", "getsize", "post", NULL
     1492                "fetch", "isnewer", "getsize", "post", "version", NULL
    14621493        };
    14631494        int theResult = TCL_OK;
    14641495        EOption theOptionIndex;
    CurlCmd( 
    14671498        /* TODO: use dispatch_once when we drop Leopard support */
    14681499        pthread_once(&once, CurlInit);
    14691500
    1470         if (objc < 3) {
    1471                 Tcl_WrongNumArgs(interp, 1, objv, "option ?arg ...?");
    1472                 return TCL_ERROR;
    1473         }
    1474 
    14751501        theResult = Tcl_GetIndexFromObj(
    14761502                                interp,
    14771503                                objv[1],
    CurlCmd( 
    14791505                                "option",
    14801506                                0,
    14811507                                (int*) &theOptionIndex);
     1508        if (objc < 3 && theOptionIndex != kCurlVersion) {
     1509                Tcl_WrongNumArgs(interp, 1, objv, "option ?arg ...?");
     1510                return TCL_ERROR;
     1511        }
     1512
    14821513        if (theResult == TCL_OK) {
    14831514                switch (theOptionIndex) {
    14841515                case kCurlFetch:
    CurlCmd( 
    14931524                case kCurlPost:
    14941525                        theResult = CurlPostCmd(interp, objc, objv);
    14951526                        break;
     1527                case kCurlVersion:
     1528                        theResult = CurlVersionCmd(interp, objc, objv);
     1529                        break;
    14961530                }
    14971531        }
    14981532