All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pedro Monjo Florit <pedro.monjo@futurlink.com>
To: bluez-users@lists.sourceforge.net
Subject: Re: [Bluez-users] malloc & free
Date: Wed, 06 Apr 2005 09:12:05 +0200	[thread overview]
Message-ID: <42538BC5.7060106@futurlink.com> (raw)
In-Reply-To: <1112554711.8263.13.camel@pegasus>

[-- Attachment #1: Type: text/plain, Size: 2051 bytes --]

Marcel Holtmann wrote:
>Hi Pedro,
>
>  
>>In the application I am developing, I want to log some information about 
>>Bluetooth devices, pretty much like "sdptool browse" and "hcitool info" 
>>do. In the code of these applications, there are calls to some library 
>>functions like hci_dflagstostr(), hci_lmtostr()... that create a string 
>>with information about the device (flags, features, etc.).
>>
>>The problem with these functions is that they call malloc(), expecting 
>>the caller to call free(). The problem with that is that this approach 
>>is not save, as it is not guaranteed that calling malloc() in a library 
>>function and free() in the main program works. In fact, I have seen a 
>>segmentation fault doing that.
>>    
>
>explain why this is not safe.
>  
I am not an expert in these issues, but I have read many times that 
there is no guarantee that the malloc/free implementation is the same in 
the main program and in the libraries. This is due to how the different 
modules are compiled: compiler version, compile flags, etc. But, as I 
said, I am not 100% sure. I am quite sure that I have read this for 
Windows, but maybe (probably) Linux is different.
>  
>>AFAIK, there are two alternatives: either the library functions expect a 
>>buffer (and its size) to be filled or malloc() and free() are both done 
>>within the library, which means creating a new library function call for 
>>freeing buffers allocated with malloc(). Are any of this alternatives 
>>implemented or on the roadmap? What workaround do you suggest?
>>    
>
>We can do that, but it is not on my roadmap. Send my patches for it and
>I will review them.
The easiest way to do it (and to continue with the actual API without 
modifications) would be to have a function call like:

void hci_str_free(char *str)
{
    free(str);
}

So after a call to hci_dflagstostr() (for example), the resulting 
pointer should be freed with hci_str_free(). In any case, there is one 
exception: hci_dtypetostr(); it returns a pointer to static data.

Cheers,

Pedro

[-- Attachment #2: Type: text/html, Size: 2693 bytes --]

  reply	other threads:[~2005-04-06  7:12 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-03-31 16:30 [Bluez-users] malloc & free Pedro Monjo Florit
2005-04-03 18:58 ` Marcel Holtmann
2005-04-06  7:12   ` Pedro Monjo Florit [this message]
2005-04-06  7:33     ` Xavier Garreau

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=42538BC5.7060106@futurlink.com \
    --to=pedro.monjo@futurlink.com \
    --cc=bluez-users@lists.sourceforge.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.