MCPcopy Create free account
hub / github.com/BernardoGiordano/Checkpoint / StdioBaseScanf

Function StdioBaseScanf

common/script/cstdlib/stdio.c:567–609  ·  view source on GitHub ↗

internal do-anything v[s][n]scanf() formatting system with input from strings or FILE * */

Source from the content-addressed store, hash-verified

565/* internal do-anything v[s][n]scanf() formatting system with input
566 from strings or FILE * */
567int StdioBaseScanf(
568 struct ParseState* Parser, FILE* Stream, char* StrIn, char* Format, struct StdVararg* Args)
569{
570 struct Value* ThisArg = Args->Param[0];
571 int ArgCount = 0;
572 void* ScanfArg[MAX_SCANF_ARGS];
573
574 if (Args->NumArgs > MAX_SCANF_ARGS)
575 {
576 ProgramFail(Parser, "too many arguments to scanf() - %d max", MAX_SCANF_ARGS);
577 }
578
579 for (ArgCount = 0; ArgCount < Args->NumArgs; ArgCount++)
580 {
581 ThisArg = (struct Value*)((char*)ThisArg +
582 MEM_ALIGN(sizeof(struct Value) + TypeStackSizeValue(ThisArg)));
583
584 if (ThisArg->Typ->Base == TypePointer)
585 {
586 ScanfArg[ArgCount] = ThisArg->Val->Pointer;
587 }
588 else if (ThisArg->Typ->Base == TypeArray)
589 {
590 ScanfArg[ArgCount] = &ThisArg->Val->ArrayMem[0];
591 }
592 else
593 {
594 ProgramFail(
595 Parser, "non-pointer argument to scanf() - argument %d after format", ArgCount + 1);
596 }
597 }
598
599 if (Stream != NULL)
600 {
601 return fscanf(Stream, Format, ScanfArg[0], ScanfArg[1], ScanfArg[2], ScanfArg[3],
602 ScanfArg[4], ScanfArg[5], ScanfArg[6], ScanfArg[7], ScanfArg[8], ScanfArg[9]);
603 }
604 else
605 {
606 return sscanf(StrIn, Format, ScanfArg[0], ScanfArg[1], ScanfArg[2], ScanfArg[3],
607 ScanfArg[4], ScanfArg[5], ScanfArg[6], ScanfArg[7], ScanfArg[8], ScanfArg[9]);
608 }
609}
610
611/* stdio calls */
612void StdioFopen(

Callers 6

StdioScanfFunction · 0.85
StdioFscanfFunction · 0.85
StdioSscanfFunction · 0.85
StdioVscanfFunction · 0.85
StdioVfscanfFunction · 0.85
StdioVsscanfFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected