ParseCmdLine.c 763 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. /*
  2. * Turn an CHAR16 * command line into a CHAR16 * argv, INT argc pair.
  3. *
  4. */
  5. #include <efi.h>
  6. #include <efilib.h>
  7. #include <ParseCmdLine.h>
  8. int ParseCmdLine(CHAR16 **argv[], CHAR16 *LoadOptions, int LoadOptionSize)
  9. {
  10. CHAR16 *buf = LoadOptions;
  11. int len = LoadOptionSize;
  12. int i; // Index into buf
  13. int argc = 0; // Count of argv entries
  14. *argv[argc++] = LoadOptions ? LoadOptions: L"##NoName##";
  15. for ( i = 0; len > 0; len-= 2, i++) {
  16. if ( buf[i] == L' ' ) {
  17. // end of current argv entry, start next?
  18. buf[i] = L'\0';
  19. do {
  20. len -= 2;
  21. i++;
  22. } while( (buf[i] == L' ') && (len > 0) );
  23. *argv[argc] = &buf[i];
  24. if ( len > 0 ) argc++;
  25. }
  26. }
  27. *argv[argc] = NULL;
  28. return argc;
  29. }