@@ -52,14 +52,15 @@
52 52 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"resultCode" /*resultCode*/,
53 53 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"resultText" /*resultText*/,
54 54 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"timestamp" /*timestamp*/
55 55 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
56 56 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
57 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
58 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
59 57 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
60 58 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Returns true (non-0) if fossil appears to be running in JSON mode.
59 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** and either has JSON POSTed input awaiting consumption or fossil is
60 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** running in HTTP mode (in which case certain JSON data *might* be
61 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** available via GET parameters).
61 62 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
62 63 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int fossil_has_json(){
63 64 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return g.json.isJsonMode && (g.isHTTP || g.json.post.o);
64 65 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
65 66 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -576,10 +577,25 @@
576 577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return "text/plain";
577 578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
578 579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
579 580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
580 581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Given a request CONTENT_TYPE value, this function returns true
585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** if it is of a type which the JSON API can ostensibly read.
586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** It accepts any of application/json, text/plain, or
588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** application/javascript. The former is preferred, but was not
589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** widespread when this API was initially built, so the latter forms
590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** are permitted as fallbacks.
591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int json_can_consume_content_type(const char * zType){
593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return fossil_strcmp(zType, "application/json")==0
594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || fossil_strcmp(zType,"text/plain")==0/*assume this MIGHT be JSON*/
595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || fossil_strcmp(zType,"application/javascript")==0;
596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
581 597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
582 598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
583 599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Sends pResponse to the output stream as the response object. This
584 600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** function does no validation of pResponse except to assert() that it
585 601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is not NULL. The caller is responsible for ensuring that it meets
@@ -925,11 +941,12 @@
925 941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( once ){
926 942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
927 943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
928 944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
once = 1;
929 945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- g.json.isJsonMode = 1;
946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert(g.json.isJsonMode
947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && "g.json.isJsonMode should have been set up by now.");
931 948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.json.resultCode = 0;
932 949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.json.cmd.offset = -1;
933 950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.json.jsonp = PD("jsonp",NULL)
934 951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* FIXME: do some sanity checking on g.json.jsonp and ignore it
935 952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if it is not halfway reasonable.
@@ -1005,18 +1022,16 @@
1005 1022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
inFile = (0==strcmp("-",jfile))
1006 1023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
? stdin
1007 1024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
: fossil_fopen(jfile,"rb");
1008 1025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(!inFile){
1009 1026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.json.resultCode = FSL_JSON_E_FILE_OPEN_FAILED;
1010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fossil_panic("Could not open JSON file [%s].",jfile)
1027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_fatal("Could not open JSON file [%s].",jfile)
1011 1028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Does not return. */
1012 1029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
;
1013 1030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1014 1031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cgi_parse_POST_JSON(inFile, 0);
1015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( stdin != inFile ){
1016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fclose(inFile);
1017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
1032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_fclose(inFile);
1018 1033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
1019 1034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1020 1035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1021 1036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* g.json.reqPayload exists only to simplify some of our access to
1022 1037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
the request payload. We currently only use this in the context of
@@ -1110,13 +1125,13 @@
1110 1125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cson_value_get_string( \
1111 1126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cson_array_get(ar,i) \
1112 1127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
))
1113 1128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char const * tok = NEXT;
1114 1129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( tok ){
1115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( !g.isHTTP/*workaround for "abbreviated name" in CLI mode*/
1116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ? (0==strcmp(g.argv[1],tok))
1117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- : (0==strncmp("json",tok,4))
1130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( g.isHTTP/*workaround for "abbreviated name" in CLI mode*/
1131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ? (0==strncmp("json",tok,4))
1132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ : (0==strcmp(g.argv[1],tok))
1118 1133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
1119 1134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.json.cmd.offset = i;
1120 1135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
1121 1136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1122 1137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
++i;
@@ -1383,17 +1398,17 @@
1383 1398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
resultCode = json_dumbdown_rc(resultCode ? resultCode : g.json.resultCode);
1384 1399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
o = cson_new_object();
1385 1400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
v = cson_object_value(o);
1386 1401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( ! o ) return NULL;
1387 1402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SET(K) if(!tmp) goto cleanup; \
1388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = cson_object_set( o, K, tmp ); \
1389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if(rc) do{\
1390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- cson_value_free(tmp); \
1391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- tmp = NULL; \
1392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- goto cleanup; \
1403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cson_value_add_reference(tmp); \
1404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = cson_object_set( o, K, tmp ); \
1405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cson_value_free(tmp); \
1406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(rc) do{ \
1407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tmp = NULL; \
1408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ goto cleanup; \
1393 1409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}while(0)
1394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
1395 1410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1396 1411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
tmp = json_new_string(MANIFEST_UUID);
1397 1412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SET("fossil");
1398 1413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1399 1414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
tmp = json_new_timestamp(-1);
@@ -1418,10 +1433,13 @@
1418 1433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(g.json.cmd.commandStr){
1419 1434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
tmp = json_new_string(g.json.cmd.commandStr);
1420 1435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
1421 1436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
tmp = json_response_command_path();
1422 1437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(!tmp){
1439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tmp = json_new_string("???");
1440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1423 1441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SET("command");
1424 1442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1425 1443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
tmp = json_getenv(FossilJsonKeys.requestId);
1426 1444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( tmp ) cson_object_set( o, FossilJsonKeys.requestId, tmp );
1427 1445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -1434,12 +1452,13 @@
1434 1452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
tmp = g.json.param.v;
1435 1453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SET("$params");
1436 1454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1437 1455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(0){/*Only for debugging, add some info to the response.*/
1438 1456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
tmp = cson_value_new_integer( g.json.cmd.offset );
1439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- cson_object_set( o, "cmd.offset", tmp );
1440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- cson_object_set( o, "isCGI", cson_value_new_bool( g.isHTTP ) );
1457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SET("cmd.offset");
1458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tmp = cson_value_new_bool( g.isHTTP );
1459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SET("isCGI");
1441 1460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1442 1461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1443 1462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1444 1463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(fossil_timer_is_active(g.json.timerId)){
1445 1464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* This is, philosophically speaking, not quite the right place
@@ -1454,11 +1473,10 @@
1454 1473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cson_object_set(o,"procTimeUs", cson_value_new_integer((cson_int_t)span));
1455 1474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
span /= 1000/*for milliseconds */;
1456 1475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cson_object_set(o,"procTimeMs", cson_value_new_integer((cson_int_t)span));
1457 1476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert(!fossil_timer_is_active(g.json.timerId));
1458 1477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.json.timerId = -1;
1459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
1460 1478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1461 1479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(g.json.warnings){
1462 1480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
tmp = cson_array_value(g.json.warnings);
1463 1481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SET("warnings");
1464 1482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -1472,12 +1490,13 @@
1472 1490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
tmp = payload;
1473 1491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SET(FossilJsonKeys.payload);
1474 1492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1475 1493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1476 1494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if(json_find_option_bool("debugFossilG","json-debug-g",NULL,0)
1478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- &&(g.perm.Admin||g.perm.Setup)){
1495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if((g.perm.Admin||g.perm.Setup)
1496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && json_find_option_bool("debugFossilG","json-debug-g",NULL,0)
1497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
1479 1498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
tmp = json_g_to_json();
1480 1499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SET("g");
1481 1500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1482 1501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1483 1502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#undef SET
@@ -1514,10 +1533,11 @@
1514 1533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void json_err( int code, char const * msg, int alsoOutput ){
1515 1534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = code ? code : (g.json.resultCode
1516 1535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
? g.json.resultCode
1517 1536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
: FSL_JSON_E_UNKNOWN);
1518 1537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cson_value * resp = NULL;
1538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(g.json.isJsonMode==0) return;
1519 1539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = json_dumbdown_rc(rc);
1520 1540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc && !msg ){
1521 1541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
msg = g.zErrMsg;
1522 1542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(!msg){
1523 1543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
msg = json_err_cstr(rc);
@@ -1524,11 +1544,12 @@
1524 1544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1525 1545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1526 1546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
resp = json_create_response(rc, msg, NULL);
1527 1547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(!resp){
1528 1548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* about the only error case here is out-of-memory. DO NOT
1529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- call fossil_panic() here because that calls this function.
1549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ call fossil_panic() or fossil_fatal() here because those
1550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ allocate.
1530 1551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1531 1552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fprintf(stderr, "%s: Fatal error: could not allocate "
1532 1553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"response object.\n", g.argv[0]);
1533 1554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_exit(1);
1534 1555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1535 1556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!