Patch para pegar arquivos ocultos no Linux com Directory()

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Patch para pegar arquivos ocultos no Linux com Directory()

Mensagem por Stanis Luksys »

Bom,

Conforme comentado em outro tópico, no Linux a função Directory não retorna os arquivos ocultos. Sendo assim, fiz este pequeno patch para que torne isso possível.

Para tanto, salve o código abaixo com o nome direct-hidden-linux.001.path, encontre o arquivo direct.c dentro do diretório de fontes do Harbour, e aplique o patch:

Código: Selecionar todos

 $ patch direct.c < direct-hidden-linux.001.patch
Segue o direct-hidden-linux.001.patch:

Código: Selecionar todos

202a203,249
> #ifdef HB_OS_UNIX
> /*
> * Alterado por Stanis para considerar arquivos no formato (.*) 
> * no Linux como se tivessem atributo de oculto, retornados por "H" 
> */
> 	if( szAttributes && *szAttributes && strstr(szAttributes,"H") )
> 	{
> 		int i,j;
> 		char szDirSpecH[] = "";
> 		for ( j=strlen(szDirSpec); j >= 0; j-- )
> 		{
> 			if ( szDirSpec[j] == HB_OS_PATH_DELIM_CHR ) 
> 			{
> 				szDirSpecH[j] = HB_OS_PATH_DELIM_CHR;
> 				szDirSpecH[j+1] = '.';
> 				break;
> 			} 
> 			else
> 				szDirSpecH[j+1] = szDirSpec[j];
> 		}
> 		szDirSpecH[strlen(szDirSpec)+1]='\0';
> 
> 		for ( i=0; i < j ; i++ )
> 			szDirSpecH[i] = szDirSpec[i];
> 
> 		if( ( ffind = hb_fsFindFirst( szDirSpecH, ulMask ) ) != NULL )
> 		{
> 			PHB_ITEM pSubarray = hb_itemNew( NULL );
> 			do
> 			{
> 				char buffer[ 32 ];
> 				hb_arrayNew( pSubarray, F_LEN );
> 				hb_arraySetC   ( pSubarray, F_NAME, ffind->szName );
> 				hb_arraySetNInt( pSubarray, F_SIZE, ffind->size );
> 				hb_arraySetDL  ( pSubarray, F_DATE, ffind->lDate );
> 				hb_arraySetC   ( pSubarray, F_TIME, ffind->szTime );
> 				hb_arraySetC   ( pSubarray, F_ATTR, hb_fsAttrDecode( ffind->attr, buffer ) );
> 				hb_arrayAddForward( pDir, pSubarray );
> 			}
> 			while( hb_fsFindNext( ffind ) );
> 
> 			hb_itemRelease( pSubarray );
> 			hb_fsFindClose( ffind );
> 		}
> 	}
> #endif
> 
208d254
< 
Abraços e até mais!
IMPORTANTE: Válido somente para Harbour 2.0.0 (Rev. 13372). Demais versões devem ser corrigidas manualmente a menos que o direct.c seja idêntico ao desta versão. Verifique isso através do CHANGELOG.
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Responder