1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
8 #include "nsIComponentRegistrar.h"
9 #include "nsIServiceManager.h"
14 static bool gUnreg
= false;
16 void print_err(nsresult err
) {
18 case NS_ERROR_FACTORY_NOT_LOADED
:
19 cerr
<< "Factory not loaded";
22 cerr
<< "No Interface";
24 case NS_ERROR_NULL_POINTER
:
25 cerr
<< "Null pointer";
27 case NS_ERROR_OUT_OF_MEMORY
:
28 cerr
<< "Out of memory";
31 cerr
<< hex
<< err
<< dec
;
35 nsresult
Register(nsIComponentRegistrar
* registrar
, const char* path
) {
36 nsCOMPtr
<nsIFile
> file
;
38 NS_NewLocalFile(NS_ConvertUTF8toUTF16(path
), true, getter_AddRefs(file
));
39 if (NS_FAILED(rv
)) return rv
;
40 rv
= registrar
->AutoRegister(file
);
44 nsresult
Unregister(const char* path
) {
45 /* NEEDS IMPLEMENTATION */
47 nsresult res
= nsComponentManager::AutoUnregisterComponent(path
);
50 return NS_ERROR_FAILURE
;
54 int ProcessArgs(nsIComponentRegistrar
* registrar
, int argc
, char* argv
[]) {
59 if (argv
[i
][0] == '-') {
61 for (j
= 1; argv
[i
][j
] != '\0'; j
++) {
67 cerr
<< "Unknown option '" << argv
[i
][j
] << "'\n";
73 res
= Unregister(argv
[i
]);
74 if (NS_SUCCEEDED(res
)) {
75 cout
<< "Successfully unregistered: " << argv
[i
] << "\n";
77 cerr
<< "Unregister failed (";
79 cerr
<< "): " << argv
[i
] << "\n";
82 res
= Register(registrar
, argv
[i
]);
83 if (NS_SUCCEEDED(res
)) {
84 cout
<< "Successfully registered: " << argv
[i
] << "\n";
86 cerr
<< "Register failed (";
88 cerr
<< "): " << argv
[i
] << "\n";
97 int main(int argc
, char* argv
[]) {
101 nsCOMPtr
<nsIServiceManager
> servMan
;
102 rv
= NS_InitXPCOM(getter_AddRefs(servMan
), nullptr, nullptr);
103 if (NS_FAILED(rv
)) return -1;
104 nsCOMPtr
<nsIComponentRegistrar
> registrar
= do_QueryInterface(servMan
);
105 NS_ASSERTION(registrar
, "Null nsIComponentRegistrar");
107 /* With no arguments, RegFactory will autoregister */
109 rv
= registrar
->AutoRegister(nullptr);
110 ret
= (NS_FAILED(rv
)) ? -1 : 0;
112 ret
= ProcessArgs(registrar
, argc
, argv
);
113 } // this scopes the nsCOMPtrs
114 // no nsCOMPtrs are allowed to be alive when you call NS_ShutdownXPCOM
115 rv
= NS_ShutdownXPCOM(nullptr);
116 NS_ASSERTION(NS_SUCCEEDED(rv
), "NS_ShutdownXPCOM failed");