[Spice-devel] [spice-xpi 4/5] Add SpiceControllerWin class

Christophe Fergeau cfergeau at redhat.com
Mon Mar 25 04:30:24 PDT 2013


Hey, thanks for the detailed review!

A few questions below,

On Sun, Mar 24, 2013 at 11:27:45PM +0100, Marc-André Lureau wrote:
> On Sun, Mar 24, 2013 at 12:16 PM, Christophe Fergeau
> <cfergeau at redhat.com> wrote:
> > +SpiceControllerWin::~SpiceControllerWin()
> > +{
> > +}
> > +
> > +int SpiceControllerWin::Connect()
> > +{
> > +    HANDLE hClientPipe;
> > +
> > +    hClientPipe = CreateFile(m_name.c_str(),
> > +                             GENERIC_READ |  GENERIC_WRITE,
> > +                             0, NULL,
> > +                             OPEN_EXISTING,
> > +                             SECURITY_SQOS_PRESENT | SECURITY_ANONYMOUS,
> > +                             NULL);
> 
> I would simplify a little, just g_return_val_if_fail(hClientPipe !=
> INVALID_HANDLE_VALUE, -1) here instead of extra conditions and
> branches below.
> 
> > +    if (hClientPipe != INVALID_HANDLE_VALUE) {
> > +        g_warning("Connection OK");
> > +        m_pipe = g_win32_output_stream_new(hClientPipe, TRUE);
> > +        return 0;
> > +    } else {
> > +        g_warning("Connection failed");
> > +        return -1;
> > +    }
> > +    g_return_val_if_reached(-1);
> > +}
> 
>  In general, returning true on success is easier to read.

This mimics the return value of connect(2), I'd prefer to keep that (at
least in that patch, can be improved as a separate cleanup as this needs
changes in SpiceController and SpiceControllerUnix as well).

> > +//checks whether the handle owner is the current user.
> > +static bool is_same_user(HANDLE handle)
> > +{
> > +    PSECURITY_DESCRIPTOR psec_desc_handle = NULL;
> > +    PSECURITY_DESCRIPTOR psec_desc_user = NULL;
> > +    PSID psid_handle;
> > +    PSID psid_user;
> > +    bool ret;
> > +
> > +    ret = !get_sid(handle, &psid_handle, &psec_desc_handle) &&
> > +          !get_sid(GetCurrentProcess(), &psid_user, &psec_desc_user) &&
> > +          EqualSid(psid_handle, psid_user);
> 
> That would make this easier to read.

'That' ? Sorry didn't get what you mean here.

> 
> > +    LocalFree(psec_desc_handle);
> > +    LocalFree(psec_desc_user);
> > +    return ret;
> > +}
> > +
> > +bool SpiceControllerWin::CheckPipe()
> > +{
> > +    void *hClientPipe;
> > +
> > +    if (!G_IS_WIN32_OUTPUT_STREAM(m_pipe))
> > +        return false;
> 
> g_return_val_if_fail(G_IS_WIN32_OUTPUT_STREAM(m_pipe), FALSE) is more idiomatic.
> 
> > +    hClientPipe = g_win32_output_stream_get_handle(G_WIN32_OUTPUT_STREAM(m_pipe));
> > +    // Verify the named-pipe-server owner is the current user.
> > +    // Do it here so upon failure use next condition cleanup code.
> > +    if (hClientPipe != INVALID_HANDLE_VALUE) {
> 
> Can this happen? If not, it would be nicer to have g_return
> pre-condition for that.

g_return pre-condition? Do you mean this:

hClientPipe = g_win32_output_stream_get_handle(G_WIN32_OUTPUT_STREAM(m_pipe));
g_return_if_fail(hClientPipe != INVALID_HANDLE_VALUE);

?

Thanks,

Christophe
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/spice-devel/attachments/20130325/9af68e9e/attachment.pgp>


More information about the Spice-devel mailing list