static void init_catalog(void) { static int done = FALSE; LOCK(); if ( !done++ ) { ichar *path = wgetenv("SGML_CATALOG_FILES"); if (!path) { UNLOCK(); return; } while (*path) { ichar buf[MAXPATHLEN]; ichar *s; if ((s = istrchr(path, L':'))) { istrncpy(buf, path, s - path); buf[s - path] = '\0'; path = s + 1; if ( buf[0] ) /* skip empty entries */ register_catalog_file_unlocked(buf, CTL_START); } else { if ( path[0] ) /* skip empty entries */ register_catalog_file_unlocked(path, CTL_START); break; } } } UNLOCK(); }
int ignore1(char **list, struct ignoretab *tab, const char *which) { char field[LINESIZE]; char **ap; struct ignore *igp; int h; if (*list == NULL) return (igshow(tab, which)); for (ap = list; *ap != 0; ap++) { istrncpy(field, *ap, sizeof(field)); if (member(field, tab)) continue; h = hash(field); igp = calloc(1, sizeof(struct ignore)); igp->i_field = calloc((unsigned)strlen(field) + 1, sizeof(char)); strcpy(igp->i_field, field); igp->i_link = tab->i_head[h]; tab->i_head[h] = igp; tab->i_count++; } return (0); }
int main() { char *str1 = istring_mk(NULL); char *str2 = istring_mk("Anders"); char *str3 = istring_mk("Alander"); char *str4 = istring_mk(" "); char *str9 = istring_to_string(str2); char *str5 = istrcat(str9,str4); char *str11 = istring_to_string(str5); char *str6 = istrcat(str11, str3); char *str7 = istring_to_string(str6); char *str8 = istring_mk("Erik"); char *str10 = istring_to_string(str5); char *str12 = "Anders Ålander"; char *str13 = istrncat(str9, str3,2); printf("An empty istring has length %zu\n", istrlen(str1)); printf("My first name is %s\n",str2); printf("My last name is %s\n",str3); printf("My name concatenated is %s\n", str6); printf("%s concatenated with the first %d chars from %s is %s\n", str2, 2, str3, str13); printf("%s has length %zu\n", str6, istrlen(str6)); printf("%s is my name stored as normal string, it also has length %zu\n", str7, strlen(str7)); printf("An istring's length can be changed without touching the string itself. %s has length %zu\n", str2, istrlen(str2)); str2 = istrslen(str2, 15); printf("but we can change it to %zu\n", istrlen(str2)); printf("Returns a pointer to the first given character in %s, for example a pointer to 's'gives %s\n", str2, istrchr(str2,'s')); printf("Same as above but from the end of %s. Pointer to 's' gives %s\n", str2, istrrchr(str2, 's')); printf("Are the strings %s and %s equal? %s\n", str2, str3, istrcmp(str2,str3)?"no":"yes"); printf("Which one of %s and %s is greatest? %s\n", str2, str3, istrcmp(str2,str3)<0?str2:str3); printf("Compares the first %d characters in %s and %s. The substring of %s is greatest\n", 3, str2, str3, istrncmp(str2, str3, 3) > 0?str3:str2); printf("The result of copying %s into %s is %s\n", str8, str12, istrcpy(str7, str8)); printf("The result of copying %d chars from %s into %s is %s\n", 3, str8, str12, istrncpy(str7,str8,3)); istring_rm(str1); istring_rm(str2); istring_rm(str3); istring_rm(str4); istring_rm(str5); istring_rm(str6); free(str7); istring_rm(str8); free(str9); free(str10); free(str11); istring_rm(str13); return 0; }
static ichar * DirName(const ichar *f, ichar *dir) { const ichar *base, *p; for (base = p = f; *p; p++) { if (isDirSep(*p) && p[1] != EOS) base = p; } if (base == f) { if (isDirSep(*f)) istrcpy(dir, DIRSEPSTR); else istrcpy(dir, L"."); } else { istrncpy(dir, f, base - f); dir[base - f] = EOS; } return dir; }
/*** Personaliza um arquivo dado. Parametros: FileName: Nome do arquivo a personalizar Name: Nome do usuario Company: Nome da compania Serial: Serial Number ActKey: Chave de ativacao Inportante: · O número serial deve estar na forma 11.222222.3333.444444 com pontos separando os campos. Ele deve sempre ter o strlen() <= 32. . O campo 1 eh de tamanho fixo. Os demais sao de tamanho variavel ate o limite maximo de 32 caracteres. · 11 = tipo da cópia · 222222 = Data. Se começar com número > 0 é data absoluta. Se começar (ATENCAO) com 0 é time bomb e se começar com letra indica cópia não demo. · 3333 = Número de terminais · 444444 = Um número serial Retorna: PE_DATA: Chave com data absoluta ja expirou PE_TYPE: Tipo nao bate PE_ACTKEY: Chave de ativacao nao bate PE_SERIAL: Numero de serie com formacao ou tamanho errado PE_PARAM: Parametros invalidos PE_TIMEBOMB: Tentando personalizar copia time-bomb de novo. Deve Re-instalar PE_LOCALIZA: Nao achou marca no arquivo PE_POSERROR: Falhou no seek PE_WRITEERROR: Falhou ao tentar escrever no arquivo PE_OK: Ok ***/ int Personalize( char *szFileName, char *szName, char *szCompany, char*szSerial, char *szActKey ) { char data_hoje[MAXDATAINST+1]; time_t time_aux; FILE *fp; int check = 0; char data[MAXDATA+1]; char szBufAux[MAXDATA+1]; struct tm *dma; long tloc; if( szFileName == NULL || szName == NULL || szCompany == NULL || szSerial == NULL || szActKey == NULL ){ return( PE_PARAM ); } if( strlen( szSerial ) > MAXSIZESERIAL ){ return( PE_SERIAL ); } if( !ValidKey( szSerial, szActKey ) ){ return( PE_ACTKEY ); } // Calculo os deslocamentos variaveis em relacao ao serial passado if( CalculaDeslocamentos( szSerial ) != PE_OK ){ return( PE_SERIAL ); } // Verifico se eh uma data absoluta e se ja expirou. if( isdigit( szSerial[DESLOCDATA] ) && szSerial[DESLOCDATA]>'0' ){ /* Eh uma copia demo com data absoluta. VAMOS VERIFICAR!!! */ time( &tloc ); dma = localtime( &tloc ); sprintf( szBufAux, "%04.2d%02.2d", dma->tm_year + 1900, dma->tm_mon + 1 ); // MAXDATA deve ser 6 ; yyyymm. Assim mesmo nos protegemos procurando o '.' istrncpychar( data, szSerial+DESLOCDATA, MAXDATA, '.' ); if( strncmp( szBufAux, data, MAXDATA ) > 0 ) { return( PE_DATA ); } } /* procura a estrutura str_pers */ if( (fp = localiza( szFileName, str_pers )) == NULL ) { return( PE_LOCALIZA ); } // Verifico TIPO da copia antes de decriptografar pois esta em // area nao criptografada. if( strncmp( TIPO( str_pers ), szSerial+DESLOCTIPO, MAXTIPO ) != 0 ){ return( PE_TYPE ); } if( PERS( str_pers ) == PE_PERS ) { /* Jah passou o "person" por aqui antes. * decriptografo a estrutura, para nao perder as * demais informacoes nela contidas: data_instalacao, num_serie, etc. */ Decriptografa( DATAINST(str_pers), CHECKSUM( str_pers ) ); iIsDecrypt = TRUE; } if( szSerial[DESLOCDATA] == '0' ){ // Eh um numero de serie time-bomb if( PERS( str_pers ) == PE_PERS ){ /* Tentando fazer person de time bomb sobre uma copia * previamente personalizada. Nao deixo!!!! Que o filho * da mae re-instale o produto. */ fclose( fp ); return( PE_TIMEBOMB ); } } // Posiciono no inicio da marca para gravar estrutura de // personalizacao if( fseek( fp, lPosicao, 0 ) == -1 ) { fclose( fp ); return( PE_POSERROR ); } // Monto a estrutura de personalizacao time_aux = time( &time_aux ); strftime( data_hoje, sizeof( data_hoje ), "%Y%m%d", localtime( &time_aux ) ); istrncpy( DATAINST( str_pers ), data_hoje, MAXDATAINST ); istrncpy( NOME( str_pers ), szName, MAXNOME ); istrncpy( NAMECOMPANY( str_pers ), szCompany, MAXCOMPANY ); istrncpy( SERIE( str_pers ), szSerial, MAXSIZESERIAL ); // O tipo da copia ja vem pre-gravado e nao preciso colocar. /* indica que o produto estah personalizado */ PERS( str_pers ) = PE_PERS; check = Criptografa( DATAINST( str_pers ), CHECKSUM( str_pers ) ); CHECKSUM( str_pers )[ 0 ] = ( check & 0xFF00 ) >> 8; CHECKSUM( str_pers )[ 1 ] = ( check & 0x00FF ); if( fwrite( (char *) str_pers, sizeof str_pers, 1, fp ) != 1 ) { fclose( fp ); return( PE_WRITEERROR ); } fclose( fp ); return( PE_OK ); }