tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

rmdir.c (2299B)


      1 /* -*- Mode: C++; tab-width: 4; 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/. */
      5 
      6 /*
      7 ** File:        rmdir.c
      8 ** Description: Demonstrate bugzilla 80884.
      9 **
     10 ** after fix to unix_errors.c, message should report correct
     11 ** failure of PR_Rmdir().
     12 **
     13 **
     14 **
     15 */
     16 
     17 #include <prio.h>
     18 #include <stdio.h>
     19 #include <prerror.h>
     20 #include <prlog.h>
     21 #include "plgetopt.h"
     22 
     23 #define DIRNAME "xxxBug80884/"
     24 #define FILENAME "file80883"
     25 
     26 PRBool failed_already = PR_FALSE;
     27 PRBool debug_mode = PR_FALSE;
     28 
     29 PRLogModuleInfo* lm;
     30 
     31 /*
     32 ** Help() -- print Usage information
     33 */
     34 static void Help(void) {
     35  fprintf(stderr,
     36          "template usage:\n"
     37          "\t-d     debug mode\n");
     38 } /* --- end Help() */
     39 
     40 int main(int argc, char** argv) {
     41  PLOptStatus os;
     42  PLOptState* opt = PL_CreateOptState(argc, argv, "dh");
     43  PRFileDesc* fd;
     44  PRErrorCode err;
     45 
     46  /* parse command line options */
     47  while (PL_OPT_EOL != (os = PL_GetNextOpt(opt))) {
     48    if (PL_OPT_BAD == os) {
     49      continue;
     50    }
     51    switch (opt->option) {
     52      case 'd': /* debug mode */
     53        debug_mode = PR_TRUE;
     54        break;
     55      case 'h':
     56      default:
     57        Help();
     58        return 2;
     59    }
     60  }
     61  PL_DestroyOptState(opt);
     62 
     63  lm = PR_NewLogModule("testcase");
     64 
     65  (void)PR_MkDir(DIRNAME, 0777);
     66  fd = PR_Open(DIRNAME FILENAME, PR_CREATE_FILE | PR_RDWR, 0666);
     67  if (fd == 0) {
     68    PRErrorCode err = PR_GetError();
     69    fprintf(stderr, "create file fails: %d: %s\n", err,
     70            PR_ErrorToString(err, PR_LANGUAGE_I_DEFAULT));
     71    failed_already = PR_TRUE;
     72    goto Finished;
     73  }
     74 
     75  PR_Close(fd);
     76 
     77  if (PR_RmDir(DIRNAME) == PR_SUCCESS) {
     78    fprintf(stderr, "remove directory succeeds\n");
     79    failed_already = PR_TRUE;
     80    goto Finished;
     81  }
     82 
     83  err = PR_GetError();
     84  fprintf(stderr, "remove directory fails with: %d: %s\n", err,
     85          PR_ErrorToString(err, PR_LANGUAGE_I_DEFAULT));
     86 
     87  (void)PR_Delete(DIRNAME FILENAME);
     88  (void)PR_RmDir(DIRNAME);
     89 
     90  return 0;
     91 
     92 Finished:
     93  if (debug_mode) {
     94    printf("%s\n", (failed_already) ? "FAILED" : "PASS");
     95  }
     96  return ((failed_already) ? 1 : 0);
     97 } /* --- end main() */
     98 /* --- end template.c */