Constructor for a packagetarget struct The Next CEO of Stack OverflowJava constructor should use setter?Constructor Chaining in JavaImprove testability of constructorFramework constructorCritique of realloc() wrapperCount PDF pages in constructorDownloading images from a forumEmulating constructor overloading in TypescriptOpenGL Shape class constructorFinding the longest word without these characters follow-up

Is French Guiana a (hard) EU border?

Solving system of ODEs with extra parameter

WOW air has ceased operation, can I get my tickets refunded?

Is there always a complete, orthogonal set of unitary matrices?

Is there a way to save my career from absolute disaster?

Why is quantifier elimination desirable for a given theory?

Writing differences on a blackboard

Is it convenient to ask the journal's editor for two additional days to complete a review?

Does Germany produce more waste than the US?

Why does the flight controls check come before arming the autobrake on the A320?

Does increasing your ability score affect your main stat?

Is it ever safe to open a suspicious HTML file (e.g. email attachment)?

Why didn't Khan get resurrected in the Genesis Explosion?

Newlines in BSD sed vs gsed

How to get from Geneva Airport to Metabief?

How did people program for Consoles with multiple CPUs?

What is the value of α and β in a triangle?

Why the difference in type-inference over the as-pattern in two similar function definitions?

What flight has the highest ratio of time difference to flight time?

How to install OpenCV on Raspbian Stretch?

RigExpert AA-35 - Interpreting The Information

Method for adding error messages to a dictionary given a key

What steps are necessary to read a Modern SSD in Medieval Europe?

Why is information "lost" when it got into a black hole?



Constructor for a packagetarget struct



The Next CEO of Stack OverflowJava constructor should use setter?Constructor Chaining in JavaImprove testability of constructorFramework constructorCritique of realloc() wrapperCount PDF pages in constructorDownloading images from a forumEmulating constructor overloading in TypescriptOpenGL Shape class constructorFinding the longest word without these characters follow-up










1












$begingroup$


As many of you know goto is usually signs of code smell. However I thought this could be an appropriate case, and would like confirmation or criticism.



Unnecessary section such as the called functions were removed. Every non-standard function returns an int as status, 0 is "OK"; except linkedlist_open() which returns a pointer which could be NULL if the system runs out of memory.



packagetarget_close() does implement the necessary NULL checks.



packagetarget *packagetarget_open()

packagetarget *target = (packagetarget*) malloc(sizeof(packagetarget));

if (!target) return NULL;

if (packagetarget_setname(target, ""))
goto disposer;
if (packagetarget_setsys(target, PACKAGETARGET_SYS))
goto disposer;
if (packagetarget_setarch(target, PACKAGETARGET_ARCH))
goto disposer;
if (packagetarget_setmin(target, PACKAGETARGET_MIN))
goto disposer;
if (packagetarget_setver(target, PACKAGETARGET_VER))
goto disposer;
if (packagetarget_setmax(target, PACKAGETARGET_MAX))
goto disposer;

linkedlist *comp = linkedlist_open();

if (!comp) goto disposer;

target->comp = comp;

return target;

disposer:
packagetarget_close(target);
return NULL;




Each setter function follows a simple pattern. Since each setter is identical, I will only put the code for packagetarget_setname.



int packagetarget_setname(packagetarget *target, char *name)

if (!target) return 1;

if (!name) return 2;

target->name = realloc(target->name, strlen(name) * sizeof(char));

if (!target->name) return 3;

strcpy(target->name, name);

return 0;



Here is the packagetarget_close function:



void packagetarget_close(packagetarget *target)

if (!target) return;

if (target->name) free(target->name);
if (target->sys) free(target->sys);
if (target->arch) free(target->arch);
if (target->min) free(target->min);
if (target->ver) free(target->ver);
if (target->min) free(target->min);
if (target->comp) linkedlist_close(target->comp);

free(target);

return;



linkedlist_open is a similar function to the packagetarget_open.



linkedlist *linkedlist_open()

linkedlist *list = (linkedlist*) malloc(sizeof(linkedlist));

if (!list) return NULL;

list->head = NULL;
list->length = 0;
list->remhook = NULL;

return list;



The one thing most of these functions is they may fail when the system runs out of memory. So I have implemented checks for each step.










share|improve this question









New contributor




utkumaden is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$endgroup$











  • $begingroup$
    "However I thought this could be an appropriate case, and would like confirmation or criticism." Yet you've stripped the code out of all it's context so we can't determine whether you're right or not. The code you've provided looks like it should've been used in a wrapper, not with goto constructs. Please provide more code and an explanation of what it's supposed to do so we can see how this snippet is being used. Stack Overflow likes minimal examples, Code Review does absolutely not. Please take a look at our FAQ on asking questions.
    $endgroup$
    – Mast
    4 hours ago










  • $begingroup$
    Not all of the functions are written, yet. This function is a constructor for a struct named packagetarget. The idea is to allocate the struct in memory, and then call the setter methods for each field, which may fail. EDIT: If any step fails, the destructor function is called, once; and the function returns a null pointer.
    $endgroup$
    – utkumaden
    4 hours ago











  • $begingroup$
    If not all the functions are written, are you sure it works the way it should? And how can you be sure this is the right way to do it if you haven't completed the rest? It sounds like you're simply too early in the process got get this meaningfully reviewed and your question answered.
    $endgroup$
    – Mast
    4 hours ago










  • $begingroup$
    I have updated the question to include more code.
    $endgroup$
    – utkumaden
    3 hours ago










  • $begingroup$
    What is a constructor in C? I know what a constructor is in C++. Did you mean C++?
    $endgroup$
    – pacmaninbw
    3 hours ago















1












$begingroup$


As many of you know goto is usually signs of code smell. However I thought this could be an appropriate case, and would like confirmation or criticism.



Unnecessary section such as the called functions were removed. Every non-standard function returns an int as status, 0 is "OK"; except linkedlist_open() which returns a pointer which could be NULL if the system runs out of memory.



packagetarget_close() does implement the necessary NULL checks.



packagetarget *packagetarget_open()

packagetarget *target = (packagetarget*) malloc(sizeof(packagetarget));

if (!target) return NULL;

if (packagetarget_setname(target, ""))
goto disposer;
if (packagetarget_setsys(target, PACKAGETARGET_SYS))
goto disposer;
if (packagetarget_setarch(target, PACKAGETARGET_ARCH))
goto disposer;
if (packagetarget_setmin(target, PACKAGETARGET_MIN))
goto disposer;
if (packagetarget_setver(target, PACKAGETARGET_VER))
goto disposer;
if (packagetarget_setmax(target, PACKAGETARGET_MAX))
goto disposer;

linkedlist *comp = linkedlist_open();

if (!comp) goto disposer;

target->comp = comp;

return target;

disposer:
packagetarget_close(target);
return NULL;




Each setter function follows a simple pattern. Since each setter is identical, I will only put the code for packagetarget_setname.



int packagetarget_setname(packagetarget *target, char *name)

if (!target) return 1;

if (!name) return 2;

target->name = realloc(target->name, strlen(name) * sizeof(char));

if (!target->name) return 3;

strcpy(target->name, name);

return 0;



Here is the packagetarget_close function:



void packagetarget_close(packagetarget *target)

if (!target) return;

if (target->name) free(target->name);
if (target->sys) free(target->sys);
if (target->arch) free(target->arch);
if (target->min) free(target->min);
if (target->ver) free(target->ver);
if (target->min) free(target->min);
if (target->comp) linkedlist_close(target->comp);

free(target);

return;



linkedlist_open is a similar function to the packagetarget_open.



linkedlist *linkedlist_open()

linkedlist *list = (linkedlist*) malloc(sizeof(linkedlist));

if (!list) return NULL;

list->head = NULL;
list->length = 0;
list->remhook = NULL;

return list;



The one thing most of these functions is they may fail when the system runs out of memory. So I have implemented checks for each step.










share|improve this question









New contributor




utkumaden is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$endgroup$











  • $begingroup$
    "However I thought this could be an appropriate case, and would like confirmation or criticism." Yet you've stripped the code out of all it's context so we can't determine whether you're right or not. The code you've provided looks like it should've been used in a wrapper, not with goto constructs. Please provide more code and an explanation of what it's supposed to do so we can see how this snippet is being used. Stack Overflow likes minimal examples, Code Review does absolutely not. Please take a look at our FAQ on asking questions.
    $endgroup$
    – Mast
    4 hours ago










  • $begingroup$
    Not all of the functions are written, yet. This function is a constructor for a struct named packagetarget. The idea is to allocate the struct in memory, and then call the setter methods for each field, which may fail. EDIT: If any step fails, the destructor function is called, once; and the function returns a null pointer.
    $endgroup$
    – utkumaden
    4 hours ago











  • $begingroup$
    If not all the functions are written, are you sure it works the way it should? And how can you be sure this is the right way to do it if you haven't completed the rest? It sounds like you're simply too early in the process got get this meaningfully reviewed and your question answered.
    $endgroup$
    – Mast
    4 hours ago










  • $begingroup$
    I have updated the question to include more code.
    $endgroup$
    – utkumaden
    3 hours ago










  • $begingroup$
    What is a constructor in C? I know what a constructor is in C++. Did you mean C++?
    $endgroup$
    – pacmaninbw
    3 hours ago













1












1








1





$begingroup$


As many of you know goto is usually signs of code smell. However I thought this could be an appropriate case, and would like confirmation or criticism.



Unnecessary section such as the called functions were removed. Every non-standard function returns an int as status, 0 is "OK"; except linkedlist_open() which returns a pointer which could be NULL if the system runs out of memory.



packagetarget_close() does implement the necessary NULL checks.



packagetarget *packagetarget_open()

packagetarget *target = (packagetarget*) malloc(sizeof(packagetarget));

if (!target) return NULL;

if (packagetarget_setname(target, ""))
goto disposer;
if (packagetarget_setsys(target, PACKAGETARGET_SYS))
goto disposer;
if (packagetarget_setarch(target, PACKAGETARGET_ARCH))
goto disposer;
if (packagetarget_setmin(target, PACKAGETARGET_MIN))
goto disposer;
if (packagetarget_setver(target, PACKAGETARGET_VER))
goto disposer;
if (packagetarget_setmax(target, PACKAGETARGET_MAX))
goto disposer;

linkedlist *comp = linkedlist_open();

if (!comp) goto disposer;

target->comp = comp;

return target;

disposer:
packagetarget_close(target);
return NULL;




Each setter function follows a simple pattern. Since each setter is identical, I will only put the code for packagetarget_setname.



int packagetarget_setname(packagetarget *target, char *name)

if (!target) return 1;

if (!name) return 2;

target->name = realloc(target->name, strlen(name) * sizeof(char));

if (!target->name) return 3;

strcpy(target->name, name);

return 0;



Here is the packagetarget_close function:



void packagetarget_close(packagetarget *target)

if (!target) return;

if (target->name) free(target->name);
if (target->sys) free(target->sys);
if (target->arch) free(target->arch);
if (target->min) free(target->min);
if (target->ver) free(target->ver);
if (target->min) free(target->min);
if (target->comp) linkedlist_close(target->comp);

free(target);

return;



linkedlist_open is a similar function to the packagetarget_open.



linkedlist *linkedlist_open()

linkedlist *list = (linkedlist*) malloc(sizeof(linkedlist));

if (!list) return NULL;

list->head = NULL;
list->length = 0;
list->remhook = NULL;

return list;



The one thing most of these functions is they may fail when the system runs out of memory. So I have implemented checks for each step.










share|improve this question









New contributor




utkumaden is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$endgroup$




As many of you know goto is usually signs of code smell. However I thought this could be an appropriate case, and would like confirmation or criticism.



Unnecessary section such as the called functions were removed. Every non-standard function returns an int as status, 0 is "OK"; except linkedlist_open() which returns a pointer which could be NULL if the system runs out of memory.



packagetarget_close() does implement the necessary NULL checks.



packagetarget *packagetarget_open()

packagetarget *target = (packagetarget*) malloc(sizeof(packagetarget));

if (!target) return NULL;

if (packagetarget_setname(target, ""))
goto disposer;
if (packagetarget_setsys(target, PACKAGETARGET_SYS))
goto disposer;
if (packagetarget_setarch(target, PACKAGETARGET_ARCH))
goto disposer;
if (packagetarget_setmin(target, PACKAGETARGET_MIN))
goto disposer;
if (packagetarget_setver(target, PACKAGETARGET_VER))
goto disposer;
if (packagetarget_setmax(target, PACKAGETARGET_MAX))
goto disposer;

linkedlist *comp = linkedlist_open();

if (!comp) goto disposer;

target->comp = comp;

return target;

disposer:
packagetarget_close(target);
return NULL;




Each setter function follows a simple pattern. Since each setter is identical, I will only put the code for packagetarget_setname.



int packagetarget_setname(packagetarget *target, char *name)

if (!target) return 1;

if (!name) return 2;

target->name = realloc(target->name, strlen(name) * sizeof(char));

if (!target->name) return 3;

strcpy(target->name, name);

return 0;



Here is the packagetarget_close function:



void packagetarget_close(packagetarget *target)

if (!target) return;

if (target->name) free(target->name);
if (target->sys) free(target->sys);
if (target->arch) free(target->arch);
if (target->min) free(target->min);
if (target->ver) free(target->ver);
if (target->min) free(target->min);
if (target->comp) linkedlist_close(target->comp);

free(target);

return;



linkedlist_open is a similar function to the packagetarget_open.



linkedlist *linkedlist_open()

linkedlist *list = (linkedlist*) malloc(sizeof(linkedlist));

if (!list) return NULL;

list->head = NULL;
list->length = 0;
list->remhook = NULL;

return list;



The one thing most of these functions is they may fail when the system runs out of memory. So I have implemented checks for each step.







c error-handling memory-management constructor






share|improve this question









New contributor




utkumaden is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











share|improve this question









New contributor




utkumaden is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this question




share|improve this question








edited 2 mins ago









200_success

130k17156420




130k17156420






New contributor




utkumaden is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









asked 4 hours ago









utkumadenutkumaden

61




61




New contributor




utkumaden is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





utkumaden is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






utkumaden is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











  • $begingroup$
    "However I thought this could be an appropriate case, and would like confirmation or criticism." Yet you've stripped the code out of all it's context so we can't determine whether you're right or not. The code you've provided looks like it should've been used in a wrapper, not with goto constructs. Please provide more code and an explanation of what it's supposed to do so we can see how this snippet is being used. Stack Overflow likes minimal examples, Code Review does absolutely not. Please take a look at our FAQ on asking questions.
    $endgroup$
    – Mast
    4 hours ago










  • $begingroup$
    Not all of the functions are written, yet. This function is a constructor for a struct named packagetarget. The idea is to allocate the struct in memory, and then call the setter methods for each field, which may fail. EDIT: If any step fails, the destructor function is called, once; and the function returns a null pointer.
    $endgroup$
    – utkumaden
    4 hours ago











  • $begingroup$
    If not all the functions are written, are you sure it works the way it should? And how can you be sure this is the right way to do it if you haven't completed the rest? It sounds like you're simply too early in the process got get this meaningfully reviewed and your question answered.
    $endgroup$
    – Mast
    4 hours ago










  • $begingroup$
    I have updated the question to include more code.
    $endgroup$
    – utkumaden
    3 hours ago










  • $begingroup$
    What is a constructor in C? I know what a constructor is in C++. Did you mean C++?
    $endgroup$
    – pacmaninbw
    3 hours ago
















  • $begingroup$
    "However I thought this could be an appropriate case, and would like confirmation or criticism." Yet you've stripped the code out of all it's context so we can't determine whether you're right or not. The code you've provided looks like it should've been used in a wrapper, not with goto constructs. Please provide more code and an explanation of what it's supposed to do so we can see how this snippet is being used. Stack Overflow likes minimal examples, Code Review does absolutely not. Please take a look at our FAQ on asking questions.
    $endgroup$
    – Mast
    4 hours ago










  • $begingroup$
    Not all of the functions are written, yet. This function is a constructor for a struct named packagetarget. The idea is to allocate the struct in memory, and then call the setter methods for each field, which may fail. EDIT: If any step fails, the destructor function is called, once; and the function returns a null pointer.
    $endgroup$
    – utkumaden
    4 hours ago











  • $begingroup$
    If not all the functions are written, are you sure it works the way it should? And how can you be sure this is the right way to do it if you haven't completed the rest? It sounds like you're simply too early in the process got get this meaningfully reviewed and your question answered.
    $endgroup$
    – Mast
    4 hours ago










  • $begingroup$
    I have updated the question to include more code.
    $endgroup$
    – utkumaden
    3 hours ago










  • $begingroup$
    What is a constructor in C? I know what a constructor is in C++. Did you mean C++?
    $endgroup$
    – pacmaninbw
    3 hours ago















$begingroup$
"However I thought this could be an appropriate case, and would like confirmation or criticism." Yet you've stripped the code out of all it's context so we can't determine whether you're right or not. The code you've provided looks like it should've been used in a wrapper, not with goto constructs. Please provide more code and an explanation of what it's supposed to do so we can see how this snippet is being used. Stack Overflow likes minimal examples, Code Review does absolutely not. Please take a look at our FAQ on asking questions.
$endgroup$
– Mast
4 hours ago




$begingroup$
"However I thought this could be an appropriate case, and would like confirmation or criticism." Yet you've stripped the code out of all it's context so we can't determine whether you're right or not. The code you've provided looks like it should've been used in a wrapper, not with goto constructs. Please provide more code and an explanation of what it's supposed to do so we can see how this snippet is being used. Stack Overflow likes minimal examples, Code Review does absolutely not. Please take a look at our FAQ on asking questions.
$endgroup$
– Mast
4 hours ago












$begingroup$
Not all of the functions are written, yet. This function is a constructor for a struct named packagetarget. The idea is to allocate the struct in memory, and then call the setter methods for each field, which may fail. EDIT: If any step fails, the destructor function is called, once; and the function returns a null pointer.
$endgroup$
– utkumaden
4 hours ago





$begingroup$
Not all of the functions are written, yet. This function is a constructor for a struct named packagetarget. The idea is to allocate the struct in memory, and then call the setter methods for each field, which may fail. EDIT: If any step fails, the destructor function is called, once; and the function returns a null pointer.
$endgroup$
– utkumaden
4 hours ago













$begingroup$
If not all the functions are written, are you sure it works the way it should? And how can you be sure this is the right way to do it if you haven't completed the rest? It sounds like you're simply too early in the process got get this meaningfully reviewed and your question answered.
$endgroup$
– Mast
4 hours ago




$begingroup$
If not all the functions are written, are you sure it works the way it should? And how can you be sure this is the right way to do it if you haven't completed the rest? It sounds like you're simply too early in the process got get this meaningfully reviewed and your question answered.
$endgroup$
– Mast
4 hours ago












$begingroup$
I have updated the question to include more code.
$endgroup$
– utkumaden
3 hours ago




$begingroup$
I have updated the question to include more code.
$endgroup$
– utkumaden
3 hours ago












$begingroup$
What is a constructor in C? I know what a constructor is in C++. Did you mean C++?
$endgroup$
– pacmaninbw
3 hours ago




$begingroup$
What is a constructor in C? I know what a constructor is in C++. Did you mean C++?
$endgroup$
– pacmaninbw
3 hours ago










0






active

oldest

votes












Your Answer





StackExchange.ifUsing("editor", function ()
return StackExchange.using("mathjaxEditing", function ()
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix)
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
);
);
, "mathjax-editing");

StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");

StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "196"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);

else
createEditor();

);

function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);



);






utkumaden is a new contributor. Be nice, and check out our Code of Conduct.









draft saved

draft discarded


















StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f216545%2fconstructor-for-a-packagetarget-struct%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown

























0






active

oldest

votes








0






active

oldest

votes









active

oldest

votes






active

oldest

votes








utkumaden is a new contributor. Be nice, and check out our Code of Conduct.









draft saved

draft discarded


















utkumaden is a new contributor. Be nice, and check out our Code of Conduct.












utkumaden is a new contributor. Be nice, and check out our Code of Conduct.











utkumaden is a new contributor. Be nice, and check out our Code of Conduct.














Thanks for contributing an answer to Code Review Stack Exchange!


  • Please be sure to answer the question. Provide details and share your research!

But avoid …


  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.

Use MathJax to format equations. MathJax reference.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f216545%2fconstructor-for-a-packagetarget-struct%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

瀋陽號驅逐艦 目录 接收與服役 配置反潛直升機 武進三型性能升級 歷史 除役 參考資料 外部連結 导航菜单Taiwan Air Power海疆老兵-陽字號驅逐艦沿革World Navies Today: Taiwan (Republic of China)DD-839 USS POWER编

波兰旗帜列表 目录 国旗 军旗 其他制服部门旗帜 特别国家机构船只 参考文献 外部链接 导航菜单Polskie flagi, chorągwie, bandery... [波兰旗帜、条幅、船旗等]原始内容Ustawa z dnia 31 stycznia 1980 r. o godle, barwach i hymnie Rzeczypospolitej Polskiej oraz o pieczęciach państwowychZarządzenie Ministra Obrony Narodowej z dnia 14 grudnia 2005 r. zmieniające zarządzenie w sprawie szczegółowych zasad używania znaków Sił Zbrojnych Rzeczypospolitej Polskiej oraz ustalenia innych znaków używanych w Siłach Zbrojnych Rzeczypospolitej PolskiejZarządzenie Ministra Obrony Narodowej z dnia 29 stycznia 1996 r. w sprawie szczegółowych zasad używania znaków Sił Zbrojnych Rzeczypospolitej Polskiej oraz ustalenia innych znaków używanych w Siłach Zbrojnych Rzeczypospolitej PolskiejUstawa z dnia 19 lutego 1993 r. o znakach Sił Zbrojnych Rzeczypospolitej PolskiejHistoria Marynarki Wojennej RP [波兰海军史]Rozporządzenie Ministra Spraw Wewnętrznych i Administracji z dnia 12 kwietnia 2002 r. w sprawie wzoru flagi oraz oznakowania jednostek pływających i statków powietrznych Straży GranicznejRozporządzenie Ministra Spraw Wewnętrznych i Administracji z dnia 18 kwietnia 2005 r. w sprawie wzoru flagi oraz oznakowania jednostek pływających i statków powietrznych PolicjiRozporządzenie Ministra Infrastruktury z dnia 21 października 2005 r. w sprawie wzorów flag dla statków morskich na oznaczenie pełnionej specjalnej służby państwowej oraz okoliczności i warunków ich podnoszenia波兰旗帜波兰编

Indenting and Dedenting ASP code with Python