Closed Bug 183075 Opened 22 years ago Closed 21 years ago

Improvements to regxpcom - 1.3

Categories

(Core :: XPCOM, defect)

x86
Windows XP
defect
Not set
normal

Tracking

()

RESOLVED FIXED

People

(Reporter: dougt, Assigned: dougt)

References

Details

Attachments

(1 file)

Required changes to RegXPCOM:

Use XPCOM Glue and Frozen Interfaces only.

Allowed to be run from any directory (such as /temp) and specify which XPCOM
registry this regristration attempt coosponds to.

RegXPCOM should allow GRE/build independency.  There shouldn’t be multiple
version of RegXPCOM.

Code clean up and reduction

Clean up console output – some goes to stderr, other goes to stdout.

Add Help option
Blocks: 168052
Attached patch patch v.1Splinter Review
Comment on attachment 119112 [details] [diff] [review]
patch v.1

i would like to land this for 1.4b.  If these changes are unacceptable for the
1.4 release, we may want to think about creating a new replacement application.
 The reason I say this is that we want to make sure that we don't bust anyone
using the current version of regxpcom and at the same time we don't want to
continue to block people that have these new registration requirements.
Attachment #119112 - Flags: superreview?(dveditz)
Attachment #119112 - Flags: review?(alecf)
Comment on attachment 119112 [details] [diff] [review]
patch v.1

+    char* xpcomPath = (char*) malloc(len + sizeof(XPCOM_DLL) +
sizeof(XPCOM_FILE_PATH_SEPARATOR) + 1);
+    sprintf(xpcomPath, "%s" XPCOM_FILE_PATH_SEPARATOR XPCOM_DLL,
gXPCOMLocation);

um, did you mean %s%s here? why not just use strcpy/strcat? don't forget to
check for OOM
+Mozilla RegXPCOM - a registration tool for xpcom components		       
\n\
+									       
\n\
+Usage: regxpcom [options] [file-or-directory]				       
\n\

do this:
printf(
"foo	    \n"
"bar	    \n"

super long lines are difficult to manage/indent in some editors - let C join
the strings instead

other than that, this looks great, doesn't seem to risky for 1.4 to me..lets
just get it in soon. r=alecf
Attachment #119112 - Flags: review?(alecf) → review+
> um, did you mean %s%s here? why not just use strcpy/strcat? don't forget to

Nope.  Same thing as you suggest in the next comment.  The second parameter to
sprintf looks like this after the preprocessor does its thing:

"%s" "\\" "xpcom.dll"

"difficult to manage/indent in some editors"  Bah.  Use Emacs!! :-)  seriously
though.... i will fix it ;-)

Comment on attachment 119112 [details] [diff] [review]
patch v.1

darin, got time to take a look?
Attachment #119112 - Flags: superreview?(dveditz) → superreview?(darin)
Comment on attachment 119112 [details] [diff] [review]
patch v.1

>+#include "stdlib.h"

#include <stdlib.h>

maybe some build environment cares??


>+  const char* fileLocation = nsnull;
...
>+  else if(strcmp(prop, NS_XPCOM_XPTI_REGISTRY_FILE) == 0 && gXPTIDatLocation)
>+  {
>+    fileLocation = gXPTIDatLocation;
>+  }
>+
>+  if (!fileLocation)
>+    return NS_ERROR_FAILURE;

hmm... why don't you just add an |else| clause above, like so:

  else if(strcmp(prop, NS_XPCOM_XPTI_REGISTRY_FILE) == 0 && gXPTIDatLocation)
  {
    fileLocation = gXPTIDatLocation;
  }
  else
    return NS_ERROR_FAILURE;

or can some of the g-prefixed variables be null?


>+  return localFile->QueryInterface(NS_GET_IID(nsIFile), (void**)_retval);

hmm... no query interface needed here since nsILocalFile inherits from nsIFile.

    NS_ADDREF(*_retval = localFile);
    return NS_OK;


>+  if (gXPCOMLocation) {
>+    int len = strlen(gXPCOMLocation);
>+    char* xpcomPath = (char*) malloc(len + sizeof(XPCOM_DLL) + sizeof(XPCOM_FILE_PATH_SEPARATOR) + 1);
>+    sprintf(xpcomPath, "%s" XPCOM_FILE_PATH_SEPARATOR XPCOM_DLL, gXPCOMLocation);

nit: sizeof(XPCOM_DLL) includes room for null byte, so you're allocating
two extra bytes.


>+    gPathEnvString = PR_smprintf("%s=%s;%s",
>+                                 XPCOM_SEARCH_KEY,
>+                                 gXPCOMLocation,
>+                                 path);

nit: check for memory allocation failure here?


>+    spec = do_CreateInstance(NS_LOCAL_FILE_CONTRACTID, &rv);
...
>+    rv = spec->InitWithNativePath(nsEmbedCString(path));

nit: why not use NS_NewNativeLocalFile?


>+          case 'q':
>+            gQuiet = PR_TRUE;
>+            break;
>+
>+        case 'a':

nit: indentation


sr=darin w/ nits addressed.
Attachment #119112 - Flags: superreview?(darin) → superreview+
all fixed but:

>+  return localFile->QueryInterface(NS_GET_IID(nsIFile), (void**)_retval);

> hmm... no query interface needed here since nsILocalFile inherits from nsIFile.

compiler wants it.
really?  can't you just use a static cast?
possible. i will give that a try - if it works that why i will go with that.
xpcom newsgroup posting regarding these changes:

news://news.mozilla.org:119/b6ag4n$8jt1@ripley.netscape.com

Checking in Makefile.in;
/cvsroot/mozilla/xpcom/tools/registry/Makefile.in,v  <--  Makefile.in
new revision: 1.29; previous revision: 1.28
done
Checking in regxpcom.cpp;
/cvsroot/mozilla/xpcom/tools/registry/regxpcom.cpp,v  <--  regxpcom.cpp
new revision: 1.24; previous revision: 1.23
done

Status: NEW → RESOLVED
Closed: 21 years ago
Resolution: --- → FIXED
Small fix needed: "behavoir"->"behavior" in the regxpcom help text.
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: