>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

Antwort per Email an