wsplitpath_s

errno_t __cdecl wsplitpath_s(
        const wchar_t *FullPath,
        wchar_t *Drive,
        size_t DriveSize,
        wchar_t *Dir,
        size_t DirSize,
        wchar_t *Filename,
        size_t FilenameSize,
        wchar_t *Ext,
        size_t ExtSize){
  wchar_t *v9; 
  size_t v11; 
  int v13; 
  __int64 v14; 
  const wchar_t *v15; 
  WCHAR v16; 
  wchar_t *v17; 
  WCHAR *v18; 
  wchar_t *v19; 
  unsigned __int64 v20; 
  unsigned __int64 v21; 
  unsigned __int64 v22; 
  unsigned __int64 v23; 
  v9 = (wchar_t *)FullPath;
  v11 = DriveSize;
  v13 = 0;
  if( !FullPath )
    goto LABEL_4;
  if( Drive )
  {
    if( !DriveSize )
      goto LABEL_4;
  }
  else if( DriveSize )
  {
LABEL_4:
    v13 = 1;
    goto LABEL_57;
  }
  if( Dir )
  {
    if( !DirSize )
      goto LABEL_4;
  }
  else if( DirSize )
  {
    goto LABEL_4;
  }
  if( Filename )
  {
    if( !FilenameSize )
      goto LABEL_4;
  }
  else if( FilenameSize )
  {
    goto LABEL_4;
  }
  if( Ext )
  {
    if( !ExtSize )
      goto LABEL_4;
  }
  else if( ExtSize )
  {
    goto LABEL_4;
  }
  v14 = 1i64;
  v15 = FullPath;
  do
  {
    if( !*v15 )
      break;
    ++v15;
    --v14;
  }
  while( v14 );
  if( *v15 == 58 )
  {
    if( Drive )
    {
      if( DriveSize < 3 )
        goto LABEL_57;
      wcsncpy_s(Drive, DriveSize, (WCHAR *)FullPath, 2ui64);
    }
    v9 = (wchar_t *)(v15 + 1);
  }
  else if( Drive )
  {
    *Drive = 0;
  }
  v16 = *v9;
  v17 = 0i64;
  v18 = 0i64;
  v19 = v9;
  if( !*v9 )
    goto LABEL_40;
  do
  {
    if( v16 == 47 || v16 == 92 )
    {
      v17 = v19 + 1;
    }
    else if( v16 == 46 )
    {
      v18 = v19;
    }
    v16 = *++v19;
  }
  while( *v19 );
  if( v17 )
  {
    if( Dir )
    {
      v20 = v17 - v9;
      if( DirSize <= v20 )
        goto LABEL_56;
      wcsncpy_s(Dir, DirSize, v9, v20);
    }
    v9 = v17;
  }
  else
  {
LABEL_40:
    if( Dir )
      *Dir = 0;
  }
  if( !v18 || v18 < v9 )
  {
    if( Filename )
    {
      v23 = v19 - v9;
      if( FilenameSize <= v23 )
        goto LABEL_56;
      wcsncpy_s(Filename, FilenameSize, v9, v23);
    }
    if( Ext )
      *Ext = 0;
    return 0;
  }
  if( !Filename )
  {
LABEL_47:
    if( !Ext )
      return 0;
    v22 = v19 - v18;
    if( ExtSize > v22 )
    {
      wcsncpy_s(Ext, ExtSize, v18, v22);
      return 0;
    }
    goto LABEL_56;
  }
  v21 = v18 - v9;
  if( FilenameSize > v21 )
  {
    wcsncpy_s(Filename, FilenameSize, v9, v21);
    goto LABEL_47;
  }
LABEL_56:
  v13 = 0;
  v11 = DriveSize;
LABEL_57:
  if( Drive && v11 )
    *Drive = 0;
  if( Dir && DirSize )
    *Dir = 0;
  if( Filename && FilenameSize )
    *Filename = 0;
  if( Ext && ExtSize )
    *Ext = 0;
  if( v9 && !v13 )
    return 34;
  xHalTimerWatchdogStop(0i64, 0i64);
  return 22;
}

Referenced by:

No references.