[ale] OT: C not C++ Question

kschmidt at mindspring.com kschmidt at mindspring.com
Sun Dec 29 01:02:01 EST 2002



Why don't you want to use C++?

On 28 Dec 2002 23:20:00 -0500 cfowler <cfowler at outpostsentinel.com> wrote:

> I've been working on a little project to
> replicate the success I've had
> in Java (fast programming) to C (slow
> programming).  I've been
> replicating the Java classes to C and not C++. 
> But I've come into an
> interesting issue where since we have no
> garbage collector in C that we
> must be extremely careful to free all allocated
> data.  All the code in
> 'liboop' malloc()'s each object.
> 
> 
> Socket Object:
> 
> // Out Socket Object definition
> typedef struct oop_Socket {
>     struct sockaddr_in  inet; // Socket info
>     int sock;
>     BOOLEAN connected;
>     BOOLEAN debug;
>     BOOLEAN server;
>     BOOLEAN soReuseAddr;
> } Socket;
> 
> 
> Example Code:
> int
> main(int argc, char **argv)
> {
>         Socket *sock;
>         String *tmp;
>         InputStream *is;
>         OutputStream *os;
>         BufferedInputStream *bis;
>         String *to = String_new("");
>         String *from = String_new("");
>         int code;
> 
>         if((sock = Socket_new("192.168.1.254",
> 25)) == NULL)
>                 err("Could not create Socket");
> 
>         if((Socket_connect(sock)) == -1)
>                 err("Could not make
> conenction");
> 
>         //Now we have a conenction lets get out
> streams
>         is = Socket_getInputStream(sock);
>         os = Socket_getOutputStream(sock);
> 
>         // Create our buffered input stream
>         bis = BufferedInputStream_new(is);
> 
>         tmp =
> BufferedInputStream_readLine(bis);
>         printf("Got: [%s]\n",
> String_getChars(tmp));
>         String_dispose(tmp);
> 
>         tmp = String_new("Helo
> localhost.localdomain\r\n");
>         sendCmd(sock, tmp, &code);
>         String_dispose(tmp);
> 
>         tmp = String_new_1("MAIL FROM: %s\r\n",
> String_getChars(from));
>         sendCmd(sock, tmp, &code);
>         String_dispose(tmp);
> 
>         tmp = String_new_1("RCPT TO: %s\r\n",
> String_getChars(to));
>         sendCmd(sock, tmp, &code);
>         String_dispose(tmp);
> 
>         tmp = String_new("DATA\r\n");
>         sendCmd(sock, tmp, &code);
>         String_dispose(tmp);
> 
>         InputStream_dispose(is);
>         is = InputStream_new(NULL);
>         InputStream_setFd(is, 0); // Set FD to
> STDIN
>         bis = BufferedInputStream_new(is);
> 
>         while(true) {
>                 tmp =
> BufferedInputStream_readLine(bis);
> 
>                 if(String_startsWith(tmp, ".")
> == true) {
>                         String_append(tmp,
> "\r\n");
>                        
> OutputStream_write_1(os, tmp);
>                         tmp =
> BufferedInputStream_readLine(
>                                                
> BufferedInputStream_new(
>                                                
> Socket_getInputStream(sock)));
> 
>                         printf("Got: [%s]\n",
> String_getChars(tmp));
>                         String_dispose(tmp);
>                         break;
>                 }
> 
>                 String_append(tmp, "\r\n");
>                 OutputStream_write_1(os, tmp);
> 
>         }
> 
> 
>         // Clean up
>         String_dispose(to);
>         String_dispose(from);
>         BufferedInputStream_dispose(bis);
>         InputStream_dispose(is);
>         OutputStream_dispose(os);
>         Socket_dispose(sock);
> 
> }
> 
> 
> Since the test code never gets a pointer in the
> while loop to the
> BufferdInputStream that is created it is
> forever lost memory.  Any ideas
> on how I can accomplish these tasks.  Notice
> how the above C code looks
> like Java :)
> 
> 
> 
> _______________________________________________
> Ale mailing list
> Ale at ale.org
> http://www.ale.org/mailman/listinfo/ale
> 

_______________________________________________
Ale mailing list
Ale at ale.org
http://www.ale.org/mailman/listinfo/ale






More information about the Ale mailing list