>rn fehlt ....
Oops, sieht ja wie code fuer Obfuscated C Contest :-(
sorry!
also nochmal als Text:
Kompillieren mit: cc -o strexmpl
strexmpl.c >>>>>>>>>>>>>> strexmpl.c
#include <stdio.h>
#define CUSTOM_PATH "/init/"
#define BUFLEN 1024
/*!
Original open Funktion. Hier als Dummy, nur fuer die Testausgaben
*/
int orig_open( const char* path, int flags ){
printf("orig_open( path=%s, flags=%d)n", path, flags );
}
/*!
Variante 1 mit Buffer fester Laenge.
Einerseits wird evtl. unnoetig viel Speicher reserviert, andererseits
(aber weniger wahrscheinlich) kann der reservierte Speicher nicht ausreichen
*/
int open1( const char* path, int flags ){
char buff[BUFLEN] = CUSTOM_PATH; // Buff enthaelt jetz "/init/ "
strcat (buff,path); // Nun steht komplette Path in Buff.
return orig_open( buff, flags );
}
/*!
Variante 2 nur tatsaechlich benoetigte Speichermenge dynamisch allokieren
*/
int open2( const char* path, int flags ){
char * buff = 0; // Zeiger Buff mit 0 (NULL) initialisiert
// Speicher mit korrekter Laenge (+1 wg. String-abschliessender Null)
allokieren
// und den buff-Zeiger darauf zeigen lassen
buff = (char *) malloc ( strlen( CUSTOM_PATH ) + strlen(path) +1 );
strcpy(buff,CUSTOM_PATH); // Buff enthaelt jetz "/init/ "
strcat(buff,path); // Nun steht komplette Path in Buff.
return orig_open( buff, flags );
}
int main( int ac, char **al ){
printf("Tests fuer open1n");
// Testaufrufe
open1("etc/passwd", 0);
open1("usr/bin", 0);
open1("var/log/httpd.log", 0);
printf("nnTests fuer open2n");
// Testaufrufe
open2("etc/passwd", 0);
open2("usr/bin", 0);
open2("var/log/httpd.log", 0);
return 0;
}
<<<<<<<<<<<<<<<<<< eof
--
----------------------------------------------------------------------------
PUG - Penguin User Group Wiesbaden - http://www.pug.org